largefiles: systematic testing of merges to/from largefiles stable
authorMads Kiilerich <madski@unity3d.com>
Mon, 28 Oct 2013 22:34:05 +0100
branchstable
changeset 19966 7985e3469f58
parent 19965 f1dd988a8bcc
child 19967 e92c6524a76d
largefiles: systematic testing of merges to/from largefiles 427ce5633c1c fixed one problem with update and added a test case for it. The test coverage was thus insufficient before that. To make sure we have good test coverage in this area we add systematic testing of all cases of merges that may or may not change normal files to largefiles or vice versa. The tests shows some annoying extra merge prompts in some cases, but these prompts are hard to avoid and they are now "safe" - they do not leave the system in a confused inconsistent state.
tests/test-issue3084.t
--- a/tests/test-issue3084.t	Wed Oct 23 23:42:13 2013 +0800
+++ b/tests/test-issue3084.t	Mon Oct 28 22:34:05 2013 +0100
@@ -137,3 +137,221 @@
   large
 
   $ cd ..
+
+
+Systematic testing of merges involving largefiles:
+
+Ancestor: normal  Parent: normal=  Parent: large   result: large
+Ancestor: normal  Parent: normal2  Parent: large   result: ?
+Ancestor: large   Parent: large=   Parent: normal  result: normal
+Ancestor: large   Parent: large2   Parent: normal  result: ?
+
+All cases should try merging both ways.
+"=" means same file content.
+
+Prepare test repo:
+
+  $ hg init merges
+  $ cd merges
+  $ touch f1
+  $ hg ci -Aqm "0-root"
+
+ancestor is "normal":
+  $ echo normal > f
+  $ hg ci -Aqm "1-normal-ancestor"
+  $ touch f2
+  $ hg ci -Aqm "2-normal-unchanged"
+  $ hg tag -l "normal="
+  $ echo normal2 > f
+  $ hg ci -m "3-normal2"
+  $ hg tag -l "normal2"
+  $ hg up -qr 1
+  $ hg rm f
+  $ echo large > f
+  $ hg add --large f
+  $ hg ci -qm "4-normal-to-large"
+  $ hg tag -l "large"
+
+  $ hg up -qr null
+
+ancestor is "large":
+  $ echo large > f
+  $ hg add --large f
+  $ hg ci -qm "5-large-ancestor"
+  $ touch f2
+  $ hg ci -Aqm "6-large-unchanged"
+  $ hg tag -l "large="
+  $ echo large2 > f
+  $ hg ci -m "7-large2"
+  $ hg tag -l "large2"
+  $ hg up -qr 5
+  $ hg rm f
+  $ echo normal > f
+  $ hg ci -qAm "8-large-to-normal"
+  $ hg tag -l "normal"
+
+Ancestor: normal  Parent: normal=  Parent: large   result: large
+
+  $ hg up -Cqr normal=
+  $ hg merge -r large
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large
+
+swap
+
+  $ hg up -Cqr large
+  $ hg merge -r normal=
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  large
+
+Ancestor: normal  Parent: normal2  Parent: large   result: ?
+(annoying extra prompt ... but it do not do any serious harm)
+
+  $ hg up -Cqr normal2
+  $ hg merge -r large
+  local changed f which remote deleted
+  use (c)hanged version or (d)elete? c
+  f has been turned into a largefile
+  use (l)argefile or keep as (n)ormal file? l
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large
+
+  $ hg up -Cqr normal2
+  $ ( echo c; echo n ) | hg merge -r large --config ui.interactive=Yes
+  local changed f which remote deleted
+  use (c)hanged version or (d)elete? f has been turned into a largefile
+  use (l)argefile or keep as (n)ormal file? 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  normal2
+
+  $ hg up -Cqr normal2
+  $ echo d | hg merge -r large --config ui.interactive=Yes
+  local changed f which remote deleted
+  use (c)hanged version or (d)elete? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large
+
+swap
+
+  $ hg up -Cqr large
+  $ hg merge -r normal2
+  remote changed f which local deleted
+  use (c)hanged version or leave (d)eleted? c
+  f has been turned into a normal file
+  keep as (l)argefile or use (n)ormal file? l
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large
+
+  $ hg up -Cqr large
+  $ ( echo c; echo n ) | hg merge -r normal2 --config ui.interactive=Yes
+  remote changed f which local deleted
+  use (c)hanged version or leave (d)eleted? f has been turned into a normal file
+  keep as (l)argefile or use (n)ormal file? 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  normal2
+
+  $ hg up -Cqr large
+  $ echo d | hg merge -r normal2 --config ui.interactive=Yes
+  remote changed f which local deleted
+  use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  large
+
+Ancestor: large   Parent: large=   Parent: normal  result: normal
+
+  $ hg up -Cqr large=
+  $ hg merge -r normal
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  normal
+
+swap
+
+  $ hg up -Cqr normal
+  $ hg merge -r large=
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat f
+  normal
+
+Ancestor: large   Parent: large2   Parent: normal  result: ?
+(annoying extra prompt ... but it do not do any serious harm)
+
+  $ hg up -Cqr large2
+  $ hg merge -r normal
+  local changed .hglf/f which remote deleted
+  use (c)hanged version or (d)elete? c
+  f has been turned into a normal file
+  keep as (l)argefile or use (n)ormal file? l
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large2
+
+  $ hg up -Cqr large2
+  $ echo d | hg merge -r normal --config ui.interactive=Yes
+  local changed .hglf/f which remote deleted
+  use (c)hanged version or (d)elete? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  normal
+
+swap
+
+  $ hg up -Cqr normal
+  $ hg merge -r large2
+  remote changed .hglf/f which local deleted
+  use (c)hanged version or leave (d)eleted? c
+  f has been turned into a largefile
+  use (l)argefile or keep as (n)ormal file? l
+  2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large2
+
+  $ hg up -Cqr normal
+  $ echo d | hg merge -r large2 --config ui.interactive=Yes
+  remote changed .hglf/f which local deleted
+  use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat f
+  normal
+
+  $ cd ..