Class: R10K::Git::WorkingDir
- Inherits:
-
Repository
- Object
- Repository
- R10K::Git::WorkingDir
- Extended by:
- Forwardable
- Includes:
- Logging
- Defined in:
- lib/r10k/git/working_dir.rb
Overview
Implements sparse git repositories with shared objects
Working directory instances use the git alternatives object store, so that working directories only contain checked out files and all object files are shared.
Constant Summary
Constants included from Logging
Instance Attribute Summary collapse
-
#cache ⇒ Object
readonly
Returns the value of attribute cache.
-
#ref ⇒ Object
readonly
Returns the value of attribute ref.
-
#remote ⇒ Object
readonly
Returns the value of attribute remote.
Attributes inherited from Repository
Instance Method Summary collapse
-
#checkout(ref) ⇒ Object
check out the given ref.
-
#cloned? ⇒ true, false
(also: #git?)
Determine if repo has been cloned into a specific dir.
-
#current ⇒ R10k::Git::Head
The currently checked out HEAD.
-
#exist? ⇒ true, false
Does a directory exist where we expect a working dir to be?.
-
#initialize(ref, remote, basedir, dirname = nil) ⇒ WorkingDir
constructor
Create a new shallow git working directory.
- #outdated? ⇒ Boolean
-
#resolve_remote_head(pattern, remote = 'cache') ⇒ Object
Prefer remote heads from the ‘cache’ remote over the real remote.
-
#sync ⇒ Object
Synchronize the local git repository.
- #update ⇒ Object
Methods included from Logging
formatter, included, level, level=, levels, #logger, #logger_name, outputter, parse_level
Methods inherited from Repository
#remotes, #resolve_commit, #resolve_head, #resolve_ref, #resolve_tag, #tags
Constructor Details
#initialize(ref, remote, basedir, dirname = nil) ⇒ WorkingDir
Create a new shallow git working directory
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/r10k/git/working_dir.rb', line 34 def initialize(ref, remote, basedir, dirname = nil) @remote = remote @basedir = basedir @dirname = dirname || ref @full_path = File.join(@basedir, @dirname) @git_dir = File.join(@full_path, '.git') @alternates = R10K::Git::Alternates.new(@git_dir) @cache = R10K::Git::Cache.generate(@remote) if ref.is_a? String @ref = R10K::Git::Ref.new(ref, self) else @ref = ref @ref.repository = self end end |
Instance Attribute Details
#cache ⇒ Object (readonly)
Returns the value of attribute cache.
18 19 20 |
# File 'lib/r10k/git/working_dir.rb', line 18 def cache @cache end |
#ref ⇒ Object (readonly)
Returns the value of attribute ref.
22 23 24 |
# File 'lib/r10k/git/working_dir.rb', line 22 def ref @ref end |
#remote ⇒ Object (readonly)
Returns the value of attribute remote.
26 27 28 |
# File 'lib/r10k/git/working_dir.rb', line 26 def remote @remote end |
Instance Method Details
#checkout(ref) ⇒ Object
check out the given ref
91 92 93 94 95 96 97 98 99 |
# File 'lib/r10k/git/working_dir.rb', line 91 def checkout(ref) if ref.resolvable? git ["checkout", "--force", @ref.sha1], :path => @full_path else raise R10K::Git::UnresolvableRefError.new( "Cannot check out unresolvable ref '#{@ref}'", :git_dir => @full_path) end end |
#cloned? ⇒ true, false Also known as: git?
Determine if repo has been cloned into a specific dir
77 78 79 |
# File 'lib/r10k/git/working_dir.rb', line 77 def cloned? File.directory? @git_dir end |
#current ⇒ R10k::Git::Head
The currently checked out HEAD
104 105 106 |
# File 'lib/r10k/git/working_dir.rb', line 104 def current R10K::Git::Head.new('HEAD', self) end |
#exist? ⇒ true, false
Does a directory exist where we expect a working dir to be?
84 85 86 |
# File 'lib/r10k/git/working_dir.rb', line 84 def exist? File.directory? @full_path end |
#outdated? ⇒ Boolean
108 109 110 |
# File 'lib/r10k/git/working_dir.rb', line 108 def outdated? @ref.fetch? or needs_checkout? end |
#resolve_remote_head(pattern, remote = 'cache') ⇒ Object
Prefer remote heads from the ‘cache’ remote over the real remote
113 114 115 |
# File 'lib/r10k/git/working_dir.rb', line 113 def resolve_remote_head(pattern, remote = 'cache') super(pattern, remote) end |
#sync ⇒ Object
Synchronize the local git repository.
55 56 57 58 59 60 61 |
# File 'lib/r10k/git/working_dir.rb', line 55 def sync if not cloned? clone else update end end |
#update ⇒ Object
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/r10k/git/working_dir.rb', line 63 def update update_remotes if update_remotes? if ref_needs_fetch? fetch_from_cache checkout(@ref) elsif needs_checkout? checkout(@ref) end end |