Class: Berkshelf::GitLocation
- Inherits:
-
BaseLocation
- Object
- BaseLocation
- Berkshelf::GitLocation
- Defined in:
- lib/berkshelf/locations/git.rb
Direct Known Subclasses
Defined Under Namespace
Classes: GitCommandError, GitError, GitNotInstalled
Instance Attribute Summary collapse
-
#branch ⇒ Object
readonly
Returns the value of attribute branch.
-
#ref ⇒ Object
readonly
Returns the value of attribute ref.
-
#rel ⇒ Object
readonly
Returns the value of attribute rel.
-
#revision ⇒ Object
readonly
Returns the value of attribute revision.
-
#tag ⇒ Object
readonly
Returns the value of attribute tag.
-
#uri ⇒ Object
readonly
Returns the value of attribute uri.
Attributes inherited from BaseLocation
Instance Method Summary collapse
- #==(other) ⇒ Object
- #cached_cookbook ⇒ Object
-
#initialize(dependency, options = {}) ⇒ GitLocation
constructor
A new instance of GitLocation.
-
#install ⇒ Object
Install this git cookbook into the cookbook store.
- #installed? ⇒ Boolean
- #to_lock ⇒ Object
- #to_s ⇒ Object
Methods inherited from BaseLocation
Constructor Details
#initialize(dependency, options = {}) ⇒ GitLocation
Returns a new instance of GitLocation.
36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/berkshelf/locations/git.rb', line 36 def initialize(dependency, = {}) super @uri = [:git] @branch = [:branch] @tag = [:tag] @ref = [:ref] @revision = [:revision] @rel = [:rel] # The revision to parse @rev_parse = [:ref] || [:branch] || [:tag] || 'master' end |
Instance Attribute Details
#branch ⇒ Object (readonly)
Returns the value of attribute branch.
30 31 32 |
# File 'lib/berkshelf/locations/git.rb', line 30 def branch @branch end |
#ref ⇒ Object (readonly)
Returns the value of attribute ref.
32 33 34 |
# File 'lib/berkshelf/locations/git.rb', line 32 def ref @ref end |
#rel ⇒ Object (readonly)
Returns the value of attribute rel.
34 35 36 |
# File 'lib/berkshelf/locations/git.rb', line 34 def rel @rel end |
#revision ⇒ Object (readonly)
Returns the value of attribute revision.
33 34 35 |
# File 'lib/berkshelf/locations/git.rb', line 33 def revision @revision end |
#tag ⇒ Object (readonly)
Returns the value of attribute tag.
31 32 33 |
# File 'lib/berkshelf/locations/git.rb', line 31 def tag @tag end |
#uri ⇒ Object (readonly)
Returns the value of attribute uri.
29 30 31 |
# File 'lib/berkshelf/locations/git.rb', line 29 def uri @uri end |
Instance Method Details
#==(other) ⇒ Object
109 110 111 112 113 114 115 116 |
# File 'lib/berkshelf/locations/git.rb', line 109 def ==(other) other.is_a?(GitLocation) && other.uri == uri && other.branch == branch && other.tag == tag && other.shortref == shortref && other.rel == rel end |
#cached_cookbook ⇒ Object
101 102 103 104 105 106 107 |
# File 'lib/berkshelf/locations/git.rb', line 101 def cached_cookbook if installed? @cached_cookbook ||= CachedCookbook.from_path(install_path) else nil end end |
#install ⇒ Object
Install this git cookbook into the cookbook store. This method leverages a cached git copy and a scratch directory to prevent bad cookbooks from making their way into the cookbook store.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/berkshelf/locations/git.rb', line 60 def install scratch_path = Pathname.new(Dir.mktmpdir) if cached? Dir.chdir(cache_path) do git %|fetch --force --tags #{uri} "refs/heads/*:refs/heads/*"| end else git %|clone #{uri} "#{cache_path}" --bare --no-hardlinks| end Dir.chdir(cache_path) do @revision ||= git %|rev-parse #{@rev_parse}| end # Clone into a scratch directory for validations git %|clone --no-checkout "#{cache_path}" "#{scratch_path}"| # Make sure the scratch directory is up-to-date and account for rel paths Dir.chdir(scratch_path) do git %|fetch --force --tags "#{cache_path}"| git %|reset --hard #{@revision}| if rel git %|filter-branch --subdirectory-filter "#{rel}" --force| end end # Validate the scratched path is a valid cookbook validate_cached!(scratch_path) # If we got this far, we should copy FileUtils.rm_rf(install_path) if install_path.exist? FileUtils.cp_r(scratch_path, install_path) install_path.chmod(0777 & ~File.umask) ensure # Ensure the scratch directory is cleaned up FileUtils.rm_rf(scratch_path) end |
#installed? ⇒ Boolean
51 52 53 |
# File 'lib/berkshelf/locations/git.rb', line 51 def installed? revision && install_path.exist? end |
#to_lock ⇒ Object
128 129 130 131 132 133 134 135 136 |
# File 'lib/berkshelf/locations/git.rb', line 128 def to_lock out = " git: #{uri}\n" out << " revision: #{revision}\n" out << " ref: #{shortref}\n" if shortref out << " branch: #{branch}\n" if branch out << " tag: #{tag}\n" if tag out << " rel: #{rel}\n" if rel out end |
#to_s ⇒ Object
118 119 120 121 122 123 124 125 126 |
# File 'lib/berkshelf/locations/git.rb', line 118 def to_s info = tag || branch || shortref || @rev_parse if rel "#{uri} (at #{info}/#{rel})" else "#{uri} (at #{info})" end end |