vagrant-cookbook-fetcher 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/vagrant_cookbook_fetcher.rb +64 -10
  2. metadata +40 -21
@@ -92,15 +92,46 @@ class CookbookFetcher
92
92
  # pull
93
93
  Dir.chdir(info[:dir]) do
94
94
  # TODO ignores git creds
95
- cmd = "git checkout #{info[:branch]}"
95
+ cmd = "git remote set-url origin #{info[:repo]}"
96
96
  unless system cmd then raise "Could not '#{cmd}'" end
97
- cmd = "git pull"
97
+ cmd = "git fetch origin"
98
98
  unless system cmd then raise "Could not '#{cmd}'" end
99
+ local_branch = `git rev-parse --verify --symbolic-full-name #{info[:branch]} 2> /dev/null`
100
+ # no local branch
101
+ if ! $?.success? then
102
+ remote_branch = `git rev-parse --verify --symbolic-full-name origin/#{info[:branch]} 2> /dev/null`
103
+ unless $?.success? then raise "Unable to find branch or commit #{info[:branch]}" end
104
+ cmd = "git checkout -b #{info[:branch]} origin/#{info[:branch]}"
105
+ unless system cmd then raise "Could not '#{cmd}'" end
106
+ # no branch
107
+ elsif local_branch.empty? then
108
+ cmd = "git checkout #{info[:branch]}"
109
+ unless system cmd then raise "Could not '#{cmd}'" end
110
+ # local branch already exists
111
+ else
112
+ cmd = "git checkout #{info[:branch]}"
113
+ unless system cmd then raise "Could not '#{cmd}'" end
114
+ cmd = "git merge origin/#{info[:branch]}"
115
+ unless system cmd then raise "Could not '#{cmd}'" end
116
+ end
99
117
  end
100
118
  else
101
119
  # clone
102
- cmd = "git clone -b #{info[:branch]} #{info[:repo]} #{info[:dir]}"
120
+ # can't use --branch because it won't work with commit ids
121
+ cmd = "git clone --no-checkout #{info[:repo]} #{info[:dir]}"
103
122
  unless system cmd then raise "Could not '#{cmd}'" end
123
+ Dir.chdir(info[:dir]) do
124
+ remote_branch=`git rev-parse --verify -q origin/#{info[:branch]} 2> /dev/null`
125
+ # branch
126
+ if $?.success? then
127
+ cmd = "git checkout -B #{info[:branch]} origin/#{info[:branch]}"
128
+ unless system cmd then raise "Could not '#{cmd}'" end
129
+ #commit
130
+ else
131
+ cmd = "git checkout #{info[:branch]}"
132
+ unless system cmd then raise "Could not '#{cmd}'" end
133
+ end
134
+ end
104
135
  end
105
136
  else
106
137
  raise "Unsupported VCS '#{info[:vcs]}' in checkout list for entry '#{dir}'"
@@ -119,8 +150,16 @@ class CookbookFetcher
119
150
  # Create/clear the subdirs
120
151
  things_to_link.each do |thing|
121
152
  if !Dir.exists?(thing) then Dir.mkdir(thing) end
122
- Dir.foreach(thing) do |file|
123
- if FileTest.symlink?(file) then File.delete(file) end
153
+ if (thing == "data_bags") then
154
+ Dir.foreach(thing) do |dbag_dir|
155
+ Dir.foreach(thing + '/' + dbag_dir) do |file|
156
+ if FileTest.symlink?(file) then File.delete(file) end
157
+ end
158
+ end
159
+ else
160
+ Dir.foreach(thing) do |file|
161
+ if FileTest.symlink?(file) then File.delete(file) end
162
+ end
124
163
  end
125
164
  end
126
165
  end
@@ -132,11 +171,26 @@ class CookbookFetcher
132
171
  co_thing_dir = "checkouts/#{checkout_dir}/#{thing}"
133
172
  combined_dir = "combined/#{thing}"
134
173
  if Dir.exists?(co_thing_dir) then
135
- Dir.entries(co_thing_dir).grep(/\.(rb|json)$/).each do |file|
136
- # Under vagrant, we see this directory as /vagrant/checkouts/foo/role/bar.rb
137
- # Use -f so later checkouts can override earlier ones
138
- cmd = "ln -sf /vagrant/#{co_thing_dir}/#{file} combined/#{thing}/#{file}"
139
- unless system cmd then raise "Could not '#{cmd}'" end
174
+ if (thing == "data_bags") then
175
+ Dir.foreach(co_thing_dir) do |co_dbag_dir|
176
+ next unless File.directory?(co_thing_dir + '/' + co_dbag_dir)
177
+ next if co_dbag_dir.start_with?('.')
178
+ combined_dbag_dir = combined_dir + '/' + co_dbag_dir
179
+ if !Dir.exists?(combined_dbag_dir) then Dir.mkdir(combined_dbag_dir) end
180
+ Dir.entries(co_thing_dir + '/' + co_dbag_dir).grep(/\.(rb|json)$/).each do |file|
181
+ # Under vagrant, we see this directory as /vagrant/checkouts/<checkout>/data_bags/<dbag>/<dbag_entry.json>
182
+ # Use -f so later checkouts can override earlier ones
183
+ cmd = "ln -sf /vagrant/#{co_thing_dir + '/' + co_dbag_dir}/#{file} combined/#{thing}/#{co_dbag_dir}/#{file}"
184
+ unless system cmd then raise "Could not '#{cmd}'" end
185
+ end
186
+ end
187
+ else
188
+ Dir.entries(co_thing_dir).grep(/\.(rb|json)$/).each do |file|
189
+ # Under vagrant, we see this directory as /vagrant/checkouts/foo/role/bar.rb
190
+ # Use -f so later checkouts can override earlier ones
191
+ cmd = "ln -sf /vagrant/#{co_thing_dir}/#{file} combined/#{thing}/#{file}"
192
+ unless system cmd then raise "Could not '#{cmd}'" end
193
+ end
140
194
  end
141
195
  end
142
196
  end
metadata CHANGED
@@ -1,50 +1,69 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: vagrant-cookbook-fetcher
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.4
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 5
10
+ version: 0.0.5
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Clinton Wolfe
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-08-09 00:00:00.000000000 Z
17
+
18
+ date: 2012-09-21 00:00:00 Z
13
19
  dependencies: []
14
- description: Whenever you run start, up, or provision, this plugin will dynamically
15
- fetch a list of checkouts from a URL; checkout each one; then create a combined
16
- roles directory, with symlinks.
20
+
21
+ description: Whenever you run start, up, or provision, this plugin will dynamically fetch a list of checkouts from a URL; checkout each one; then create a combined roles directory, with symlinks.
17
22
  email: clinton@NOSPAM.omniti.com
18
23
  executables: []
24
+
19
25
  extensions: []
26
+
20
27
  extra_rdoc_files: []
21
- files:
28
+
29
+ files:
22
30
  - LICENSE
23
31
  - README.md
24
32
  - lib/vagrant_init.rb
25
33
  - lib/vagrant_cookbook_fetcher.rb
26
34
  homepage: https://github.com/clintoncwolfe/vagrant-cookbook-fetcher
27
35
  licenses: []
36
+
28
37
  post_install_message:
29
38
  rdoc_options: []
30
- require_paths:
39
+
40
+ require_paths:
31
41
  - lib
32
- required_ruby_version: !ruby/object:Gem::Requirement
42
+ required_ruby_version: !ruby/object:Gem::Requirement
33
43
  none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- required_rubygems_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ hash: 3
48
+ segments:
49
+ - 0
50
+ version: "0"
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
52
  none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
44
60
  requirements: []
61
+
45
62
  rubyforge_project:
46
- rubygems_version: 1.8.11
63
+ rubygems_version: 1.7.2
47
64
  signing_key:
48
65
  specification_version: 3
49
66
  summary: Fetch your Chef cookbooks whenever you provision
50
67
  test_files: []
68
+
69
+ has_rdoc: