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

Re: [RFC/PATCH 0/7] some sequencer loose ends (Re: Fix revert --abort on Windows)

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Dec 11, 2011, 19:58 UTC
Message-ID
<20111211195836.GA25482@elie.hsd1.il.comcast.net>
In-Reply-To
<20111210124644.GA22035@elie.hsd1.il.comcast.net>
Jonathan Nieder wrote:
> Here are patches to address some UI warts
[... rambling cover letter snipped ...]
Let's try that again. :)

Current git has a somewhat odd behavior when cherry-picking multiple commits and running into a conflict in the _last_ commit of the series. Imagine the following sequence of operations:

 1. git cherry-pick simplething simplethingtwo complexthing
 2. CONFLICT.
 3. git cherry-pick --abort

It would be most consistent for the entire cherry-pick sequence to be rolled back, so the user can come up with some other sequence of commits to try. After all, that's what happens if a conflict is encountered applying simplethingtwo and the user asks to abort.

Instead, by the time complexthing is being applied, git has forgotten about the multi-pick sequence entirely. And the --abort does not even warn about this weird state --- it just cancels complexthing and leaves the earlier commits applied.

This is an edge case, but I think it's worth fixing. Patch 5/7 does so.

In the same vein, now imagine a different sequence of operations:
 1. git cherry-pick simplething complexthing morecommits...
 2. CONFLICT.
 3. git reset --merge
 4. git cherry-pick --continue

It would be sensible for this to remove the conflicted patch and go on with the remaining ones, right? But instead, "git reset" automagically removes the sequencer state, so you can't even use git cherry-pick --abort any more. Well, you can, if you say the magic words "mv .git/sequencer-old .git/sequencer", but nobody actually tells you that.

How did we ever let this in? "git reset" already has well defined semantics that have nothing to do with this. Patches 6/7 and 7/7 would help us forget this UI mistake (and I believe it was a mistake) ever happened.

Patch 2 makes cherry-pick --continue behave a little more like rebase --continue, for people who like to learn by analogy.

Patches 1 and 3 are just code style things.

Patch 4 is the basic building block that makes patch 5 possible: it teaches "git cherry-pick" to treat picks of a single commit named on the command line differently from the more complex multi-picks requested with general rev-list arguments. Single-pick is all that git cherry-pick originally supported, and in some details it has to differ from multi-pick (for example, "git commit" after resolving conflicts after a conflicted single-pick needs to be enough to clear the state). As a side-benefit, we get the ability to do a single-pick in the middle of a multi-pick, which is kind of cool and handy from time to time.

I am interested in sanity checking of the patches and testing. It would be pleasant to find comments like "yeah, that looks good" or "what are you thinking?! I ran into the following bug" arriving in my inbox.

Incidentally, I'd like to apologize about not protesting more about these things (and even having suggested some of them) as they happened. Instead of exercising careful oversight over the sanity of patches that passed through my mailbox, I had some strange idea of using the Socratic method to help others learn to explore the design space and sanity-check findings themselves...

Thanks for reading.

Ciao, Jonathan

Previous: Ramkumar RamachandraNext: Junio C Hamano
Message 42 of 52 in “cherry-pick/revert error messages”
  1. Jonathan NiederNov 20, 2011
  2. Ramkumar RamachandraNov 20, 2011
  3. 0/3 Re: cherry-pick/revert error messagesJonathan Nieder, Nov 20, 2011
  4. 1/3 revert: rename --reset option to --quitJonathan Nieder, Nov 20, 2011
  5. Junio C HamanoNov 21, 2011
  6. Jakub NarebskiNov 21, 2011
  7. Jonathan NiederNov 21, 2011
  8. 2/3 revert: rearrange pick_revisions() for clarityJonathan Nieder, Nov 20, 2011
  9. 3/3 revert: improve error message for cherry-pick during cherry-pickJonathan Nieder, Nov 20, 2011
  10. 0/3 Re: cherry-pick/revert error messagesJonathan Nieder, Nov 22, 2011
  11. 1/3 revert: rename --reset option to --quitJonathan Nieder, Nov 22, 2011
  12. 2/3 revert: rearrange pick_revisions() for clarityJonathan Nieder, Nov 22, 2011
  13. 3/3 revert: improve error message for cherry-pick during cherry-pickJonathan Nieder, Nov 22, 2011
  14. 4/3 revert: write REVERT_HEAD pseudoref during conflicted revertJonathan Nieder, Nov 22, 2011
  15. Thiago FarinaNov 22, 2011
  16. Ramkumar RamachandraDec 1, 2011
  17. 5/3 revert: introduce --abort to cancel a failed cherry-pickJonathan Nieder, Nov 22, 2011
  18. Junio C HamanoNov 23, 2011
  19. Jonathan NiederNov 23, 2011
  20. Fix revert --abort on WindowsJohannes Sixt, Nov 23, 2011
  21. Jonathan NiederNov 23, 2011
  22. Johannes SixtNov 23, 2011
  23. 0/7 some sequencer loose ends (Re: Fix revert --abort on Windows)Jonathan Nieder, Dec 10, 2011
  24. 1/7 revert: give --continue handling its own functionJonathan Nieder, Dec 10, 2011
  25. Ramkumar RamachandraDec 14, 2011
  26. 2/7 revert: allow cherry-pick --continue to commit before resumingJonathan Nieder, Dec 10, 2011
  27. Ramkumar RamachandraDec 14, 2011
  28. Jonathan NiederDec 14, 2011
  29. 3/7 revert: pass around rev-list args in already-parsed formJonathan Nieder, Dec 10, 2011
  30. Ramkumar RamachandraDec 14, 2011
  31. 4/7 revert: allow single-pick in the middle of cherry-pick sequenceJonathan Nieder, Dec 10, 2011
  32. Ramkumar RamachandraDec 14, 2011
  33. Jonathan NiederDec 14, 2011
  34. Ævar Arnfjörð BjarmasonApr 5, 2012
  35. Jonathan NiederApr 5, 2012
  36. 5/7 revert: do not remove state until sequence is finishedJonathan Nieder, Dec 10, 2011
  37. Ramkumar RamachandraDec 14, 2011
  38. 6/7 Revert "reset: Make reset remove the sequencer state"Jonathan Nieder, Dec 10, 2011
  39. Ramkumar RamachandraDec 14, 2011
  40. 7/7 revert: stop creating and removing sequencer-old directoryJonathan Nieder, Dec 10, 2011
  41. Ramkumar RamachandraDec 14, 2011
  42. Jonathan NiederDec 11, 2011
  43. Junio C HamanoDec 12, 2011
  44. Junio C HamanoDec 12, 2011
  45. Jonathan NiederDec 14, 2011
  46. Alex RiesenNov 23, 2011
  47. Junio C HamanoNov 30, 2011
  48. 6/3 revert: remove --reset compatibility optionJonathan Nieder, Nov 22, 2011
  49. Junio C HamanoNov 22, 2011
  50. Jonathan NiederNov 22, 2011
  51. Junio C HamanoNov 22, 2011
  52. Jonathan NiederNov 22, 2011

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.