Class: R10K::Environment::Git

Inherits:
WithModules show all
Includes:
Util::Purgeable, Util::Setopts
Defined in:
lib/r10k/environment/git.rb

Overview

This class implements an environment based on a Git branch.

Since:

  • 1.3.0

Constant Summary

Constants included from Util::Purgeable

Util::Purgeable::FN_MATCH_OPTS, Util::Purgeable::HIDDEN_FILE

Constants included from Logging

Logging::LOG_LEVELS

Instance Attribute Summary collapse

Attributes inherited from WithModules

#moduledir

Attributes inherited from Base

#basedir, #dirname, #loader, #managed_directories, #name, #path, #puppetfile, #puppetfile_name

Instance Method Summary collapse

Methods included from Util::Purgeable

#current_contents, #logger, #managed_directories, #matches?, #pending_contents, #potentially_purgeable, #purge!, #stale_contents

Methods included from Logging

debug_formatter, default_formatter, default_outputter, #logger, #logger_name, parse_level

Methods inherited from WithModules

#accept, #add_module, #deploy, #load_modules, #module_conflicts?, #modules, #purge_exclusions

Methods inherited from Base

#accept, #deploy, #determine_purge_exclusions, #generate_types!, #info, #load_puppetfile_modules, #module_conflicts?, #modules, #purge_exclusions, #whitelist

Constructor Details

#initialize(name, basedir, dirname, options = {}) ⇒ Git

Initialize the given Git environment.

Parameters:

  • name (String)

    The unique name describing this environment.

  • basedir (String)

    The base directory where this environment will be created.

  • dirname (String)

    The directory name for this environment.

  • options (Hash) (defaults to: {})

    An additional set of options for this environment.

  • options (String) (defaults to: {})

    :remote The URL to the remote git repository

  • options (String) (defaults to: {})

    :ref The git reference to use for this environment

Since:

  • 1.3.0



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/r10k/environment/git.rb', line 38

def initialize(name, basedir, dirname, options = {})
  super
  setopts(options, {
    # Standard option interface
    :version => :ref,
    :source  => :remote,
    :type    => ::R10K::Util::Setopts::Ignore,

    # Type-specific options
    :ref     => :self,
    :remote  => :self,

  }, raise_on_unhandled: false)
  # TODO: in r10k 4.0.0, a major version bump, stop allowing garbage options.
  # We only allow them now, here, on this object, because prior to adopting
  # setopts in the constructor, this object type didn't do any validation
  # checking of options passed, and would permit garbage parameters.

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

Instance Attribute Details

#refObject (readonly)

Since:

  • 1.3.0



20
21
22
# File 'lib/r10k/environment/git.rb', line 20

def ref
  @ref
end

#remoteObject (readonly)

Since:

  • 1.3.0



16
17
18
# File 'lib/r10k/environment/git.rb', line 16

def remote
  @remote
end

#repoObject (readonly)

Since:

  • 1.3.0



25
26
27
# File 'lib/r10k/environment/git.rb', line 25

def repo
  @repo
end

Instance Method Details

#desired_contentsArray<String>

Note:

This implements a required method for the Purgeable mixin

Returns an array of the full paths to all the content being managed.

Returns:

  • (Array<String>)

Since:

  • 1.3.0



88
89
90
91
92
# File 'lib/r10k/environment/git.rb', line 88

def desired_contents
  desired = [File.join(@full_path, '.git')]
  desired += @repo.tracked_paths.map { |entry| File.join(@full_path, entry) }
  desired += super
end

#signatureString

Return a sting which uniquely identifies (per source) the current state of the environment.

Returns:

  • (String)

Since:

  • 1.3.0



79
80
81
# File 'lib/r10k/environment/git.rb', line 79

def signature
  @repo.head
end

#statusObject

Since:

  • 1.3.0



70
71
72
# File 'lib/r10k/environment/git.rb', line 70

def status
  @repo.status(@ref)
end

#syncvoid

This method returns an undefined value.

Clone or update the given Git environment.

If the environment is being created for the first time, it will automatically update all modules to ensure that the environment is complete.

Since:

  • 1.3.0



66
67
68
# File 'lib/r10k/environment/git.rb', line 66

def sync
  @repo.sync(@ref)
end