autobuild 1.7.9 → 1.7.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -206,12 +206,21 @@ module Autobuild
206
206
  env_update_var(name)
207
207
  end
208
208
 
209
- def self.env_value(name)
209
+ def self.env_value(name, expand_inherited = true)
210
210
  if !environment[name] && !inherited_environment[name] && !SYSTEM_ENV[name]
211
211
  nil
212
212
  else
213
+ inherited =
214
+ if expand_inherited
215
+ inherited_environment[name] || []
216
+ elsif env_inherit?(name)
217
+ ["$#{name}"]
218
+ else []
219
+ end
220
+
221
+
213
222
  value = []
214
- [environment[name], inherited_environment[name], SYSTEM_ENV[name]].each do |paths|
223
+ [environment[name], inherited, SYSTEM_ENV[name]].each do |paths|
215
224
  (paths || []).each do |p|
216
225
  if !value.include?(p)
217
226
  value << p
@@ -292,20 +301,13 @@ module Autobuild
292
301
  variables = []
293
302
  Autobuild.environment.each do |name, _|
294
303
  variables << name
295
- value = env_value(name)
304
+ value = env_value(name, false)
296
305
 
297
306
  if value
298
307
  shell_line = SHELL_SET_COMMAND % [name, value.join(ENV_LIST_SEPARATOR)]
299
308
  else
300
309
  shell_line = SHELL_UNSET_COMMAND % [name]
301
310
  end
302
- if env_inherit?(name)
303
- if value.empty?
304
- next
305
- else
306
- shell_line << "#{ENV_LIST_SEPARATOR}$#{name}"
307
- end
308
- end
309
311
  io.puts shell_line
310
312
  end
311
313
  variables.each do |var|
@@ -287,6 +287,7 @@ module Autobuild
287
287
  else base_dir
288
288
  end
289
289
 
290
+ FileUtils.mkdir_p base_dir
290
291
  cmd = [ '-o', cachefile, '-d', main_dir ]
291
292
  Subprocess.run(package, :import, Autobuild.tool('unzip'), *cmd)
292
293
 
@@ -103,7 +103,7 @@ class Importer
103
103
  if patches.size == 2 && patches[0].respond_to?(:to_str) && patches[1].respond_to?(:to_int)
104
104
  patches = [patches]
105
105
  else
106
- patches.map do |obj|
106
+ patches = patches.map do |obj|
107
107
  if obj.respond_to?(:to_str)
108
108
  [obj, 0]
109
109
  elsif obj.respond_to?(:to_ary)
@@ -114,14 +114,16 @@ class Importer
114
114
  end
115
115
  end
116
116
  end
117
+ patches.map do |path, level|
118
+ [path, level, File.read(path)]
119
+ end
117
120
  end
118
121
 
119
122
  def perform_update(package)
120
- cur_patches = currently_applied_patches(package)
123
+ cur_patches = currently_applied_patches(package)
121
124
  needed_patches = self.patches
122
- kept_patches = (cur_patches & needed_patches)
123
- if kept_patches != cur_patches
124
- patch(package, kept_patches)
125
+ if cur_patches.map(&:last) != needed_patches.map(&:last)
126
+ patch(package, [])
125
127
  end
126
128
 
127
129
  retry_count = 0
@@ -239,11 +241,15 @@ class Importer
239
241
  end
240
242
 
241
243
  private
244
+
245
+ def patchdir(package)
246
+ File.join(package.importdir, ".autobuild-patches")
247
+ end
242
248
 
243
249
  # We assume that package.importdir already exists (checkout is supposed to
244
250
  # have been called)
245
251
  def patchlist(package)
246
- File.join(package.importdir, "patches-autobuild-stamp")
252
+ File.join(patchdir(package), "list")
247
253
  end
248
254
 
249
255
  def call_patch(package, reverse, file, patch_level)
@@ -256,33 +262,42 @@ class Importer
256
262
  def apply(package, path, patch_level = 0); call_patch(package, false, path, patch_level) end
257
263
  def unapply(package, path, patch_level = 0); call_patch(package, true, path, patch_level) end
258
264
 
265
+ def parse_patch_list(patches_file)
266
+ File.readlines(patches_file).map do |line|
267
+ line = line.rstrip
268
+ if line =~ /^(.*)\s+(\d+)$/
269
+ path = $1
270
+ level = Integer($2)
271
+ else
272
+ path = line
273
+ level = 0
274
+ end
275
+ [path, level, File.read(path)]
276
+ end
277
+ end
278
+
259
279
  def currently_applied_patches(package)
260
280
  patches_file = patchlist(package)
261
- if !File.exists?(patches_file) then []
262
- else
263
- current_patches = []
264
- File.open(patches_file) do |f|
265
- f.readlines.each do |line|
266
- line = line.rstrip
267
- if line =~ /^(.*)\s+(\d+)$/
268
- path = $1
269
- level = Integer($2)
270
- else
271
- path = line
272
- level = 0
273
- end
274
- current_patches << [path, level]
275
- end
276
- end
277
- current_patches
281
+ if File.exists?(patches_file)
282
+ return parse_patch_list(patches_file)
283
+ end
284
+
285
+ patches_file = File.join(package.importdir, "patches-autobuild-stamp")
286
+ if File.exists?(patches_file)
287
+ cur_patches = parse_patch_list(patches_file)
288
+ save_patch_state(package, cur_patches)
289
+ FileUtils.rm_f patches_file
290
+ return currently_applied_patches(package)
278
291
  end
292
+
293
+ return Array.new
279
294
  end
280
295
 
281
296
  def patch(package, patches = self.patches)
282
297
  # Get the list of already applied patches
283
298
  cur_patches = currently_applied_patches(package)
284
299
 
285
- if cur_patches == patches
300
+ if cur_patches.map(&:last) == patches.map(&:last)
286
301
  return false
287
302
  end
288
303
 
@@ -300,23 +315,36 @@ class Importer
300
315
  end
301
316
 
302
317
  while p = cur_patches.last
303
- p, level = *p
318
+ p, level, _ = *p
304
319
  unapply(package, p, level)
305
320
  cur_patches.pop
306
321
  end
307
322
 
308
- patches.to_a.each do |p, level|
323
+ patches.to_a.each do |p, level, content|
309
324
  apply(package, p, level)
310
- cur_patches << [p, level]
325
+ cur_patches << [p, level, content]
311
326
  end
312
327
  ensure
313
- File.open(patchlist(package), 'w+') do |f|
314
- f.write(cur_patches.map { |p, l| "#{p} #{l}" }.join("\n"))
315
- end
328
+ save_patch_state(package, cur_patches)
316
329
  end
317
330
 
318
331
  return true
319
332
  end
333
+
334
+ def save_patch_state(package, cur_patches)
335
+ patch_dir = patchdir(package)
336
+ FileUtils.mkdir_p patch_dir
337
+ cur_patches = cur_patches.each_with_index.map do |(path, level, content), idx|
338
+ path = File.join(patch_dir, idx.to_s)
339
+ File.open(path, 'w') do |patch_io|
340
+ patch_io.write content
341
+ end
342
+ [path, level]
343
+ end
344
+ File.open(patchlist(package), 'w') do |f|
345
+ f.write(cur_patches.map { |p, l| "#{p} #{l}" }.join("\n"))
346
+ end
347
+ end
320
348
 
321
349
  def supports_relocation?; false end
322
350
  end
@@ -31,6 +31,7 @@ module Autobuild
31
31
  # Exclude autobuild timestamps
32
32
  exclude.each { |rx| raise unless Regexp === rx }
33
33
  exclude << (/#{Regexp.quote(STAMPFILE)}$/)
34
+ exclude << (/\.autobuild-patches$/)
34
35
 
35
36
  Autobuild.message "getting tree timestamp for #{path}" if Autobuild.debug
36
37
  latest = Time.at(0)
@@ -1,5 +1,5 @@
1
1
  module Autobuild
2
- VERSION = "1.7.9" unless defined? Autobuild::VERSION
2
+ VERSION = "1.7.10" unless defined? Autobuild::VERSION
3
3
  end
4
4
 
5
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autobuild
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.9
4
+ version: 1.7.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-14 00:00:00.000000000 Z
12
+ date: 2013-12-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -178,8 +178,8 @@ signing_key:
178
178
  specification_version: 3
179
179
  summary: Library to handle build systems and import mechanisms
180
180
  test_files:
181
- - test/test_import_tar.rb
182
- - test/test_subcommand.rb
181
+ - test/test_import_cvs.rb
183
182
  - test/test_reporting.rb
183
+ - test/test_subcommand.rb
184
184
  - test/test_import_svn.rb
185
- - test/test_import_cvs.rb
185
+ - test/test_import_tar.rb