autobuild 1.9.0 → 1.9.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d3bb942267370ce2e0ae0788d95dbae126bb822
4
- data.tar.gz: 1b4d9cd82f441501de25ca9c257bf87e2a2b1a93
3
+ metadata.gz: 5d07251a9467505108e7d4ffa2a83480e77b4051
4
+ data.tar.gz: f9d440c442f763d121bb589810fb2e97210911c7
5
5
  SHA512:
6
- metadata.gz: b4c2c503656df061fd82e4defddac037294bff228c62b2d7dba636cea89e22dbfc5e0da42fe497971205a2f20b8184a9b8198da80fc64ef54667b0fb046ac449
7
- data.tar.gz: 7fe3027e64442123763bef17d20d433889dd2886c4896914ae3f67b2a11c6ac703d310ed8ff9eacf6bd68e8aa2021995ca924e4feed594bf3e40ac6fef760ee2
6
+ metadata.gz: 11958c9d1bfa46c8d3abfe37dfe4e414f316b7e0162cafdcf0abda4228e27ed902b02bc2ff942ef42ba41996878a6c18eb38d82d2708b7ee2c808d073fd85a5b
7
+ data.tar.gz: 78b12476fd6c0a16573db0a46f6e4e500dd42da24fd8471440b5487ca00236f51e003afa5c56b8fd1a6d5b449ae4a04420e5e5f95b3c0ffeb816d654fa37423b
data/Manifest.txt CHANGED
@@ -42,9 +42,6 @@ samples/openrobots.autobuild
42
42
  test/data/cvsroot.tar
43
43
  test/data/gitrepo-with-extra-commit-and-tag.tar
44
44
  test/data/gitrepo.tar
45
- test/data/gitrepo/test
46
- test/data/gitrepo/test2
47
- test/data/gitrepo/test3
48
45
  test/data/svnroot.tar
49
46
  test/data/tarimport.tar.gz
50
47
  test/import/test_cvs.rb
@@ -623,22 +623,36 @@ module Autobuild
623
623
  end
624
624
  end
625
625
 
626
- def commit_pinning(package, target_commit, fetch_commit)
627
- current_head = rev_parse(package, 'HEAD')
628
-
629
- # Check whether the current HEAD is present on the remote
630
- # repository. We'll refuse resetting if there are uncommitted
631
- # changes
632
- head_to_remote = merge_status(package, fetch_commit, current_head)
633
- status_to_remote = head_to_remote.status
634
- if status_to_remote == Status::ADVANCED || status_to_remote == Status::NEEDS_MERGE
635
- raise ImporterCannotReset.new(package, 'import'), "branch #{local_branch} of #{package.name} contains commits that do not seem to be present on the branch #{remote_branch} of the remote repository. I can't go on as it could make you loose some stuff. Update the remote branch in your overrides, push your changes or reset to the remote commit manually before trying again"
636
- end
637
-
638
- head_to_target = merge_status(package, target_commit, current_head)
626
+ # Safely resets the current branch to a given commit
627
+ #
628
+ # This method safely resets the current branch to a given commit,
629
+ # not requiring a clean working copy (i.e. it can handle local changes).
630
+ #
631
+ # It verifies that the current HEAD will not be lost by the operation,
632
+ # either because it is included in the target commit or because it is
633
+ # present remotely
634
+ #
635
+ # @param [Package] package the package we handle
636
+ # @param [String] target_commit the commit we want to reset HEAD to
637
+ # @param [String] fetch_commit the state of the remote branch. This is
638
+ # used to avoid losing commits if HEAD is not included in
639
+ # target_commit
640
+ def reset_head_to_commit(package, target_commit, fetch_commit)
641
+ current_head = rev_parse(package, 'HEAD')
642
+ head_to_target = merge_status(package, target_commit, current_head)
639
643
  status_to_target = head_to_target.status
644
+
640
645
  if status_to_target == Status::UP_TO_DATE
641
646
  return
647
+ elsif status_to_target == Status::SIMPLE_UPDATE
648
+ run_git(package, 'merge', target_commit)
649
+ else
650
+ # Check whether the current HEAD is present on the remote
651
+ # repository. We'll refuse resetting if there are uncommitted
652
+ # changes
653
+ if !commit_present_in?(package, current_head, fetch_commit)
654
+ raise ImporterCannotReset.new(package, 'import'), "branch #{local_branch} of #{package.name} contains commits that do not seem to be present on the branch #{remote_branch} of the remote repository. I can't go on as it could make you loose some stuff. Update the remote branch in your overrides, push your changes or reset to the remote commit manually before trying again"
655
+ end
642
656
  end
643
657
 
644
658
  package.message " %%s: resetting branch %s to %s" % [local_branch, target_commit.to_s]
@@ -706,8 +720,6 @@ module Autobuild
706
720
  if options[:reset]
707
721
  if current_head == pinned_state
708
722
  return
709
- elsif merge_if_simple(package, pinned_state)
710
- return
711
723
  end
712
724
  elsif commit_present_in?(package, pinned_state, current_head)
713
725
  return
@@ -718,7 +730,7 @@ module Autobuild
718
730
 
719
731
  fetch_commit ||= current_remote_commit(package, options[:only_local])
720
732
  if options[:reset]
721
- commit_pinning(package, target_commit, fetch_commit)
733
+ reset_head_to_commit(package, target_commit, fetch_commit)
722
734
  else
723
735
  merge_if_simple(package, target_commit)
724
736
  end
@@ -1,5 +1,5 @@
1
1
  module Autobuild
2
- VERSION = "1.9.0" unless defined? Autobuild::VERSION
2
+ VERSION = "1.9.1" unless defined? Autobuild::VERSION
3
3
  end
4
4
 
5
5
 
@@ -240,37 +240,37 @@ describe Autobuild::Git do
240
240
  # We relocate to a non-existing repository to ensure that it
241
241
  # does not try to access it
242
242
  importer.relocate('/does/not/exist')
243
- pin_importer(1)
243
+ pin_importer('tip~1')
244
244
  importer.import(pkg, reset: false)
245
- assert_on_commit 0
245
+ assert_on_commit "tip"
246
246
  end
247
247
  it "does not access the repository if the target is already HEAD and reset is true" do
248
248
  importer.import(pkg)
249
- pin_importer(0)
249
+ pin_importer('tip')
250
250
  importer.relocate('/does/not/exist')
251
251
  importer.import(pkg, reset: true)
252
- assert_on_commit 0
252
+ assert_on_commit "tip"
253
253
  end
254
254
  it "does not access the remote repository if the commit is present locally" do
255
- pin_importer(1)
255
+ pin_importer('tip~1')
256
256
  importer.import(pkg)
257
- pin_importer(0)
257
+ pin_importer('tip')
258
258
  importer.relocate('/does/not/exist')
259
259
  importer.import(pkg, reset: false)
260
- assert_on_commit 0
260
+ assert_on_commit "tip"
261
261
  end
262
262
  it "attempts to merge the target commit if it is not present in HEAD" do
263
- pin_importer(1)
263
+ pin_importer('tip~1')
264
264
  importer.import(pkg)
265
- pin_importer(0)
265
+ pin_importer('tip')
266
266
  importer.import(pkg, reset: false)
267
- assert_on_commit 0
267
+ assert_on_commit "tip"
268
268
  end
269
269
  it "resets if reset is true" do
270
270
  importer.import(pkg)
271
- pin_importer(1)
271
+ pin_importer('tip~1')
272
272
  importer.import(pkg, reset: true)
273
- assert_on_commit 1
273
+ assert_on_commit "tip~1"
274
274
  end
275
275
  it "refuses to reset if some commits are present locally but not in the remote branch" do
276
276
  importer.import(pkg)
@@ -280,7 +280,7 @@ describe Autobuild::Git do
280
280
  importer.run_git(pkg, 'add', 'test3')
281
281
  importer.run_git(pkg, 'commit', '-a', '-m', 'third commit')
282
282
  current_head = importer.rev_parse(pkg, 'HEAD')
283
- pin_importer(1)
283
+ pin_importer('tip~1')
284
284
  assert_raises(Autobuild::ImporterCannotReset) do
285
285
  importer.import(pkg, reset: true)
286
286
  end
@@ -317,6 +317,7 @@ describe Autobuild::Git do
317
317
  importer.import(pkg)
318
318
  end
319
319
  end
320
+
320
321
  it "switches to the local branch regardless of the presence of the tag or commit" do
321
322
  importer.import(pkg)
322
323
  head = importer.rev_parse(pkg, 'HEAD')
@@ -328,6 +329,44 @@ describe Autobuild::Git do
328
329
  assert_equal 'refs/heads/local', importer.current_branch(pkg)
329
330
  assert_equal head, importer.rev_parse(pkg, 'refs/remotes/autobuild/master')
330
331
  end
332
+
333
+ describe "the reset behaviour" do
334
+ it "checks out the local branch even if its original state was diverged from the current commit" do
335
+ pin_importer 'fork'
336
+ importer.import(pkg)
337
+ assert_on_commit 'fork'
338
+ end
339
+ it "resets the local branch even if it diverged from the current commit" do
340
+ importer.import(pkg)
341
+ pin_importer 'fork'
342
+ importer.import(pkg, reset: true)
343
+ assert_on_commit 'fork'
344
+ end
345
+ it "refuses to reset the local branch if HEAD is not present remotely" do
346
+ importer.import(pkg)
347
+ File.open(File.join(tempdir, 'git', 'test'), 'a') do |io|
348
+ io.puts "test"
349
+ end
350
+ importer.run_git(pkg, 'commit', '-a', '-m', 'a fork commit')
351
+ new_head = importer.rev_parse(pkg, 'HEAD')
352
+ pin_importer 'fork'
353
+ assert_raises(Autobuild::ImporterCannotReset) do
354
+ importer.import(pkg, reset: true)
355
+ end
356
+ assert_equal new_head, importer.rev_parse(pkg, 'HEAD')
357
+ end
358
+ it "cleanly resets to the start state if local changes make the checkout abort" do
359
+ importer.import(pkg)
360
+ File.open(File.join(tempdir, 'git', 'test'), 'a') do |io|
361
+ io.puts "test"
362
+ end
363
+ pin_importer 'fork'
364
+ assert_raises(Autobuild::SubcommandFailed) do
365
+ importer.import(pkg, reset: true)
366
+ end
367
+ assert_on_commit 'tip'
368
+ end
369
+ end
331
370
  end
332
371
  describe "with a specific commit given" do
333
372
  def assert_on_commit(id)
@@ -339,9 +378,11 @@ describe Autobuild::Git do
339
378
  pkg = Autobuild::Package.new 'commits'
340
379
  pkg.srcdir = gitrepo
341
380
  pkg.importer = importer
342
- @commits = [
343
- importer.rev_parse(pkg, 'HEAD'),
344
- importer.rev_parse(pkg, 'HEAD~1')]
381
+ @commits = Hash[
382
+ 'tip' => importer.rev_parse(pkg, 'master'),
383
+ 'tip~1' => importer.rev_parse(pkg, 'master~1'),
384
+ 'fork' => importer.rev_parse(pkg, 'fork'),
385
+ ]
345
386
  end
346
387
  @commits
347
388
  end
@@ -369,11 +410,15 @@ describe Autobuild::Git do
369
410
  pkg = Autobuild::Package.new 'commits'
370
411
  pkg.srcdir = gitrepo
371
412
  pkg.importer = importer
372
- importer.run_git_bare(pkg, 'tag', "tag0", "HEAD")
373
- importer.run_git_bare(pkg, 'tag', "tag1", "HEAD~1")
374
- @commits = [
375
- importer.rev_parse(pkg, 'HEAD'),
376
- importer.rev_parse(pkg, 'HEAD~1')]
413
+ importer.run_git_bare(pkg, 'tag', "tag0", "refs/heads/master")
414
+ importer.run_git_bare(pkg, 'tag', "tag1", "refs/heads/master~1")
415
+ importer.run_git_bare(pkg, 'tag', "forktag", "refs/heads/fork")
416
+ @pins = Hash['tip' => 'tag0', 'tip~1' => 'tag1', 'fork' => 'forktag']
417
+ @commits = Hash[
418
+ 'tip' => importer.rev_parse(pkg, 'refs/heads/master'),
419
+ 'tip~1' => importer.rev_parse(pkg, 'refs/heads/master~1'),
420
+ 'fork' => importer.rev_parse(pkg, 'refs/heads/fork'),
421
+ ]
377
422
  end
378
423
 
379
424
  def assert_on_commit(id)
@@ -381,7 +426,7 @@ describe Autobuild::Git do
381
426
  end
382
427
 
383
428
  def pin_importer(id, options = Hash.new)
384
- importer.relocate(importer.repository, options.merge(tag: "tag#{id}"))
429
+ importer.relocate(importer.repository, options.merge(tag: @pins[id]))
385
430
  end
386
431
 
387
432
  it "fetches from the remote repository if the commit is not present locally" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autobuild
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvain Joyeux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-26 00:00:00.000000000 Z
11
+ date: 2015-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -138,9 +138,6 @@ files:
138
138
  - test/data/cvsroot.tar
139
139
  - test/data/gitrepo-with-extra-commit-and-tag.tar
140
140
  - test/data/gitrepo.tar
141
- - test/data/gitrepo/test
142
- - test/data/gitrepo/test2
143
- - test/data/gitrepo/test3
144
141
  - test/data/svnroot.tar
145
142
  - test/data/tarimport.tar.gz
146
143
  - test/import/test_cvs.rb
File without changes
File without changes
File without changes