diff options
author | Junio C Hamano <gitster@pobox.com> | 2023-05-17 16:00:20 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-05-17 16:00:20 -0700 |
commit | 41680d49d14b1370a8c9def6986855c23f680c2c (patch) | |
tree | 4ef2a23ded2d700dbe262dbdf8cfd79d5cedaaa7 | |
parent | 6cd689c390362238985dbecbd63a0698c2b7a317 (diff) | |
parent | 8e9a6aa3f7d6ee578842da3e7576f7908bcc6351 (diff) | |
download | git-41680d49d14b1370a8c9def6986855c23f680c2c.tar.gz |
Merge branch 'ob/revert-of-revert' into seen
Instead of "Revert "Revert "original"", give "Reapply "original""
as the title for a revert of a revert.
* ob/revert-of-revert:
sequencer: beautify subject of reverts of reverts
-rw-r--r-- | Documentation/git-revert.txt | 6 | ||||
-rw-r--r-- | sequencer.c | 14 | ||||
-rwxr-xr-x | t/t3515-revert-subjects.sh | 32 |
3 files changed, 52 insertions, 0 deletions
diff --git a/Documentation/git-revert.txt b/Documentation/git-revert.txt index d2e10d3dce..e8fa513607 100644 --- a/Documentation/git-revert.txt +++ b/Documentation/git-revert.txt @@ -31,6 +31,12 @@ both will discard uncommitted changes in your working directory. See "Reset, restore and revert" in linkgit:git[1] for the differences between the three commands. +The command generates the subject 'Revert "<title>"' for the resulting +commit, assuming the original commit's subject is '<title>'. Reverting +such a reversion commit in turn yields the subject 'Reapply "<title>"'. +These can of course be modified in the editor when the reason for +reverting is described. + OPTIONS ------- <commit>...:: diff --git a/sequencer.c b/sequencer.c index 83d53a7bf6..82b34942bf 100644 --- a/sequencer.c +++ b/sequencer.c @@ -2253,6 +2253,8 @@ static int do_pick_commit(struct repository *r, */ if (command == TODO_REVERT) { + const char *orig_subject; + base = commit; base_label = msg.label; next = parent; @@ -2260,6 +2262,18 @@ static int do_pick_commit(struct repository *r, if (opts->commit_use_reference) { strbuf_addstr(&msgbuf, "# *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***"); + } else if (skip_prefix(msg.subject, "Revert \"", &orig_subject)) { + if (skip_prefix(orig_subject, "Revert \"", &orig_subject)) { + /* + * This prevents the generation of somewhat unintuitive (even if + * not incorrect) 'Reapply "Revert "' titles from legacy double + * reverts. Fixing up deeper recursions is left to the user. + */ + strbuf_addstr(&msgbuf, "Revert \"Reapply \""); + } else { + strbuf_addstr(&msgbuf, "Reapply \""); + } + strbuf_addstr(&msgbuf, orig_subject); } else { strbuf_addstr(&msgbuf, "Revert \""); strbuf_addstr(&msgbuf, msg.subject); diff --git a/t/t3515-revert-subjects.sh b/t/t3515-revert-subjects.sh new file mode 100755 index 0000000000..4c231b48a5 --- /dev/null +++ b/t/t3515-revert-subjects.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +test_description='git revert' + +. ./test-lib.sh + +test_expect_success 'fresh reverts' ' + test_commit --no-tag A file1 && + test_commit --no-tag B file1 && + git revert --no-edit HEAD && + echo "Revert \"B\"" > expect && + git log -1 --pretty=%s > actual && + test_cmp expect actual && + git revert --no-edit HEAD && + echo "Reapply \"B\"" > expect && + git log -1 --pretty=%s > actual && + test_cmp expect actual && + git revert --no-edit HEAD && + echo "Revert \"Reapply \"B\"\"" > expect && + git log -1 --pretty=%s > actual && + test_cmp expect actual +' + +test_expect_success 'legacy double revert' ' + test_commit --no-tag "Revert \"Revert \"B\"\"" file1 && + git revert --no-edit HEAD && + echo "Revert \"Reapply \"B\"\"" > expect && + git log -1 --pretty=%s > actual && + test_cmp expect actual +' + +test_done |