[Request] [+-- ] D9767: test: extract the `genmerges` out of test-merge-combination.t
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Thu Jan 14 10:52:02 UTC 2021
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
This open the way to splitting this slow test in multiple ones.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D9767
AFFECTED FILES
tests/test-merge-combination.t
tests/testlib/merge-combination-util.sh
CHANGE DETAILS
diff --git a/tests/testlib/merge-combination-util.sh b/tests/testlib/merge-combination-util.sh
new file mode 100644
--- /dev/null
+++ b/tests/testlib/merge-combination-util.sh
@@ -0,0 +1,73 @@
+# genmerges is the workhorse of the test-merge-combination.t tests.
+
+# Given:
+# - a `range` function describing the possible values for file a
+# - a `isgood` function to filter out uninteresting combination
+# - a `createfile` function to actually write the values for file a on the
+# filesystem
+#
+# it print a series of lines that look like: abcd C: output of -T {files}
+# describing the file a at respectively the base, p2, p1, merge
+# revision. "C" indicates that hg merge had conflicts.
+
+genmerges () {
+
+ (LC_ALL=C type range | grep -q 'shell function') || (echo >&2 "missing function: range")
+ (LC_ALL=C type isgood | grep -q 'shell function') || (echo >&2 "missing function: range")
+ (LC_ALL=C type createfile | grep -q 'shell function') || (echo >&2 "missing function: range")
+
+ for base in `range` -; do
+ for r1 in `range $base` -; do
+ for r2 in `range $base $r1` -; do
+ for m in `range $base $r1 $r2` -; do
+ line="$base$r1$r2$m"
+ isgood $line || continue
+ hg init repo
+ cd repo
+ make_commit () {
+ v=$1; msg=$2; file=$3;
+ if [ $v != - ]; then
+ createfile $v
+ else
+ if [ -f a ]
+ then rm a
+ else touch $file
+ fi
+ fi
+ hg commit -q -Am $msg || exit 123
+ }
+ echo foo > foo
+ make_commit $base base b
+ make_commit $r1 r1 c
+ hg up -r 0 -q
+ make_commit $r2 r2 d
+ hg merge -q -r 1 > ../output 2>&1
+ if [ $? -ne 0 ]; then rm -f *.orig; hg resolve -m --all -q; fi
+ if [ -s ../output ]; then conflicts=" C"; else conflicts=" "; fi
+ make_commit $m m e
+ if [ $m = $r1 ] && [ $m = $r2 ]
+ then expected=
+ elif [ $m = $r1 ]
+ then if [ $base = $r2 ]
+ then expected=
+ else expected=a
+ fi
+ elif [ $m = $r2 ]
+ then if [ $base = $r1 ]
+ then expected=
+ else expected=a
+ fi
+ else expected=a
+ fi
+ got=`hg log -r 3 --template '{files}\n' | tr -d 'e '`
+ if [ "$got" = "$expected" ]
+ then echo "$line$conflicts: agree on \"$got\""
+ else echo "$line$conflicts: hg said \"$got\", expected \"$expected\""
+ fi
+ cd ../
+ rm -rf repo
+ done
+ done
+ done
+ done
+}
diff --git a/tests/test-merge-combination.t b/tests/test-merge-combination.t
--- a/tests/test-merge-combination.t
+++ b/tests/test-merge-combination.t
@@ -5,70 +5,7 @@
merge ancestors, nor copies/renames, and nor identical file contents
with different filelog revisions.
-genmerges is the workhorse. Given:
-- a range function describing the possible values for file a
-- a isgood function to filter out uninteresting combination
-- a createfile function to actually write the values for file a on the
-filesystem
-it print a series of lines that look like: abcd C: output of -T {files}
-describing the file a at respectively the base, p2, p1, merge
-revision. "C" indicates that hg merge had conflicts.
- $ genmerges () {
- > for base in `range` -; do
- > for r1 in `range $base` -; do
- > for r2 in `range $base $r1` -; do
- > for m in `range $base $r1 $r2` -; do
- > line="$base$r1$r2$m"
- > isgood $line || continue
- > hg init repo
- > cd repo
- > make_commit () {
- > v=$1; msg=$2; file=$3;
- > if [ $v != - ]; then
- > createfile $v
- > else
- > if [ -f a ]
- > then rm a
- > else touch $file
- > fi
- > fi
- > hg commit -q -Am $msg || exit 123
- > }
- > echo foo > foo
- > make_commit $base base b
- > make_commit $r1 r1 c
- > hg up -r 0 -q
- > make_commit $r2 r2 d
- > hg merge -q -r 1 > ../output 2>&1
- > if [ $? -ne 0 ]; then rm -f *.orig; hg resolve -m --all -q; fi
- > if [ -s ../output ]; then conflicts=" C"; else conflicts=" "; fi
- > make_commit $m m e
- > if [ $m = $r1 ] && [ $m = $r2 ]
- > then expected=
- > elif [ $m = $r1 ]
- > then if [ $base = $r2 ]
- > then expected=
- > else expected=a
- > fi
- > elif [ $m = $r2 ]
- > then if [ $base = $r1 ]
- > then expected=
- > else expected=a
- > fi
- > else expected=a
- > fi
- > got=`hg log -r 3 --template '{files}\n' | tr -d 'e '`
- > if [ "$got" = "$expected" ]
- > then echo "$line$conflicts: agree on \"$got\""
- > else echo "$line$conflicts: hg said \"$got\", expected \"$expected\""
- > fi
- > cd ../
- > rm -rf repo
- > done
- > done
- > done
- > done
- > }
+ $ . $TESTDIR/testlib/merge-combination-util.sh
All the merges of various file contents.
To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20210114/0e77ebe4/attachment-0001.html>
More information about the Mercurial-patches
mailing list