[PATCH 3 of 4 stable] largefiles: systematic testing of merges to/from largefiles

Mads Kiilerich mads at kiilerich.com
Mon Oct 28 17:00:54 CDT 2013


# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1382996045 -3600
#      Mon Oct 28 22:34:05 2013 +0100
# Branch stable
# Node ID ba3857969dfc62a9b11777fd60f0137297fbbdb5
# Parent  9c6257e4e2027d5e6a13f4cbb5df567ffc2ca497
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.

diff --git a/tests/test-issue3084.t b/tests/test-issue3084.t
--- a/tests/test-issue3084.t
+++ b/tests/test-issue3084.t
@@ -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 ..


More information about the Mercurial-devel mailing list