Class: R10K::Source::Git
- Includes:
- Logging, Util::Purgeable
- Defined in:
- lib/r10k/source/git.rb
Overview
This class implements a source for Git environments.
A Git source generates environments by locally caching the given Git repository and enumerating the branches for the Git repository. Branches are mapped to environments without modification.
Defined Under Namespace
Classes: BranchName
Constant Summary
Constants included from Logging
Instance Attribute Summary collapse
- #cache ⇒ Object readonly
- #invalid_branches ⇒ Object readonly
- #remote ⇒ Object readonly
- #settings ⇒ Object readonly
Attributes inherited from Base
Instance Method Summary collapse
- #current_contents ⇒ Object
-
#desired_contents ⇒ Array<String>
List all environments that should exist in the basedir for this source.
-
#environments ⇒ Array<R10K::Environment::Git>
Load the git remote and create environments for each branch.
- #generate_environments ⇒ Object
-
#initialize(name, basedir, options = {}) ⇒ Git
constructor
Initialize the given source.
- #managed_directory ⇒ Object
-
#preload! ⇒ void
(also: #fetch_remote)
Update the git cache for this git source to get the latest list of environments.
Methods included from Util::Purgeable
#logger, #pending_contents, #purge!, #stale_contents
Methods included from Logging
formatter, included, level, level=, levels, #logger, #logger_name, outputter, parse_level
Methods inherited from Base
Constructor Details
#initialize(name, basedir, options = {}) ⇒ Git
Initialize the given source.
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/r10k/source/git.rb', line 51 def initialize(name, basedir, = {}) super @environments = [] @remote = [:remote] @invalid_branches = ([:invalid_branches] || 'correct_and_warn') @cache = R10K::Git::Cache.generate(@remote) end |
Instance Attribute Details
#cache ⇒ Object (readonly)
28 29 30 |
# File 'lib/r10k/source/git.rb', line 28 def cache @cache end |
#invalid_branches ⇒ Object (readonly)
38 39 40 |
# File 'lib/r10k/source/git.rb', line 38 def invalid_branches @invalid_branches end |
#remote ⇒ Object (readonly)
23 24 25 |
# File 'lib/r10k/source/git.rb', line 23 def remote @remote end |
#settings ⇒ Object (readonly)
33 34 35 |
# File 'lib/r10k/source/git.rb', line 33 def settings @settings end |
Instance Method Details
#current_contents ⇒ Object
109 110 111 112 113 114 115 116 117 |
# File 'lib/r10k/source/git.rb', line 109 def current_contents dir = self.managed_directory glob_part = @prefix ? @name.to_s() + '_*' : '*' glob_exp = File.join(dir, glob_part) Dir.glob(glob_exp).map do |fname| File.basename fname end end |
#desired_contents ⇒ Array<String>
This implements a required method for the Purgeable mixin
List all environments that should exist in the basedir for this source
122 123 124 |
# File 'lib/r10k/source/git.rb', line 122 def desired_contents environments.map {|env| env.dirname } end |
#environments ⇒ Array<R10K::Environment::Git>
Load the git remote and create environments for each branch. If the cache has not been fetched, this will return an empty list.
75 76 77 78 79 80 81 82 83 |
# File 'lib/r10k/source/git.rb', line 75 def environments if not @cache.cached? [] elsif @environments.empty? @environments = generate_environments() else @environments end end |
#generate_environments ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/r10k/source/git.rb', line 85 def generate_environments envs = [] branch_names.each do |bn| if bn.valid? envs << R10K::Environment::Git.new(bn.name, @basedir, bn.dirname, {:remote => remote, :ref => bn.name}) elsif bn.correct? logger.warn "Environment #{bn.name.inspect} contained non-word characters, correcting name to #{bn.dirname}" envs << R10K::Environment::Git.new(bn.name, @basedir, bn.dirname, {:remote => remote, :ref => bn.name}) elsif bn.validate? logger.error "Environment #{bn.name.inspect} contained non-word characters, ignoring it." end end envs end |
#managed_directory ⇒ Object
105 106 107 |
# File 'lib/r10k/source/git.rb', line 105 def managed_directory @basedir end |
#preload! ⇒ void Also known as: fetch_remote
This method returns an undefined value.
Update the git cache for this git source to get the latest list of environments.
65 66 67 68 |
# File 'lib/r10k/source/git.rb', line 65 def preload! logger.debug "Determining current branches for Git source #{@remote.inspect}" @cache.sync end |