commit 70551d57b9f537ed14de697c1d7c552d26c12e5a from: Stefan Sperling date: Fri Apr 24 16:23:39 2020 UTC add a test for rebase file index corruption problem fix in previous commit ok tracey commit - 8bd8568cf977e484d823877e3bff4e426597c513 commit + 70551d57b9f537ed14de697c1d7c552d26c12e5a blob - 34f088073605cb3bb15c99c42ee9655c75a994da blob + ff453b223f4e883bf285ec5a0e4e0c465ba3dd3c --- regress/cmdline/common.sh +++ regress/cmdline/common.sh @@ -84,7 +84,8 @@ function git_show_tagger_time function git_show_parent_commit { local repo="$1" - (cd $repo && git show --no-patch --pretty='format:%P') + local commit="$2" + (cd $repo && git show --no-patch --pretty='format:%P' $commit) } function git_show_tree blob - e6f7a88e48abfbf74fffea06c088a955d610baf1 blob + e54de3f2dd29851f2675c480f96c1061d6e4df17 --- regress/cmdline/rebase.sh +++ regress/cmdline/rebase.sh @@ -1155,11 +1155,118 @@ function test_rebase_delete_missing_file { echo "commit $new_commit1 (newbranch)" > $testroot/stdout.expected echo "commit $master_commit (master)" >> $testroot/stdout.expected echo "commit $commit0" >> $testroot/stdout.expected + 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_rebase_rm_add_rm_file { + local testroot=`test_init rebase_rm_add_rm_file` + + (cd $testroot/repo && git checkout -q -b newbranch) + (cd $testroot/repo && git rm -q beta) + git_commit $testroot/repo -m "removing beta from newbranch" + local orig_commit1=`git_show_head $testroot/repo` + + echo 'restored beta' > $testroot/repo/beta + (cd $testroot/repo && git add beta) + git_commit $testroot/repo -m "restoring beta on newbranch" + local orig_commit2=`git_show_head $testroot/repo` + + (cd $testroot/repo && git rm -q beta) + git_commit $testroot/repo -m "removing beta from newbranch again" + local orig_commit3=`git_show_head $testroot/repo` + + (cd $testroot/repo && git checkout -q master) + echo "modified zeta on master" > $testroot/repo/epsilon/zeta + git_commit $testroot/repo -m "committing to zeta on master" + local master_commit=`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 + + (cd $testroot/wt && got rebase newbranch > $testroot/stdout) + + # this would error out with 'got: file index is corrupt' + (cd $testroot/wt && got status > /dev/null) + ret="$?" + if [ "$ret" != "0" ]; then + echo "got status command failed unexpectedly" >&2 + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/repo && git checkout -q newbranch) + local new_commit3=`git_show_head $testroot/repo` + local new_commit2=`git_show_parent_commit $testroot/repo` + local new_commit1=`git_show_parent_commit $testroot/repo $new_commit2` + + (cd $testroot/repo && git checkout -q newbranch) + + local short_orig_commit1=`trim_obj_id 28 $orig_commit1` + local short_orig_commit2=`trim_obj_id 28 $orig_commit2` + local short_orig_commit3=`trim_obj_id 28 $orig_commit3` + local short_new_commit1=`trim_obj_id 28 $new_commit1` + local short_new_commit2=`trim_obj_id 28 $new_commit2` + local short_new_commit3=`trim_obj_id 28 $new_commit3` + + echo "D beta" > $testroot/stdout.expected + echo -n "$short_orig_commit1 -> $short_new_commit1" \ + >> $testroot/stdout.expected + echo ": removing beta from newbranch" >> $testroot/stdout.expected + echo "A beta" >> $testroot/stdout.expected + echo -n "$short_orig_commit2 -> $short_new_commit2" \ + >> $testroot/stdout.expected + echo ": restoring beta on newbranch" >> $testroot/stdout.expected + echo "D beta" >> $testroot/stdout.expected + echo -n "$short_orig_commit3 -> $short_new_commit3" \ + >> $testroot/stdout.expected + echo ": removing beta from newbranch again" >> $testroot/stdout.expected + echo "Switching work tree to refs/heads/newbranch" \ + >> $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 + + (cd $testroot/wt && got status > $testroot/stdout) + ret="$?" + if [ "$ret" != "0" ]; then + echo "got status command failed unexpectedly" >&2 + test_done "$testroot" "$ret" + return 1 + fi + + echo -n > $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 + + (cd $testroot/wt && got log -l4 | grep ^commit > $testroot/stdout) + echo "commit $new_commit3 (newbranch)" > $testroot/stdout.expected + echo "commit $new_commit2" >> $testroot/stdout.expected + echo "commit $new_commit1" >> $testroot/stdout.expected + echo "commit $master_commit (master)" >> $testroot/stdout.expected + cmp -s $testroot/stdout.expected $testroot/stdout + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + fi test_done "$testroot" "$ret" } @@ -1176,3 +1283,4 @@ run_test test_rebase_forward run_test test_rebase_out_of_date run_test test_rebase_trims_empty_dir run_test test_rebase_delete_missing_file +run_test test_rebase_rm_add_rm_file