git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re* [PATCH v3 2/2] doc: revert: add discussion

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 11, 2023, 17:44 UTC
Message-ID
<xmqq5y5ltqwd.fsf_-_@gitster.g>
In-Reply-To
<xmqqsf8ptsqf.fsf@gitster.g>
Junio C Hamano <gitster@pobox.com> writes:
Show 16 quoted lines
> Linus Arver <linusa@google.com> writes:
>
>> Oswald Buddenhagen <oswald.buddenhagen@gmx.de> writes:
>>
>>> while thinking about what to write, i came up with an idea for another
>>> improvement: with (implicit) --edit, the template message would end up
>>> being:
>>>
>>>  This reverts commit <sha1>,
>>>  because <PUT REASON HERE>.
>>
>> This sounds great to me.
>
> Oh, absolutely.  I rarely do a revert myself (other than reverting a
> premature merge out of 'next'), but giving a better instruction in
> the commit log editor buffer as template is a very good idea.

It might be just the matter of doing something like the attached patch on top of Oswald's, reusing the existing code to instruct the user to describe the reversion.

------- >8 ------------- >8 ------------- >8 ------------- >8 -------
Subject: [PATCH 3/2] revert: force explaining overly complex revert chain

Once we revert reverts of revert and reach "Reapply "Reapply "..."", it becomes too unweirdly to read a reversion of such a comit.

We instruct the user to explain why the reversion is done in their own words when using the revert.reference mode, and the instruction applies equally for such an overly complex revert chain. The rationale for such a sequence of events should be recorded to help future developers.

Building on top of the recent Oswald's work to turn "revert revert" into "reapply", let's turn the reference mode automatically on in such a case.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 * I left the reference to the second parent to honor the command
   line option and configuration variable even when this new
   mechanism kicks in and this is very much deliberate.  As a commit
   that is a revert (or reapply) should be single parent (because a
   revert of a merge is a single parent commit), the choice does not
   make any difference in practice.
 sequencer.c                   | 16 +++++++++++-----
 t/t3501-revert-cherry-pick.sh | 11 ++++++++++-
 2 files changed, 21 insertions(+), 6 deletions(-)
diff --git c/sequencer.c w/sequencer.c
index 7dc13fdcca..43bb558518 100644
--- c/sequencer.c
+++ w/sequencer.c
@@ -2130,10 +2130,10 @@ static int should_edit(struct replay_opts *opts) {
 	return opts->edit;
 }
 
-static void refer_to_commit(struct replay_opts *opts,
+static void refer_to_commit(int use_reference,
 			    struct strbuf *msgbuf, struct commit *commit)
 {
-	if (opts->commit_use_reference) {
+	if (use_reference) {
 		struct pretty_print_context ctx = {
 			.abbrev = DEFAULT_ABBREV,
 			.date_mode.type = DATE_SHORT,
@@ -2250,12 +2250,18 @@ static int do_pick_commit(struct repository *r,
 
 	if (command == TODO_REVERT) {
 		const char *orig_subject;
+		int use_reference = opts->commit_use_reference;
 
 		base = commit;
 		base_label = msg.label;
 		next = parent;
 		next_label = msg.parent_label;
-		if (opts->commit_use_reference) {
+
+		if (starts_with(msg.subject, "Reapply \"Reapply \""))
+			/* fifth time is too many - force reference format*/
+			use_reference = 1;
+
+		if (use_reference) {
 			strbuf_addstr(&msgbuf,
 				"# *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***");
 		} else if (skip_prefix(msg.subject, "Revert \"", &orig_subject) &&
@@ -2273,11 +2279,11 @@ static int do_pick_commit(struct repository *r,
 			strbuf_addstr(&msgbuf, "\"");
 		}
 		strbuf_addstr(&msgbuf, "\n\nThis reverts commit ");
-		refer_to_commit(opts, &msgbuf, commit);
+		refer_to_commit(use_reference, &msgbuf, commit);
 
 		if (commit->parents && commit->parents->next) {
 			strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
-			refer_to_commit(opts, &msgbuf, parent);
+			refer_to_commit(opts->commit_use_reference, &msgbuf, parent);
 		}
 		strbuf_addstr(&msgbuf, ".\n");
 	} else {
diff --git c/t/t3501-revert-cherry-pick.sh w/t/t3501-revert-cherry-pick.sh
index 7011e3a421..7a8715d3f4 100755
--- c/t/t3501-revert-cherry-pick.sh
+++ w/t/t3501-revert-cherry-pick.sh
@@ -190,7 +190,16 @@ test_expect_success 'title of fresh reverts' '
 	git revert --no-edit HEAD &&
 	echo "Revert \"Reapply \"B\"\"" >expect &&
 	git log -1 --pretty=%s >actual &&
-	test_cmp expect actual
+	test_cmp expect actual &&
+	git revert --no-edit HEAD &&
+	echo "Reapply \"Reapply \"B\"\"" >expect &&
+	git log -1 --pretty=%s >actual &&
+	test_cmp expect actual &&
+
+	# Give the stronger instruction for unusually complex case
+	git revert --no-edit HEAD &&
+	git log -1 --pretty=%s >actual &&
+	grep -F -e "# *** SAY WHY WE ARE REVERTING" actual
 '
 
 test_expect_success 'title of legacy double revert' '
Previous: Junio C HamanoNext: Junio C Hamano
Message 36 of 53 in “sequencer: beautify subject of reverts of reverts”
  1. sequencer: beautify subject of reverts of revertsOswald Buddenhagen, Apr 28, 2023
  2. Junio C HamanoApr 28, 2023
  3. Oswald BuddenhagenApr 28, 2023
  4. Junio C HamanoMay 1, 2023
  5. Oswald BuddenhagenMay 1, 2023
  6. Junio C HamanoMay 1, 2023
  7. Junio C HamanoMay 5, 2023
  8. Phillip WoodMay 17, 2023
  9. Oswald BuddenhagenMay 17, 2023
  10. Phillip WoodMay 17, 2023
  11. Oswald BuddenhagenMay 17, 2023
  12. Phillip WoodMay 18, 2023
  13. Junio C HamanoMay 18, 2023
  14. Linus ArverJul 28, 2023
  15. Oswald BuddenhagenJul 28, 2023
  16. Junio C HamanoJul 28, 2023
  17. Oswald BuddenhagenJul 28, 2023
  18. Junio C HamanoJul 28, 2023
  19. Oswald BuddenhagenJul 28, 2023
  20. Linus ArverJul 28, 2023
  21. 1/2 sequencer: beautify subject of reverts of revertsOswald Buddenhagen, Aug 9, 2023
  22. 2/2 doc: revert: add discussionOswald Buddenhagen, Aug 9, 2023
  23. Linus ArverAug 10, 2023
  24. Linus ArverAug 10, 2023
  25. Oswald BuddenhagenAug 11, 2023
  26. Linus ArverAug 11, 2023
  27. Oswald BuddenhagenAug 12, 2023
  28. Linus ArverSep 7, 2023
  29. Phillip WoodAug 11, 2023
  30. Oswald BuddenhagenAug 12, 2023
  31. Junio C HamanoAug 13, 2023
  32. Oswald BuddenhagenAug 14, 2023
  33. Phillip WoodAug 11, 2023
  34. Junio C HamanoAug 11, 2023
  35. Junio C HamanoAug 11, 2023
  36. Re* [PATCH v3 2/2] doc: revert: add discussionJunio C Hamano, Aug 11, 2023
  37. Junio C HamanoAug 11, 2023
  38. rsbecker@nexbridge.comAug 11, 2023
  39. Eric SunshineAug 11, 2023
  40. Oswald BuddenhagenAug 11, 2023
  41. Junio C HamanoAug 11, 2023
  42. Phillip WoodAug 11, 2023
  43. Junio C HamanoAug 11, 2023
  44. Oswald BuddenhagenAug 11, 2023
  45. 1/2 sequencer: beautify subject of reverts of revertsOswald Buddenhagen, Aug 21, 2023
  46. 2/2 git-revert.txt: add discussionOswald Buddenhagen, Aug 21, 2023
  47. Junio C HamanoAug 21, 2023
  48. Taylor BlauAug 23, 2023
  49. Junio C HamanoAug 23, 2023
  50. Oswald BuddenhagenAug 24, 2023
  51. sequencer: beautify subject of reverts of revertsOswald Buddenhagen, Sep 2, 2023
  52. Junio C HamanoSep 2, 2023
  53. Kristoffer HaugsbakkSep 11, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.