summaryrefslogtreecommitdiff
path: root/test/merge5.test
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
committercashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
commit4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch)
treec296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /test/merge5.test
downloadrelic-4f49b16079b27d7ce633619e4cddfdf2bffbc952.tar.gz
initial commitHEADmaster
Diffstat (limited to 'test/merge5.test')
-rw-r--r--test/merge5.test319
1 files changed, 319 insertions, 0 deletions
diff --git a/test/merge5.test b/test/merge5.test
new file mode 100644
index 0000000..e97ae71
--- /dev/null
+++ b/test/merge5.test
@@ -0,0 +1,319 @@
+#
+# Copyright (c) 2010 D. Richard Hipp
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the Simplified BSD License (also
+# known as the "2-Clause License" or "FreeBSD License".)
+#
+# This program is distributed in the hope that it will be useful,
+# but without any warranty; without even the implied warranty of
+# merchantability or fitness for a particular purpose.
+#
+# Author contact information:
+# drh@hwaci.com
+# http://www.hwaci.com/drh/
+#
+############################################################################
+#
+# Tests of the "merge" command
+#
+
+if {! $::QUIET} {
+ puts "Skipping Merge5 tests"
+}
+protOut {
+fossil sqlite3 --no-repository reacts badly to SQL dumped from
+repositories created from fossil older than version 2.0.
+}
+#test merge5-sqlite3-issue false knownBug
+test_cleanup_then_return
+
+# Verify the results of a check-out
+#
+proc checkout-test {testid expected_content} {
+ set flist {}
+ foreach {status filename} [exec $::fossilexe ls -l] {
+ if {$status!="DELETED"} {lappend flist $filename}
+ }
+ eval fossil sha1sum [lsort $flist]
+ global RESULT
+ regsub -all {\n *} [string trim $expected_content] "\n " expected
+ regsub -all {\n *} [string trim $RESULT] "\n " result
+ if {$result!=$expected} {
+ protOut " Expected:\n $expected"
+ protOut " Got:\n $result"
+ test merge5-$testid 0
+ } else {
+ test merge5-$testid 1
+ }
+}
+
+require_no_open_checkout; test_setup ""
+
+# Construct a test repository
+#
+exec $::fossilexe sqlite3 --no-repository m5.fossil <$testdir/${testfile}_repo.sql
+fossil rebuild m5.fossil
+fossil open m5.fossil
+fossil user default drh --user drh
+fossil update baseline
+checkout-test 10 {
+ da5c8346496f3421cb58f84b6e59e9531d9d424d one.txt
+ ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
+ 278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
+}
+
+# Update to the tip of the trunk
+#
+fossil update trunk
+checkout-test 20 {
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+
+# Merge in the change that adds file four.txt
+#
+fossil merge br1
+checkout-test 30 {
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+
+# Undo the merge. Verify restoration of former state.
+#
+fossil undo
+checkout-test 40 {
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+
+# Now switch to br1 then merge in the trunk. Verify that the result
+# is the same as merging br1 into trunk.
+#
+fossil update br1
+fossil merge trunk
+checkout-test 50 {
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+fossil undo
+fossil update trunk
+checkout-test 60 {
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+
+# Go back to the tip of the trunk and merge branch br1 again. This
+# time do a check-in of the merge. Verify that the same content appears
+# after the merge.
+#
+fossil update chng3
+fossil merge br1
+checkout-test 70 {
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+fossil commit -tag m1 -m {merge with br1} -nosign -f
+checkout-test 71 {
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+fossil update chng3
+checkout-test 72 {
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+fossil update m1
+checkout-test 73 {
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+
+# Merge br2 into the trunk. br2 contains some independent change to the
+# two.txt file. Verify that these are merge in correctly.
+#
+fossil update m1
+fossil merge br2
+checkout-test 80 {
+ 8f09bc55a60eb8ca06f10a3b577aafa869b31695 five.txt
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ 68eeee8b843eaea76e33d3911f416b745d0e5e5c two.txt
+}
+fossil undo
+checkout-test 81 {
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+
+# Now merge trunk into br2. Verify that the same set of changes result.
+#
+fossil update br2
+fossil merge trunk
+checkout-test 90 {
+ 8f09bc55a60eb8ca06f10a3b577aafa869b31695 five.txt
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ 68eeee8b843eaea76e33d3911f416b745d0e5e5c two.txt
+}
+fossil undo
+checkout-test 91 {
+ 8f09bc55a60eb8ca06f10a3b577aafa869b31695 five.txt
+ da5c8346496f3421cb58f84b6e59e9531d9d424d one.txt
+ ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
+ 85286cb3bc6d9e6f2f586eb5532f6065678f75b9 two.txt
+}
+
+# Starting from chng3, merge in br4. The one file is deleted from br4, so
+# the merge should cause the one file to disappear from the checkout.
+#
+fossil update chng3
+checkout-test 100 {
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+fossil merge br4
+checkout-test 101 {
+ 6e167b139c294bed560e2e30b352361b101e1f39 four.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+fossil undo
+checkout-test 102 {
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+
+# Do the same merge of br4 into chng3, but this time check it in as a new
+# branch.
+#
+fossil update chng3
+fossil merge br4
+fossil commit -nosign -branch br4-b -m {merge in br4} -tag m2
+checkout-test 110 {
+ 6e167b139c294bed560e2e30b352361b101e1f39 four.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+
+# Branches br1 and br4 both add file four.txt. So if we merge them together,
+# the version of file four.txt in the original should be preserved.
+#
+fossil update br1
+checkout-test 120 {
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ da5c8346496f3421cb58f84b6e59e9531d9d424d one.txt
+ ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
+ 278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
+}
+fossil merge br4 -expectError
+checkout-test 121 {
+ 35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
+ ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
+ 278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
+}
+fossil undo
+fossil update br4
+checkout-test 122 {
+ 6e167b139c294bed560e2e30b352361b101e1f39 four.txt
+ ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
+ 278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
+}
+fossil merge br1 -expectError
+checkout-test 123 {
+ 6e167b139c294bed560e2e30b352361b101e1f39 four.txt
+ ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
+ 278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
+}
+fossil undo
+
+# Merge br5 (which includes a file rename) into chng3
+#
+fossil update chng3
+checkout-test 130 {
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+fossil merge br5
+checkout-test 131 {
+ 7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
+ 98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
+ e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
+}
+fossil undo
+checkout-test 132 {
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+fossil merge br5
+checkout-test 133 {
+ 7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
+ 98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
+ e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
+}
+fossil commit -nosign -m {merge with rename} -branch {trunk+br5}
+checkout-test 134 {
+ 7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
+ 98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
+ e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
+}
+fossil update chng3
+checkout-test 135 {
+ 6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
+ 64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
+ b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
+}
+fossil update trunk+br5
+checkout-test 136 {
+ 7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
+ 98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
+ e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
+}
+
+# Merge the chng3 check-in into br5, verifying that the change to two.txt
+# from chng3 are applies to two-rename.txt in br5.
+#
+fossil update br5
+checkout-test 140 {
+ e866bb885d5184cba497cfb6a4eb281688519521 one.txt
+ e09593950837f76e70ca2f8ff2272ae3df0ba017 three.txt
+ 5ebb3c9ad50740a7382902657b84a6105c32fc7b two-rename.txt
+}
+fossil merge chng3
+checkout-test 141 {
+ 7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
+ 98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
+ e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
+}
+fossil commit -nosign -m {change to two} -branch br5-2
+checkout-test 142 {
+ 7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
+ 98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
+ e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
+}
+
+###############################################################################
+
+test_cleanup