class R10K::Module::Git

Attributes

repo[R]

@!attribute [r] repo

@api private
@return [R10K::Git::StatefulRepository]

Public Class Methods

implement?(name, args) click to toggle source
# File lib/r10k/module/git.rb, line 10
def self.implement?(name, args)
  args.is_a? Hash and args.has_key?(:git)
rescue
  false
end
new(title, dirname, args, environment=nil) click to toggle source
Calls superclass method R10K::Module::Base.new
# File lib/r10k/module/git.rb, line 21
def initialize(title, dirname, args, environment=nil)
  super

  parse_options(@args)

  @repo = R10K::Git::StatefulRepository.new(@remote, @dirname, @name)
end

Public Instance Methods

properties() click to toggle source
# File lib/r10k/module/git.rb, line 33
def properties
  {
    :expected => version,
    :actual   => (@repo.head || "(unresolvable)"),
    :type     => :git,
  }
end
status() click to toggle source
# File lib/r10k/module/git.rb, line 46
def status
  @repo.status(version)
end
sync(opts={}) click to toggle source
# File lib/r10k/module/git.rb, line 41
def sync(opts={})
  force = opts && opts.fetch(:force, true)
  @repo.sync(version, force)
end
version() click to toggle source
# File lib/r10k/module/git.rb, line 29
def version
  validate_ref(@desired_ref, @default_ref)
end

Private Instance Methods

parse_options(options) click to toggle source
# File lib/r10k/module/git.rb, line 66
def parse_options(options)
  ref_opts = [:branch, :tag, :commit, :ref]
  known_opts = [:git, :default_branch] + ref_opts

  unhandled = options.keys - known_opts
  unless unhandled.empty?
    raise ArgumentError, _("Unhandled options %{unhandled} specified for %{class}") % {unhandled: unhandled, class: self.class}
  end

  @remote = options[:git]

  @desired_ref = ref_opts.find { |key| break options[key] if options.has_key?(key) } || 'master'
  @default_ref = options[:default_branch]

  if @desired_ref == :control_branch
    if @environment && @environment.respond_to?(:ref)
      @desired_ref = @environment.ref
    else
      raise ArgumentError, _("Cannot track control repo branch from Puppetfile in this context: environment is nil or did not provide a valid ref")
    end
  end
end
validate_ref(desired, default) click to toggle source
# File lib/r10k/module/git.rb, line 52
def validate_ref(desired, default)
  if desired && @repo.resolve(desired)
    return desired
  elsif default && @repo.resolve(default)
    return default
  else
    if default
      raise ArgumentError, _("Unable to manage Puppetfile content '%{name}': Could not resolve desired ref '%{desired}' or default ref '%{default}'") % {name: @name, desired: desired, default: default}
    else
      raise ArgumentError, _("Unable to manage Puppetfile content '%{name}': Could not resolve desired ref '%{desired}' and no default given") % {name: @name, desired: desired}
    end
  end
end