changeset 15361:c1930992e111 stable

graft: add a test
author Matt Mackall <mpm@selenic.com>
date Mon, 24 Oct 2011 17:01:49 -0500
parents 73628b32d0c0
children 60f93ddd61fd
files tests/test-graft.t
diffstat 1 files changed, 227 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-graft.t	Mon Oct 24 17:01:49 2011 -0500
@@ -0,0 +1,227 @@
+Create a repo with some stuff in it:
+
+  $ hg init a
+  $ cd a
+  $ echo a > a
+  $ echo a > d
+  $ echo a > e
+  $ hg ci -qAm0
+  $ echo b > a
+  $ hg ci -m1 -u bar
+  $ hg mv a b
+  $ hg ci -m2
+  $ hg cp b c
+  $ hg ci -m3 -u baz
+  $ echo b > d
+  $ echo f > e
+  $ hg ci -m4
+  $ hg up -q 3
+  $ echo b > e
+  $ hg branch -q stable
+  $ hg ci -m5
+  $ hg merge -q default --tool internal:local
+  $ hg branch -q default
+  $ hg ci -m6
+
+Need to specify a rev:
+
+  $ hg graft
+  abort: no revisions specified
+  [255]
+
+Can't graft ancestor:
+
+  $ hg graft 1 2
+  skipping ancestor revision 1
+  skipping ancestor revision 2
+  [255]
+
+Can't graft with dirty wd:
+
+  $ hg up -q 0
+  $ echo foo > a
+  $ hg graft 1
+  abort: outstanding uncommitted changes
+  [255]
+  $ hg revert a
+
+Graft a rename:
+
+  $ hg graft 2 -u foo
+  grafting revision 2
+  merging a and b to b
+  $ hg export tip --git
+  # HG changeset patch
+  # User foo
+  # Date 0 0
+  # Node ID d2e44c99fd3f31c176ea4efb9eca9f6306c81756
+  # Parent  68795b066622ca79a25816a662041d8f78f3cd9e
+  2
+  
+  diff --git a/a b/b
+  rename from a
+  rename to b
+  --- a/a
+  +++ b/b
+  @@ -1,1 +1,1 @@
+  -a
+  +b
+
+Look for extra:source
+
+  $ hg log --debug -r tip
+  changeset:   7:d2e44c99fd3f31c176ea4efb9eca9f6306c81756
+  tag:         tip
+  parent:      0:68795b066622ca79a25816a662041d8f78f3cd9e
+  parent:      -1:0000000000000000000000000000000000000000
+  manifest:    7:5d59766436fd8fbcd38e7bebef0f6eaf3eebe637
+  user:        foo
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  files+:      b
+  files-:      a
+  extra:       branch=default
+  extra:       source=5c095ad7e90f871700f02dd1fa5012cb4498a2d4
+  description:
+  2
+  
+  
+
+Graft out of order, skipping a merge and a duplicate
+
+  $ hg graft 1 5 4 3 'merge()' 2 --debug
+  skipping ungraftable merge revision 6
+  scanning for duplicate grafts
+  skipping already grafted revision 2
+  grafting revision 1
+    searching for copies back to rev 1
+    unmatched files in local:
+     a.orig
+     b
+    all copies found (* = to merge, ! = divergent):
+     b -> a *
+    checking for directory renames
+  resolving manifests
+   overwrite False partial False
+   ancestor 68795b066622 local d2e44c99fd3f+ remote 5d205f8b35b6
+   b: local copied/moved to a -> m
+  preserving b for resolve of b
+  updating: b 1/1 files (100.00%)
+    searching for copies back to rev 1
+    unmatched files in local:
+     a
+    unmatched files in other:
+     b
+    all copies found (* = to merge, ! = divergent):
+     b -> a *
+    checking for directory renames
+  b
+   b: searching for copy revision for a
+   b: copy a:b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
+  grafting revision 5
+    searching for copies back to rev 1
+    unmatched files in local:
+     a.orig
+  resolving manifests
+   overwrite False partial False
+   ancestor 4c60f11aa304 local 6f5ea6ac8b70+ remote 97f8bfe72746
+   e: remote is newer -> g
+  updating: e 1/1 files (100.00%)
+  getting e
+    searching for copies back to rev 1
+    unmatched files in local:
+     c
+    all copies found (* = to merge, ! = divergent):
+     c -> b *
+    checking for directory renames
+  e
+  grafting revision 4
+    searching for copies back to rev 1
+    unmatched files in local:
+     a.orig
+  resolving manifests
+   overwrite False partial False
+   ancestor 4c60f11aa304 local 77eb504366ab+ remote 9c233e8e184d
+   e: versions differ -> m
+   d: remote is newer -> g
+  preserving e for resolve of e
+  updating: d 1/2 files (50.00%)
+  getting d
+  updating: e 2/2 files (100.00%)
+  picked tool 'internal:merge' for e (binary False symlink False)
+  merging e
+  my e@77eb504366ab+ other e@9c233e8e184d ancestor e@68795b066622
+  warning: conflicts during merge.
+  merging e failed!
+    searching for copies back to rev 1
+    unmatched files in local:
+     c
+    all copies found (* = to merge, ! = divergent):
+     c -> b *
+    checking for directory renames
+  abort: unresolved conflicts, can't continue
+  (use hg resolve and hg graft --continue)
+  [255]
+
+Continue without resolve should fail:
+
+  $ hg graft -c
+  grafting revision 4
+  abort: unresolved merge conflicts (see hg help resolve)
+  [255]
+
+Fix up:
+
+  $ echo b > e
+  $ hg resolve -m e
+
+Continue with a revision should fail:
+
+  $ hg graft -c 6
+  abort: can't specify --continue and revisions
+  [255]
+
+Continue for real, clobber usernames
+
+  $ hg graft -c -U
+  grafting revision 4
+  grafting revision 3
+
+Compare with original:
+
+  $ hg diff -r 6
+  $ hg status --rev 0:. -C
+  M d
+  M e
+  A b
+    a
+  A c
+    a
+  R a
+
+View graph:
+
+  $ hg --config extensions.graphlog= log -G --template '{author}@rev: {desc}\n'
+  @  test@rev: 3
+  |
+  o  test@rev: 4
+  |
+  o  test@rev: 5
+  |
+  o  bar@rev: 1
+  |
+  o  foo@rev: 2
+  |
+  | o    test@rev: 6
+  | |\
+  | | o  test@rev: 5
+  | | |
+  | o |  test@rev: 4
+  | |/
+  | o  baz@rev: 3
+  | |
+  | o  test@rev: 2
+  | |
+  | o  bar@rev: 1
+  |/
+  o  test@rev: 0
+