Class: Berkshelf::GitLocation
- Inherits:
-
BaseLocation
- Object
- BaseLocation
- Berkshelf::GitLocation
- Includes:
- Mixin::Git
- Defined in:
- lib/berkshelf/locations/git.rb
Direct Known Subclasses
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 included from Mixin::Git
Methods included from ShellOut
Methods inherited from BaseLocation
Constructor Details
#initialize(dependency, options = {}) ⇒ GitLocation
Returns a new instance of GitLocation.
12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/berkshelf/locations/git.rb', line 12 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.
6 7 8 |
# File 'lib/berkshelf/locations/git.rb', line 6 def branch @branch end |
#ref ⇒ Object (readonly)
Returns the value of attribute ref.
8 9 10 |
# File 'lib/berkshelf/locations/git.rb', line 8 def ref @ref end |
#rel ⇒ Object (readonly)
Returns the value of attribute rel.
10 11 12 |
# File 'lib/berkshelf/locations/git.rb', line 10 def rel @rel end |
#revision ⇒ Object (readonly)
Returns the value of attribute revision.
9 10 11 |
# File 'lib/berkshelf/locations/git.rb', line 9 def revision @revision end |
#tag ⇒ Object (readonly)
Returns the value of attribute tag.
7 8 9 |
# File 'lib/berkshelf/locations/git.rb', line 7 def tag @tag end |
#uri ⇒ Object (readonly)
Returns the value of attribute uri.
5 6 7 |
# File 'lib/berkshelf/locations/git.rb', line 5 def uri @uri end |
Instance Method Details
#==(other) ⇒ Object
89 90 91 92 93 94 95 96 |
# File 'lib/berkshelf/locations/git.rb', line 89 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
81 82 83 84 85 86 87 |
# File 'lib/berkshelf/locations/git.rb', line 81 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.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/berkshelf/locations/git.rb', line 36 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 atomically move FileUtils.rm_rf(install_path) if install_path.exist? FileUtils.mv(scratch_path, install_path) # Remove the git history FileUtils.rm_rf(File.join(install_path, ".git")) install_path.chmod(0777 & ~File.umask) ensure # Ensure the scratch directory is cleaned up FileUtils.rm_rf(scratch_path) end |
#installed? ⇒ Boolean
27 28 29 |
# File 'lib/berkshelf/locations/git.rb', line 27 def installed? !!(revision && install_path.exist?) end |
#to_lock ⇒ Object
108 109 110 111 112 113 114 115 116 |
# File 'lib/berkshelf/locations/git.rb', line 108 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
98 99 100 101 102 103 104 105 106 |
# File 'lib/berkshelf/locations/git.rb', line 98 def to_s info = tag || branch || shortref || @rev_parse if rel "#{uri} (at #{info}/#{rel})" else "#{uri} (at #{info})" end end |