Class: R10K::Git::Cache Abstract
- Inherits:
-
Object
- Object
- R10K::Git::Cache
- Extended by:
- Forwardable
- Includes:
- Logging, Settings::Mixin, Util::Cacheable
- Defined in:
- lib/r10k/git/cache.rb
Overview
Cache Git repository mirrors for object database reuse.
This implements most of the behavior needed for Git repo caching, but needs to have a specific Git bare repository provided. Subclasses should implement the Cache.bare_repository method.
Direct Known Subclasses
Constant Summary
Constants included from Logging
Logging::LOG_LEVELS, Logging::SYSLOG_LEVELS_MAP
Instance Attribute Summary collapse
- #path ⇒ Object readonly
-
#repo ⇒ Object
readonly
Returns the value of attribute repo.
Class Method Summary collapse
-
.bare_repository ⇒ Object
abstract
The concrete bare repository implementation to use for interacting with the cached Git repository.
-
.generate(remote) ⇒ R10K::Git::Cache
Generate a new instance with the given remote or return an existing object with the given remote.
- .instance_cache ⇒ Object private
Instance Method Summary collapse
-
#initialize(remote) ⇒ Cache
constructor
A new instance of Cache.
- #reset! ⇒ Object private
- #sanitized_dirname ⇒ Object
- #sync ⇒ Object
- #sync! ⇒ Object
- #synced? ⇒ Boolean
Methods included from Logging
add_outputters, debug_formatter, default_formatter, default_outputter, #logger, #logger_name, parse_level
Methods included from Util::Cacheable
Methods included from Settings::Mixin
Constructor Details
#initialize(remote) ⇒ Cache
Returns a new instance of Cache.
66 67 68 69 |
# File 'lib/r10k/git/cache.rb', line 66 def initialize(remote) @remote = remote @repo = self.class..new(settings[:cache_root], sanitized_dirname) end |
Instance Attribute Details
#path ⇒ Object (readonly)
56 57 58 59 |
# File 'lib/r10k/git/cache.rb', line 56 def path logger.warn _("%{class}#path is deprecated; use #git_dir") % {class: self.class} git_dir end |
#repo ⇒ Object (readonly)
Returns the value of attribute repo.
63 64 65 |
# File 'lib/r10k/git/cache.rb', line 63 def repo @repo end |
Class Method Details
.bare_repository ⇒ Object
Returns The concrete bare repository implementation to use for interacting with the cached Git repository.
43 44 45 |
# File 'lib/r10k/git/cache.rb', line 43 def self. raise NotImplementedError end |
.generate(remote) ⇒ R10K::Git::Cache
Generate a new instance with the given remote or return an existing object with the given remote. This should be used over R10K::Git::Cache.new.
36 37 38 |
# File 'lib/r10k/git/cache.rb', line 36 def self.generate(remote) instance_cache.generate(remote) end |
.instance_cache ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
26 27 28 |
# File 'lib/r10k/git/cache.rb', line 26 def self.instance_cache @instance_cache end |
Instance Method Details
#reset! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
98 99 100 |
# File 'lib/r10k/git/cache.rb', line 98 def reset! @synced = false end |
#sanitized_dirname ⇒ Object
104 105 106 |
# File 'lib/r10k/git/cache.rb', line 104 def sanitized_dirname @sanitized_dirname ||= super(@remote) end |
#sync ⇒ Object
71 72 73 74 75 76 |
# File 'lib/r10k/git/cache.rb', line 71 def sync if !@synced sync! @synced = true end end |
#sync! ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/r10k/git/cache.rb', line 82 def sync! if cached? @repo.fetch else logger.debug1 _("Creating new git cache for %{remote}") % {remote: @remote.inspect} # TODO extract this to an initialization step if !File.exist?(settings[:cache_root]) FileUtils.mkdir_p settings[:cache_root] end @repo.clone(@remote) end end |
#synced? ⇒ Boolean
78 79 80 |
# File 'lib/r10k/git/cache.rb', line 78 def synced? @synced end |