summaryrefslogtreecommitdiff
path: root/t/t2030-unresolve-info.sh
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-12-25 18:08:04 (GMT)
committerJunio C Hamano <gitster@pobox.com>2009-12-26 01:10:10 (GMT)
commit9d9a2f4aba3650093bad952cd89e276cde4ed074 (patch)
treef8485ca544f24ee89f92c578cfea50f3a164246d /t/t2030-unresolve-info.sh
parentcfc5789ada444423232fa1533f401b5972eb3f6c (diff)
downloadgit-9d9a2f4aba3650093bad952cd89e276cde4ed074.zip
git-9d9a2f4aba3650093bad952cd89e276cde4ed074.tar.gz
git-9d9a2f4aba3650093bad952cd89e276cde4ed074.tar.bz2
resolve-undo: basic tests
Make sure that resolving a failed merge with git add records the conflicted state, committing the result keeps that state, and checking out another commit clears the state. "git ls-files" learns a new option --resolve-undo to show the recorded information. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t2030-unresolve-info.sh')
-rwxr-xr-xt/t2030-unresolve-info.sh88
1 files changed, 88 insertions, 0 deletions
diff --git a/t/t2030-unresolve-info.sh b/t/t2030-unresolve-info.sh
new file mode 100755
index 0000000..785c8b3
--- /dev/null
+++ b/t/t2030-unresolve-info.sh
@@ -0,0 +1,88 @@
+#!/bin/sh
+
+test_description='undoing resolution'
+
+. ./test-lib.sh
+
+check_resolve_undo () {
+ msg=$1
+ shift
+ while case $# in
+ 0) break ;;
+ 1|2|3) die "Bug in check-resolve-undo test" ;;
+ esac
+ do
+ path=$1
+ shift
+ for stage in 1 2 3
+ do
+ sha1=$1
+ shift
+ case "$sha1" in
+ '') continue ;;
+ esac
+ sha1=$(git rev-parse --verify "$sha1")
+ printf "100644 %s %s\t%s\n" $sha1 $stage $path
+ done
+ done >"$msg.expect" &&
+ git ls-files --resolve-undo >"$msg.actual" &&
+ test_cmp "$msg.expect" "$msg.actual"
+}
+
+prime_resolve_undo () {
+ git reset --hard &&
+ git checkout second^0 &&
+ test_tick &&
+ test_must_fail git merge third^0 &&
+ echo merge does not leave anything &&
+ check_resolve_undo empty &&
+ echo different >file &&
+ git add file &&
+ echo resolving records &&
+ check_resolve_undo recorded file initial:file second:file third:file
+}
+
+test_expect_success setup '
+ test_commit initial file first &&
+ git branch side &&
+ git branch another &&
+ test_commit second file second &&
+ git checkout side &&
+ test_commit third file third &&
+ git checkout another &&
+ test_commit fourth file fourth &&
+ git checkout master
+'
+
+test_expect_success 'add records switch clears' '
+ prime_resolve_undo &&
+ test_tick &&
+ git commit -m merged &&
+ echo committing keeps &&
+ check_resolve_undo kept file initial:file second:file third:file &&
+ git checkout second^0 &&
+ echo switching clears &&
+ check_resolve_undo cleared
+'
+
+test_expect_success 'rm records reset clears' '
+ prime_resolve_undo &&
+ test_tick &&
+ git commit -m merged &&
+ echo committing keeps &&
+ check_resolve_undo kept file initial:file second:file third:file &&
+
+ echo merge clears upfront &&
+ test_must_fail git merge fourth^0 &&
+ check_resolve_undo nuked &&
+
+ git rm -f file &&
+ echo resolving records &&
+ check_resolve_undo recorded file initial:file HEAD:file fourth:file &&
+
+ git reset --hard &&
+ echo resetting discards &&
+ check_resolve_undo discarded
+'
+
+test_done