Download raw body.
stop got diff from lying in mixed-commit work trees
stsp pointed out on IRC that got diff can lie in mixed-commit work trees as only the work tree base commit is emitted at the top of the diff; as such, users could reasonably infer that the same base commit id applies to all files in the diff. This is not true in mixed-commit work trees. After discussing this with op and stsp, we decided to emit each file's base commit in its diff header, rather than just emit the work tree's base commit once. This requires some regress churn but not nearly as much as anticipated. The bonus is got patch already does the right thing by parsing the new commit header so it requires no changes :) Apart from the mechanical relocation and addition of the commit header in the changes to the test harness, only one patch test needed changing as we now show the file's true base commit in conflict markers. I've also added a new test to got diff regress to cover this change. This is what mixed-commit work tree diffs look like (observe the new commit - $basecommit line above each blob - line in all file headers): [[ diff /tmp/got-test-diff_mixed_worktree-xQKZURYe9K/wt path + /tmp/got-test-diff_mixed_worktree-xQKZURYe9K/wt commit - 400880623c67bcd21fc38e5ce5a39382f7249634 blob - 459809db67d164c738cac58282b2e3426b6aaa33 file + alpha --- alpha +++ alpha @@ -1 +1 @@ -'alpha +alpha commit - b1efe2d25322d0c819fe57ec7b244feb4fd90569 blob - 65b2df87f7df3aeedef04be96703e55ac19c2cfb file + beta --- beta +++ beta @@ -1 +1 @@ -beta +'beta commit - 852030ab7b6d55b358767cd71b4be3cdb6ad6154 blob - /dev/null file + new (mode 644) --- /dev/null +++ new @@ -0,0 +1 @@ +new ]] M got/got.c | 32+ 4- M regress/cmdline/diff.sh | 137+ 15- M regress/cmdline/patch.sh | 3+ 1- M regress/cmdline/revert.sh | 3+ 3- M regress/cmdline/stage.sh | 24+ 11- M regress/cmdline/unstage.sh | 10+ 9- M regress/cmdline/update.sh | 1+ 1- 7 files changed, 210 insertions(+), 44 deletions(-) commit - 197402aa5d504d7a3c4d10d6066757443632a777 commit + 2c98804ebdc5491783e317576ba0648cbd709dce blob - 8a69602e91a117f6b3b1826abfe7737979fbf616 blob + e880bee7ad6fa1234e494544676bf6afcdc8ec13 --- got/got.c +++ got/got.c @@ -5061,6 +5061,34 @@ done: } static const struct got_error * +emit_base_commit_header(FILE *f, struct got_object_id *commit_id, + struct got_worktree *worktree) +{ + const struct got_error *err; + struct got_object_id *base_commit_id; + char *base_commit_idstr; + + if (worktree == NULL) /* shouldn't happen */ + return got_error(GOT_ERR_NOT_WORKTREE); + + base_commit_id = got_worktree_get_base_commit_id(worktree); + + if (commit_id != NULL) { + if (got_object_id_cmp(commit_id, base_commit_id) != 0) + base_commit_id = commit_id; + } + + err = got_object_id_str(&base_commit_idstr, base_commit_id); + if (err != NULL) + return err; + + if (fprintf(f, "commit - %s\n", base_commit_idstr) < 0) + err = got_error_from_errno("fprintf"); + free(base_commit_idstr); + return err; +} + +static const struct got_error * print_diff(void *arg, unsigned char status, unsigned char staged_status, const char *path, struct got_object_id *blob_id, struct got_object_id *staged_blob_id, struct got_object_id *commit_id, @@ -5109,10 +5137,6 @@ print_diff(void *arg, unsigned char status, unsigned c err = got_error_from_errno("fprintf"); goto done; } - if (fprintf(a->outfile, "commit - %s\n", a->id_str) < 0) { - err = got_error_from_errno("fprintf"); - goto done; - } if (fprintf(a->outfile, "path + %s%s\n", got_worktree_get_root_path(a->worktree), a->diff_staged ? " (staged changes)" : "") < 0) { @@ -5122,6 +5146,10 @@ print_diff(void *arg, unsigned char status, unsigned c a->header_shown = 1; } + err = emit_base_commit_header(a->outfile, commit_id, a->worktree); + if (err != NULL) + goto done; + if (a->diff_staged) { const char *label1 = NULL, *label2 = NULL; switch (staged_status) { blob - 59243b5c07792da8486b3128282d07cd79ae5bbe blob + 6af7bfeb7078fc4c586802488a153af4d297e4ea --- regress/cmdline/diff.sh +++ regress/cmdline/diff.sh @@ -34,8 +34,8 @@ test_diff_basic() { (cd $testroot/wt && got add new >/dev/null) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'alpha$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -45,6 +45,7 @@ test_diff_basic() { echo '@@ -1 +1 @@' >> $testroot/stdout.expected echo '-alpha' >> $testroot/stdout.expected echo '+modified alpha' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'beta$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -53,6 +54,7 @@ test_diff_basic() { echo '+++ /dev/null' >> $testroot/stdout.expected echo '@@ -1 +0,0 @@' >> $testroot/stdout.expected echo '-beta' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + new (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -119,8 +121,8 @@ test_diff_basic() { # diff several paths in a work tree echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'alpha$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -130,6 +132,7 @@ test_diff_basic() { echo '@@ -1 +1 @@' >> $testroot/stdout.expected echo '-alpha' >> $testroot/stdout.expected echo '+modified alpha' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'beta$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -138,6 +141,7 @@ test_diff_basic() { echo '+++ /dev/null' >> $testroot/stdout.expected echo '@@ -1 +0,0 @@' >> $testroot/stdout.expected echo '-beta' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i epsilon | grep 'zeta$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -147,6 +151,7 @@ test_diff_basic() { echo '@@ -1 +1 @@' >> $testroot/stdout.expected echo '-zeta' >> $testroot/stdout.expected echo '+modified zeta' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + new (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -266,14 +271,15 @@ test_diff_basic() { return 1 fi echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + master (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected echo '+++ master' >> $testroot/stdout.expected echo '@@ -0,0 +1 @@' >> $testroot/stdout.expected echo '+master' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + new (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -308,8 +314,8 @@ test_diff_basic() { # a single argument which can be resolved to a path is not ambiguous echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + new (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -362,8 +368,8 @@ test_diff_basic() { fi echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + new (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -475,8 +481,8 @@ test_diff_shows_conflict() { fi echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'numbers$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -665,8 +671,8 @@ test_diff_ignore_whitespace() { (cd $testroot/wt && got diff -w > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id0" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id0" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -c $commit_id0 -i | grep 'alpha$' | \ cut -d' ' -f 1 >> $testroot/stdout.expected @@ -744,8 +750,8 @@ test_diff_symlinks_in_work_tree() { (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id1" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id1" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -c $commit_id1 -i | \ grep 'alpha.link@ -> alpha$' | \ @@ -758,6 +764,7 @@ test_diff_symlinks_in_work_tree() { echo '\ No newline at end of file' >> $testroot/stdout.expected echo '+beta' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $commit_id1" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -c $commit_id1 -i | \ grep 'dotgotfoo.link@ -> .got/foo$' | \ @@ -770,6 +777,7 @@ test_diff_symlinks_in_work_tree() { echo '\ No newline at end of file' >> $testroot/stdout.expected echo '+.got/bar' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $commit_id1" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -c $commit_id1 -i epsilon | \ grep 'beta.link@ -> ../beta$' | \ @@ -782,6 +790,7 @@ test_diff_symlinks_in_work_tree() { echo '\ No newline at end of file' >> $testroot/stdout.expected echo '+../gamma/delta' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $commit_id1" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -c $commit_id1 -i | \ grep 'epsilon.link@ -> epsilon$' | \ @@ -794,6 +803,7 @@ test_diff_symlinks_in_work_tree() { echo '\ No newline at end of file' >> $testroot/stdout.expected echo '+gamma' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $commit_id1" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -c $commit_id1 -i | \ grep 'nonexistent.link@ -> nonexistent$' | \ @@ -804,6 +814,7 @@ test_diff_symlinks_in_work_tree() { echo '@@ -1 +0,0 @@' >> $testroot/stdout.expected echo '-nonexistent' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $commit_id1" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + zeta.link (mode 120000)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -954,8 +965,8 @@ test_diff_binary_files() { (cd $testroot/wt && got add foo >/dev/null) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + foo (mode 644)' >> $testroot/stdout.expected echo "Binary files /dev/null and foo differ" \ @@ -971,8 +982,8 @@ test_diff_binary_files() { fi echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + foo (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -996,8 +1007,8 @@ test_diff_binary_files() { printf '\377\200\0\0\377\200\0\0' > $testroot/wt/foo echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'foo$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -1364,8 +1375,8 @@ test_diff_worktree_newfile_xbit() { local commit_id=`git_show_head $testroot/repo` cat <<EOF > $testroot/stdout.expected diff $testroot/wt -commit - $commit_id path + $testroot/wt +commit - $commit_id blob - /dev/null file + xfile (mode 755) --- /dev/null @@ -1604,8 +1615,8 @@ diffstat $testroot/wt EOF echo "diff $testroot/wt" >> $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'alpha$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -1615,6 +1626,7 @@ EOF echo '@@ -1 +1 @@' >> $testroot/stdout.expected echo '-alpha' >> $testroot/stdout.expected echo '+modified alpha' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'beta$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -1623,6 +1635,7 @@ EOF echo '+++ /dev/null' >> $testroot/stdout.expected echo '@@ -1 +0,0 @@' >> $testroot/stdout.expected echo '-beta' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + new (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -1654,8 +1667,8 @@ EOF # specify paths to diffstat echo "diff $testroot/wt" >> $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'alpha$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -1665,6 +1678,7 @@ EOF echo '@@ -1 +1 @@' >> $testroot/stdout.expected echo '-alpha' >> $testroot/stdout.expected echo '+modified alpha' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'beta$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -1673,6 +1687,7 @@ EOF echo '+++ /dev/null' >> $testroot/stdout.expected echo '@@ -1 +0,0 @@' >> $testroot/stdout.expected echo '-beta' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i epsilon | grep 'zeta$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -1682,6 +1697,7 @@ EOF echo '@@ -1 +1 @@' >> $testroot/stdout.expected echo '-zeta' >> $testroot/stdout.expected echo '+modified zeta' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + new (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -1736,14 +1752,15 @@ diffstat $testroot/wt EOF echo "diff $testroot/wt" >> $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + master (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected echo '+++ master' >> $testroot/stdout.expected echo '@@ -0,0 +1 @@' >> $testroot/stdout.expected echo '+master' >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + new (mode 644)' >> $testroot/stdout.expected echo '--- /dev/null' >> $testroot/stdout.expected @@ -2267,6 +2284,110 @@ test_diff_commit_keywords() { test_done "$testroot" "$ret" } +test_diff_mixed_worktree() { + local testroot=$(test_init diff_mixed_worktree) + local baseid_beta=$(git_show_head $testroot/repo) + + got checkout $testroot/repo $testroot/wt > /dev/null + ret=$? + if [ $ret -ne 0 ]; then + test_done "$testroot" "$ret" + return 1 + fi + + echo "'alpha" > $testroot/wt/alpha + (cd $testroot/wt && got commit -m "'alpha" > /dev/null) + + local baseid_alpha=$(git_show_head $testroot/repo) + + echo "'delta" > $testroot/wt/gamma/delta + (cd $testroot/wt && got commit -m "'delta" > /dev/null) + + local baseid_new=$(git_show_head $testroot/repo) + local blobid_alpha=$(get_blob_id $testroot/repo "" alpha) + local blobid_beta=$(get_blob_id $testroot/repo "" beta) + + echo "alpha" > $testroot/wt/alpha + echo "'beta" > $testroot/wt/beta + echo "new" > $testroot/wt/new + + (cd $testroot/wt && got add new > /dev/null) + + cat <<-EOF >$testroot/stdout.expected + diff $testroot/wt + path + $testroot/wt + commit - $baseid_alpha + blob - $blobid_alpha + file + alpha + --- alpha + +++ alpha + @@ -1 +1 @@ + -'alpha + +alpha + commit - $baseid_beta + blob - $blobid_beta + file + beta + --- beta + +++ beta + @@ -1 +1 @@ + -beta + +'beta + commit - $baseid_new + blob - /dev/null + file + new (mode 644) + --- /dev/null + +++ new + @@ -0,0 +1 @@ + +new + EOF + + (cd $testroot/wt && got diff > $testroot/stdout) + cmp -s $testroot/stdout.expected $testroot/stdout + ret=$? + if [ $ret -ne 0 ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/wt && got stage alpha beta > $testroot/stdout) + + stageid_alpha=$(cd $testroot/wt && got stage -l alpha | cut -d' ' -f 1) + stageid_beta=$(cd $testroot/wt && got stage -l beta | cut -d' ' -f 1) + + cat <<-EOF >$testroot/stdout.expected + diff -s $testroot/wt + path + $testroot/wt (staged changes) + commit - $baseid_alpha + blob - $blobid_alpha + blob + $stageid_alpha + --- alpha + +++ alpha + @@ -1 +1 @@ + -'alpha + +alpha + commit - $baseid_beta + blob - $blobid_beta + blob + $stageid_beta + --- beta + +++ beta + @@ -1 +1 @@ + -beta + +'beta + EOF + + (cd $testroot/wt && got diff -s > $testroot/stdout) + cmp -s $testroot/stdout.expected $testroot/stdout + ret=$? + if [ $ret -ne 0 ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + + test_done "$testroot" 0 +} + test_parseargs "$@" run_test test_diff_basic run_test test_diff_shows_conflict @@ -2287,3 +2408,4 @@ run_test test_diff_file_to_dir run_test test_diff_dir_to_file run_test test_diff_path_in_root_commit run_test test_diff_commit_keywords +run_test test_diff_mixed_worktree blob - 884ba874302b4e95327b6a03d633122a2757442a blob + 66b8ac0292d449f916eeb70817e844ea1710dd4b --- regress/cmdline/patch.sh +++ regress/cmdline/patch.sh @@ -1577,6 +1577,8 @@ test_patch_merge_conflict() { return 1 fi + local alpha_basecommit_id=`git_show_head $testroot/repo` + seq 10 > $testroot/wt/numbers (cd $testroot/wt && got add numbers && got commit -m +numbers) \ > /dev/null @@ -1634,7 +1636,7 @@ test_patch_merge_conflict() { cat <<-EOF > $testroot/wt/alpha.expected <<<<<<< --- alpha ALPHA - ||||||| commit $commit_id + ||||||| commit $alpha_basecommit_id alpha ======= a blob - 011e20bae0544b37165ccaf2b12d702d4869e2f0 blob + cc12859f70df97800a252ad662cc906397252208 --- regress/cmdline/revert.sh +++ regress/cmdline/revert.sh @@ -566,8 +566,8 @@ EOF fi echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -669,8 +669,8 @@ EOF (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -739,8 +739,8 @@ EOF (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ blob - 001262301f5016d81a6b4944240cc53a7e8a0144 blob + 1ad08eac94cab7500e0e8b85dc6c499f05700a6b --- regress/cmdline/stage.sh +++ regress/cmdline/stage.sh @@ -934,8 +934,8 @@ test_stage_diff() { (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_commit" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l alpha) | cut -d' ' -f 1 | tr -d '\n' \ >> $testroot/stdout.expected @@ -946,6 +946,7 @@ test_stage_diff() { echo '@@ -1 +1 @@' >> $testroot/stdout.expected echo '-modified file' >> $testroot/stdout.expected echo '+modified file again' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l foo) | cut -d' ' -f 1 | tr -d '\n' \ >> $testroot/stdout.expected @@ -968,8 +969,8 @@ test_stage_diff() { (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_commit" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'alpha$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -981,6 +982,7 @@ test_stage_diff() { echo '@@ -1 +1 @@' >> $testroot/stdout.expected echo '-alpha' >> $testroot/stdout.expected echo '+modified file' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'beta$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -989,6 +991,7 @@ test_stage_diff() { echo '+++ /dev/null' >> $testroot/stdout.expected echo '@@ -1 +0,0 @@' >> $testroot/stdout.expected echo '-beta' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo -n 'blob + ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l foo) | cut -d' ' -f 1 \ @@ -1595,8 +1598,8 @@ EOF (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -1702,8 +1705,8 @@ EOF (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -1857,8 +1860,8 @@ EOF (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -1896,8 +1899,8 @@ EOF (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l numbers) | cut -d' ' -f 1 | \ tr -d '\n' >> $testroot/stdout.expected @@ -1963,8 +1966,8 @@ test_stage_patch_added() { (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo -n 'blob + ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l epsilon/new) | cut -d' ' -f 1 \ @@ -2088,8 +2091,8 @@ test_stage_patch_removed() { (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l beta) | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -2310,8 +2313,8 @@ EOF (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -2507,8 +2510,8 @@ EOF (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_commit" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'alpha.link@ -> alpha$' | \ cut -d' ' -f 1 >> $testroot/stdout.expected @@ -2522,6 +2525,7 @@ EOF echo '\ No newline at end of file' >> $testroot/stdout.expected echo '+beta' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo -n 'blob + ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l dotgotbar.link) | cut -d' ' -f 1 \ @@ -2531,6 +2535,7 @@ EOF echo '@@ -0,0 +1 @@' >> $testroot/stdout.expected echo '+.got/bar' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo -n 'blob + ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l dotgotfoo.link) | cut -d' ' -f 1 \ @@ -2539,6 +2544,7 @@ EOF echo '+++ dotgotfoo.link' >> $testroot/stdout.expected echo '@@ -0,0 +1 @@' >> $testroot/stdout.expected echo '+this is regular file foo' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i epsilon | grep 'beta.link@ -> ../beta$' | \ cut -d' ' -f 1 >> $testroot/stdout.expected @@ -2552,6 +2558,7 @@ EOF echo '\ No newline at end of file' >> $testroot/stdout.expected echo '+../gamma/delta' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'epsilon.link@ -> epsilon$' | \ cut -d' ' -f 1 >> $testroot/stdout.expected @@ -2565,6 +2572,7 @@ EOF echo '\ No newline at end of file' >> $testroot/stdout.expected echo '+gamma' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'nonexistent.link@ -> nonexistent$' | \ cut -d' ' -f 1 >> $testroot/stdout.expected @@ -2574,6 +2582,7 @@ EOF echo '@@ -1 +0,0 @@' >> $testroot/stdout.expected echo '-nonexistent' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo -n 'blob + ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l zeta.link) | cut -d' ' -f 1 \ @@ -2832,8 +2841,8 @@ EOF (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_commit" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'alpha.link@ -> alpha$' | \ cut -d' ' -f 1 >> $testroot/stdout.expected @@ -2847,6 +2856,7 @@ EOF echo '\ No newline at end of file' >> $testroot/stdout.expected echo '+beta' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo -n 'blob + ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l dotgotfoo.link) | cut -d' ' -f 1 \ @@ -2855,6 +2865,7 @@ EOF echo '+++ dotgotfoo.link' >> $testroot/stdout.expected echo '@@ -0,0 +1 @@' >> $testroot/stdout.expected echo '+this is regular file foo' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'epsilon.link@ -> epsilon$' | \ cut -d' ' -f 1 >> $testroot/stdout.expected @@ -2868,6 +2879,7 @@ EOF echo '\ No newline at end of file' >> $testroot/stdout.expected echo '+gamma' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'nonexistent.link@ -> nonexistent$' | \ cut -d' ' -f 1 >> $testroot/stdout.expected @@ -2877,6 +2889,7 @@ EOF echo '@@ -1 +0,0 @@' >> $testroot/stdout.expected echo '-nonexistent' >> $testroot/stdout.expected echo '\ No newline at end of file' >> $testroot/stdout.expected + echo "commit - $head_commit" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo -n 'blob + ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l zeta.link) | cut -d' ' -f 1 \ blob - 6bb970784b5cf067c17b918409a825a1287df1e1 blob + 1f9c74b96419ec6eda2b937ea04a8b7cae1c8e5f --- regress/cmdline/unstage.sh +++ regress/cmdline/unstage.sh @@ -409,8 +409,8 @@ EOF (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -445,8 +445,8 @@ EOF (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l numbers) | cut -d' ' -f 1 | \ tr -d '\n' >> $testroot/stdout.expected @@ -554,8 +554,8 @@ EOF (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -590,8 +590,8 @@ EOF (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l numbers) | cut -d' ' -f 1 | \ tr -d '\n' >> $testroot/stdout.expected @@ -706,8 +706,8 @@ EOF (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -799,8 +799,8 @@ test_unstage_patch_added() { (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo 'blob - /dev/null' >> $testroot/stdout.expected echo 'file + epsilon/new (mode 644)' >> $testroot/stdout.expected echo "--- /dev/null" >> $testroot/stdout.expected @@ -867,8 +867,8 @@ test_unstage_patch_removed() { (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'beta$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected @@ -972,8 +972,8 @@ EOF (cd $testroot/wt && got diff > $testroot/stdout) echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected (cd $testroot/wt && got stage -l numbers) | cut -d' ' -f 1 | \ tr -d '\n' >> $testroot/stdout.expected @@ -998,8 +998,8 @@ EOF (cd $testroot/wt && got diff -s > $testroot/stdout) echo "diff -s $testroot/wt" > $testroot/stdout.expected - echo "commit - $commit_id" >> $testroot/stdout.expected echo "path + $testroot/wt (staged changes)" >> $testroot/stdout.expected + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i -c $commit_id \ | grep 'numbers$' | cut -d' ' -f 1 \ @@ -1026,6 +1026,7 @@ EOF -16 +c EOF + echo "commit - $commit_id" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'zzz$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected blob - 013d85e1d4cf6d156380290afdb9ab2e51598e63 blob + cd31d1db006846950774ef96be6c8beec4cc3f4e --- regress/cmdline/update.sh +++ regress/cmdline/update.sh @@ -1178,8 +1178,8 @@ test_update_conflict_wt_rm_vs_repo_edit() { # 'got diff' should show post-update contents of beta being deleted local head_rev=`git_show_head $testroot/repo` echo "diff $testroot/wt" > $testroot/stdout.expected - echo "commit - $head_rev" >> $testroot/stdout.expected echo "path + $testroot/wt" >> $testroot/stdout.expected + echo "commit - $head_rev" >> $testroot/stdout.expected echo -n 'blob - ' >> $testroot/stdout.expected got tree -r $testroot/repo -i | grep 'beta$' | cut -d' ' -f 1 \ >> $testroot/stdout.expected -- Mark Jamsek <https://bsdbox.org> GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68
stop got diff from lying in mixed-commit work trees