Class: ChefDK::Policyfile::ComparisonBase::Git

Inherits:
Object
  • Object
show all
Defined in:
lib/chef-dk/policyfile/comparison_base.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ref, policyfile_lock_relpath) ⇒ Git

Returns a new instance of Git.



54
55
56
57
# File 'lib/chef-dk/policyfile/comparison_base.rb', line 54

def initialize(ref, policyfile_lock_relpath)
  @ref = ref
  @policyfile_lock_relpath = policyfile_lock_relpath
end

Instance Attribute Details

#policyfile_lock_relpathObject (readonly)

Returns the value of attribute policyfile_lock_relpath.



52
53
54
# File 'lib/chef-dk/policyfile/comparison_base.rb', line 52

def policyfile_lock_relpath
  @policyfile_lock_relpath
end

#refObject (readonly)

Returns the value of attribute ref.



51
52
53
# File 'lib/chef-dk/policyfile/comparison_base.rb', line 51

def ref
  @ref
end

Instance Method Details

#git_cmdObject



73
74
75
# File 'lib/chef-dk/policyfile/comparison_base.rb', line 73

def git_cmd
  @git_cmd ||= Mixlib::ShellOut.new(git_cmd_string)
end

#git_cmd_stringObject



77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/chef-dk/policyfile/comparison_base.rb', line 77

def git_cmd_string
  # Git is a little picky about how we specify the paths, but it looks
  # like we don't need to worry about the relative path to the root of
  # the repo if we give git a leading dot:
  #
  #    git show 6644e6cb2ade90b8aff2ebb44728958fbc939ebf:zero.rb
  #    fatal: Path 'etc/zero.rb' exists, but not 'zero.rb'.
  #    Did you mean '6644e6cb2ade90b8aff2ebb44728958fbc939ebf:etc/zero.rb' aka '6644e6cb2ade90b8aff2ebb44728958fbc939ebf:./zero.rb'?
  #    git show 6644e6cb2ade90b8aff2ebb44728958fbc939ebf:./zero.rb
  #    (works)
  "git show #{ref}:./#{policyfile_lock_relpath}"
end

#lockObject



63
64
65
66
67
68
69
70
71
# File 'lib/chef-dk/policyfile/comparison_base.rb', line 63

def lock
  git_cmd.run_command
  git_cmd.error!
  FFI_Yajl::Parser.parse(git_cmd.stdout)
rescue Mixlib::ShellOut::ShellCommandFailed
  raise GitError, "Git command `#{git_cmd_string}` failed with message: #{git_cmd.stderr.chomp}"
rescue FFI_Yajl::ParseError => e
  raise MalformedLockfile, "Invalid JSON in lockfile at git ref '#{ref}' at path '#{policyfile_lock_relpath}':\n  #{e.message}"
end

#nameObject



59
60
61
# File 'lib/chef-dk/policyfile/comparison_base.rb', line 59

def name
  "git:#{ref}"
end