commit 9802c41ca727979975e9ee6fbd898dfec7f283c4 from: Omar Polo date: Tue Jun 21 16:52:34 2022 UTC got patch: use status G for merged files (and document it) Suggested by stsp@. This makes possible to tell if 'got patch' used a merge-base from the repository for the 3-way merge or did a simple search/replace operation. While here update the tests to look for the 'G' status and the manpage, which was also missing the documentation for the 'C' status in got patch. ok stsp@ commit - dbc68eedb1de26bf5a444ecad5150b0a243d422b commit + 9802c41ca727979975e9ee6fbd898dfec7f283c4 blob - 9d65d8aa6b3211dfb9e231199f0bc3e522f4dfa8 blob + 6e54669dd487e962e60aabbc77043a09b250bd99 --- got/got.1 +++ got/got.1 @@ -1333,6 +1333,8 @@ contains multiple patches, then attempt to apply each Show the status of each affected file, using the following status codes: .Bl -column XYZ description .It M Ta file was modified +.It G Ta file was merged using a merge-base found in the repository +.It C Ta file was merged and conflicts occurred during merge .It D Ta file was deleted .It A Ta file was added .It # Ta failed to patch the file blob - 1fc82c6604c60d1e3961f7d6670b26b781db97cc blob + 965f8606f5dc0febfa47fceeba356519258f1021 --- lib/patch.c +++ lib/patch.c @@ -777,6 +777,8 @@ apply_patch(int *overlapcnt, struct got_worktree *work unlink(newpath); } else if (*overlapcnt != 0) err = report_progress(pa, old, new, GOT_STATUS_CONFLICT, NULL); + else if (do_merge) + err = report_progress(pa, old, new, GOT_STATUS_MERGE, NULL); else err = report_progress(pa, old, new, GOT_STATUS_MODIFY, NULL); blob - 5d79b58c66cb3e7160cfdb8ce13e13901219e70e blob + 9fb1dd39304f1cd716283dd5684a1162ee8f745c --- regress/cmdline/patch.sh +++ regress/cmdline/patch.sh @@ -1482,9 +1482,18 @@ test_patch_merge_simple() { fi (cd $testroot/wt && got patch $testroot/old.diff) \ - 2>&1 > /dev/null + > $testroot/stdout ret=$? if [ $ret -ne 0 ]; then + test_done $testroot $ret + return 1 + fi + + echo 'G numbers' > $testroot/stdout.expected + cmp -s $testroot/stdout $testroot/stdout.expected + ret=$? + if [ $ret -ne 0 ]; then + diff -u $testroot/stdout $testroot/stdout.expected test_done $testroot $ret return 1 fi @@ -1539,7 +1548,7 @@ test_patch_merge_conflict() { fi (cd $testroot/wt && got patch $testroot/old.diff) \ - >/dev/null 2>&1 + > $testroot/stdout 2>/dev/null ret=$? if [ $ret -eq 0 ]; then echo "got patch merged a diff that should conflict" >&2 @@ -1547,6 +1556,15 @@ test_patch_merge_conflict() { return 1 fi + echo 'C numbers' > $testroot/stdout.expected + cmp -s $testroot/stdout $testroot/stdout.expected + ret=$? + if [ $ret -ne 0 ]; then + diff -u $testroot/stdout $testroot/stdout.expected + test_done $testroot $ret + return 1 + fi + # XXX: prefixing every line with a tab otherwise got thinks # the file has conflicts in it. cat <<-EOF > $testroot/wt/numbers.expected