commit 5bda3ef83752a447e1afc97850d2bd6bd250ca55 from: Stefan Sperling date: Sun Feb 09 10:51:29 2020 UTC extend 'backout' tests; covers segfault found by semarie@ (fixed in 3c24af98) commit - 833eae2911c004d4184a5d629403327fb85f9b07 commit + 5bda3ef83752a447e1afc97850d2bd6bd250ca55 blob - 32c922210f36d14f9c0ec9049fbeca34d9690528 blob + 9784f978ae60d478844d4cb437e1bb1a6113a07e --- regress/cmdline/backout.sh +++ regress/cmdline/backout.sh @@ -26,8 +26,11 @@ function test_backout_basic { return 1 fi + echo "new" > $testroot/wt/new + (cd $testroot/wt && got add new > /dev/null) echo "modified alpha" > $testroot/wt/alpha - (cd $testroot/wt && got commit -m "changing alpha" > /dev/null) + (cd $testroot/wt && got rm epsilon/zeta > /dev/null) + (cd $testroot/wt && got commit -m "bad changes" > /dev/null) local bad_commit=`git_show_head $testroot/repo` @@ -42,6 +45,8 @@ function test_backout_basic { (cd $testroot/wt && got backout $bad_commit > $testroot/stdout) echo "G alpha" > $testroot/stdout.expected + echo "A epsilon/zeta" >> $testroot/stdout.expected + echo "D new" >> $testroot/stdout.expected echo "Backed out commit $bad_commit" >> $testroot/stdout.expected cmp -s $testroot/stdout.expected $testroot/stdout ret="$?" @@ -61,7 +66,21 @@ function test_backout_basic { return 1 fi + if [ -e "$testroot/wt/new" ]; then + echo "file '$testroot/wt/new' still exists on disk" >&2 + test_done "$testroot" "$ret" + return 1 + fi + + if [ ! -e "$testroot/wt/epsilon/zeta" ]; then + echo "file '$testroot/wt/epsilon/zeta' is missing on disk" >&2 + test_done "$testroot" "$ret" + return 1 + fi + echo 'M alpha' > $testroot/stdout.expected + echo 'A epsilon/zeta' >> $testroot/stdout.expected + echo 'D new' >> $testroot/stdout.expected (cd $testroot/wt && got status > $testroot/stdout) cmp -s $testroot/stdout.expected $testroot/stdout ret="$?" @@ -71,4 +90,119 @@ function test_backout_basic { test_done "$testroot" "$ret" } +function test_backout_edits_for_file_since_deleted { + local testroot=`test_init backout_edits_for_file_since_deleted` + + got checkout $testroot/repo $testroot/wt > /dev/null + ret="$?" + if [ "$ret" != "0" ]; then + test_done "$testroot" "$ret" + return 1 + fi + + echo "modified alpha" > $testroot/wt/alpha + (cd $testroot/wt && got commit -m "changing alpha" > /dev/null) + + local bad_commit=`git_show_head $testroot/repo` + + + (cd $testroot/wt && got update > /dev/null) + + (cd $testroot/wt && got rm alpha > /dev/null) + (cd $testroot/wt && got commit -m "removing alpha" > /dev/null) + + (cd $testroot/wt && got update > /dev/null) + + (cd $testroot/wt && got backout $bad_commit > $testroot/stdout) + + echo "! alpha" > $testroot/stdout.expected + echo "Backed out commit $bad_commit" >> $testroot/stdout.expected + cmp -s $testroot/stdout.expected $testroot/stdout + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + + if [ -e "$testroot/wt/alpha" ]; then + echo "file '$testroot/wt/alpha' still exists on disk" >&2 + test_done "$testroot" "$ret" + return 1 + fi + + echo -n '' > $testroot/stdout.expected + (cd $testroot/wt && got status > $testroot/stdout) + cmp -s $testroot/stdout.expected $testroot/stdout + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + fi + test_done "$testroot" "$ret" +} + +function test_backout_next_commit { + local testroot=`test_init backout_next_commit` + local commit0=`git_show_head $testroot/repo` + + got checkout $testroot/repo $testroot/wt > /dev/null + ret="$?" + if [ "$ret" != "0" ]; then + test_done "$testroot" "$ret" + return 1 + fi + + echo "new" > $testroot/wt/new + (cd $testroot/wt && got add new > /dev/null) + echo "modified alpha" > $testroot/wt/alpha + (cd $testroot/wt && got rm epsilon/zeta > /dev/null) + (cd $testroot/wt && got commit -m "bad changes" > /dev/null) + + local bad_commit=`git_show_head $testroot/repo` + + (cd $testroot/wt && got update -c $commit0 > /dev/null) + + (cd $testroot/wt && got backout $bad_commit > $testroot/stdout) + + echo "G alpha" > $testroot/stdout.expected + echo "G epsilon/zeta" >> $testroot/stdout.expected + echo "! new" >> $testroot/stdout.expected + echo "Backed out commit $bad_commit" >> $testroot/stdout.expected + cmp -s $testroot/stdout.expected $testroot/stdout + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + + if [ -e "$testroot/wt/new" ]; then + echo "file '$testroot/wt/new' still exists on disk" >&2 + test_done "$testroot" "$ret" + return 1 + fi + + echo "zeta" > $testroot/content.expected + cat $testroot/wt/epsilon/zeta > $testroot/content + cmp -s $testroot/content.expected $testroot/content + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/content.expected $testroot/content + test_done "$testroot" "$ret" + return 1 + fi + + echo -n '' > $testroot/stdout.expected + (cd $testroot/wt && got status > $testroot/stdout) + cmp -s $testroot/stdout.expected $testroot/stdout + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + fi + test_done "$testroot" "$ret" +} + + run_test test_backout_basic +run_test test_backout_edits_for_file_since_deleted +run_test test_backout_next_commit