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

Re: Git garden shears, was Re: [PATCH 13/22] sequencer: remember the onelines when parsing the todo file

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Sep 25, 2016, 18:16 UTC
Message-ID
<alpine.DEB.2.20.1609251950300.129229@virtualbox>
In-Reply-To
<f7fe3f15-664e-61a5-6101-30ed4946c107@gmail.com>
Hi Kuba,
On Wed, 21 Sep 2016, Jakub Narębski wrote:
Show 42 quoted lines
> W dniu 11.09.2016 o 10:33, Johannes Schindelin napisał: 
> > On Fri, 9 Sep 2016, Jakub Narębski wrote:
> [...]
> 
> >> When preserving merges, there are (as far as I understand it), two
> >> problems:
> >>  - what it means to preserve changes (which change to pick,
> >>    that is what is the mainline changes rebase is re-applying)
> >>  - what are parents of the merge commit (at least one parent
> >>    would be usually rewritten)
> >>
> >> Maybe the internal (and perhaps also user-visible) representation
> >> of merge in instruction sheet could use the notation of filter-branch,
> >> that is 'map(<sha-1>)'... it could also imply the mainline.
> >>
> >> That is the instruction in the internal instruction sheet could
> >> look like this:
> >>
> >>   merge -m 1 map(2fd4e1c6...) da39a3ee... \t Merge 'foo' into master  
> >>
> >>
> >> Note that it has nothing to do with this series!
> > 
> > Right. But I did solve that already. In the Git garden shears [*1*]
> > (essentially my New And Improved attempt at recreating branch structures
> > while rebasing), I generate and process scripts like this:
> > 
> > 	mark onto
> > 
> > 	# Branch: super-cool-feature
> > 	rewind onto
> > 	pick 00001 feature
> > 	pick 00002 documentation
> > 	mark super-cool-feature
> > 
> > 	# Branch: typo-fix
> > 	rewind onto
> > 	pick 0000a fix a tyop
> 
> There probably should be there
> 
>  	mark typo-fix
Correct. Sorry for the omission.
Show 12 quoted lines
> > 	rewind onto
> > 	merge -C cafebabe super-cool-feature
> > 	merge -C babecafe typo-fix
> > 
> > 	cleanup super-cool-feature typo-fix
> > 
> > Of course this will change a little, still, once I get around to implement
> > this on top of the rebase--helper.
> 
> Do I understand it correctly that it is user-visible instruction sheet, and
> not the internal instruction sheet for sequencer?  This looks very nice
> and is well readable.
It is intended as that.

Currently I need a little trickery to make this work, as rebase -i does not understand rewind nor merge. The trick is to re-use the shears.sh script as editor that then populates the edit script, calls the real editor, and then installs a temporary alias that gets called for all custom commands via exec (turning e.g. "rewind abc" into "exec git .r rewind abc").

The temporary alias point back to the shears script, too, of course.

In the end, I hope to teach the sequencer a variant of this dialect, as well as the trick to generate such edit scripts.

> I guess that it needs to be pre-populated by Git based on topology of the
> branch being rebased.

Yes. The shears.sh script is in charge of that, and it has to perform a couple of Git calls to do so.

Show 19 quoted lines
> As I see, there are three basic topologies of non-linear branch to be
> rebased; all else is combination of thereof, or derivative:
> 
> 1. Merge commit without branching point, that is we need to go
>    from the following situation
> 
>    *---*---*---#---o---o---o        <-- old base
>                \\
>                 \\=a===b===M===c    <-- branch being rebased
>                           /
>          ...---x---x---x-/          <-- side branch
> 
>   to the following:
> 
>    *---*---*---#---o---o---o        
>                             \
>                              \-a'--b'--M'--c' 
>                                       /
>          ...---x---x---x-------------/          
In other words: rebasing a merge commit merging non-rebased commits.

This is not yet supported by the shears script, as it would require logic that is not only slow in shell script, but also convoluted. IOW this feature waits for the sequencer to know how to run regular rebase -i already.

> I think this case is the only one supported by `--preserve-merges`,
> but I may be mistaken - I never had the need to use this feature IRL.

No, -p would handle merges of non-rebased commits as well as merges of to-be-rebased commits.

Show 17 quoted lines
> 2. Branching point without accompanying merge commit, or in other words
>    rebasing many branches tied together; a shrub if you will.  That is,
>    we want to go from the following situation:
> 
>    *---*---*---#---o---o---o           <-- old base
>                \
>                 \--a---b---c           <-- branch being rebased
>                         \
>                          \-1           <-- dependent branch
> 
>    to the following one:
> 
>    *---*---*---#---o---o---o
>                             \
>                              \--a'--b'--c'
>                                      \
>                                       \-1'

This is outside the scope of rebase -i (and of the shears), as you are talking about *parallel* rebases. I don't do that, nor does rebase -i, rebase -p nor the shears.

> I don't think Git supports something like that out of the box, but it
> is not hard to create something like that "by hand". It is not much
> of a problem... unless you forget to rebase the second dependent branch.

The safer thing to do, of course, is to merge all those tips back into the branch you then rebase in one go.

Show 22 quoted lines
> 3. Branching point with merge point, that is subbranch created and
>    merged - an "eye" (it is not a loop in DAG):
> 
>    *---*---*---#---o---o---o             <-- old base
>                \
>                 \--a---b---c---M---d     <-- branch being rebased
>                     \         /
>                      \-1---2-/         [ <-- possibly a branch ]
> 
>    All edges are directed edges, with arrows pointing from right to
>    left; that is  *---*  is really  *<---*
> 
>    The expected result is:
> 
>    *---*---*---#---o---o---o
>                             \
>                              \--a'--b'--c'--M'--d'
>                                  \         /
>                                   \-1'--2'/
> 
> I guess that is the main purpose of your git-garden-shears script,
> isn't it?
Yes.
Show 11 quoted lines
> > For example, I am not so hot about the "merge -C ..." syntax. I'll
> > probably split that into a "remerge <SHA-1> <mark>" and a new "merge
> > <mark>" command (the latter asking interactively for the merge commit
> > message).
> 
> There is also an additional complication in that merge commit message
> may be *partially* automatically generated. First there is the subject
> generated by 'git merge' ("Merge branch 'foo'") or 'git pull <URL>'.
> It might have been translated, or extended.  Second there is a place
> for branch cover letter. Third, subject to merge.log / merge.summary
> there is a shortlog.

True. The current shears will simply use the original commit message verbatim. And I think it would be wise to keep this behaviour until the sequencer knows how to recreate merges.

Once that happens, I cordially invite you to implement any merge commit message munging mode your heart desires, on top of the straight port of the shears.

> From those shortlog should be surely updated to correspond to the
> post-rebase state.  The first line could be used to pre-populate
> mark lines, but during merge it should be, I think, updated to the
> new name of internal branch if it was changed.

Surely. Or not so surely. Too unsurely, for sure, to be discussed without a dedicated patch series submitted by a dedicated person requiring that feature.

> As to 'merge -C <sha1> <marker>' vs 'remerge <sha1> <marker>',
> I don't have specified opinion.  It would be nice to have one
> character shortcuts for insn sheet instructions, to which
> 'm -C <sha1> <marker>' is more amendable... 

I am pretty certain that you will find yourself disagreeing with that statement once you used the shears for a while.

I use it for over a year now, and I *never* had to type any "merge -C" command (i.e. the command I would call "remerge"). The reason is that you simply move those generated lines, and that there is no scenario I encountered where you will want to insert a merge manually: you simply merge all you want *before* or *after* rebasing.

As to "merge <marker>": those are quite common, in particular when splitting patch series into parts.

Show 5 quoted lines
> > No :1 or some such. That's machine readable. But it's utter nonsense for
> > user-facing UIs.
> 
> Of course. It's all right for machine-facing instructions, like the
> 'todo' file for the sequencer, or for git-fast-import stream...

The 'todo' file for the sequencer *should* be human-friendly. There is no reason not to make it so, in particular when you can simply reuse the refs machinery for marks, and when it facilitates debugging (and I can testify to that: it does, oh yeah, it does...).

Ciao, Dscho

Previous: Jakub NarębskiNext: Jakub Narębski
Message 71 of 352 in “Prepare the sequencer for the upcoming rebase -i patches”
  1. 00/22 Prepare the sequencer for the upcoming rebase -i patchesJohannes Schindelin, Aug 29, 2016
  2. 02/22 sequencer: use memoized sequencer directory pathJohannes Schindelin, Aug 29, 2016
  3. Jakub NarębskiAug 29, 2016
  4. Johannes SchindelinAug 29, 2016
  5. 01/22 sequencer: use static initializers for replay_optsJohannes Schindelin, Aug 29, 2016
  6. Dennis KaarsemakerAug 29, 2016
  7. Johannes SchindelinAug 29, 2016
  8. Jakub NarębskiAug 29, 2016
  9. Johannes SchindelinAug 29, 2016
  10. 03/22 sequencer: avoid unnecessary indirectionJohannes Schindelin, Aug 29, 2016
  11. Jakub NarębskiAug 29, 2016
  12. Johannes SchindelinAug 29, 2016
  13. 04/22 sequencer: future-proof remove_sequencer_state()Johannes Schindelin, Aug 29, 2016
  14. Dennis KaarsemakerAug 29, 2016
  15. Johannes SchindelinAug 29, 2016
  16. Johannes SchindelinAug 29, 2016
  17. 05/22 sequencer: allow the sequencer to take custody of malloc()ed dataJohannes Schindelin, Aug 29, 2016
  18. Jakub NarębskiAug 29, 2016
  19. Johannes SixtAug 30, 2016
  20. Johannes SchindelinAug 30, 2016
  21. Johannes SchindelinAug 30, 2016
  22. Jakub NarębskiAug 30, 2016
  23. Junio C HamanoAug 30, 2016
  24. Johannes SchindelinAug 31, 2016
  25. 06/22 sequencer: release memory that was allocated when reading optionsJohannes Schindelin, Aug 29, 2016
  26. Jakub NarębskiAug 30, 2016
  27. Johannes SchindelinAug 30, 2016
  28. Johannes SixtAug 30, 2016
  29. Junio C HamanoAug 30, 2016
  30. Jakub NarębskiAug 30, 2016
  31. Junio C HamanoAug 30, 2016
  32. Johannes SchindelinAug 31, 2016
  33. 07/22 sequencer: future-proof read_populate_todo()Johannes Schindelin, Aug 29, 2016
  34. Jakub NarębskiAug 30, 2016
  35. Johannes SchindelinAug 30, 2016
  36. 08/22 sequencer: remove overzealous assumptionJohannes Schindelin, Aug 29, 2016
  37. Jakub NarębskiAug 31, 2016
  38. Johannes SchindelinAug 31, 2016
  39. Jakub NarębskiAug 31, 2016
  40. Johannes SchindelinSep 1, 2016
  41. Jakub NarębskiSep 1, 2016
  42. Junio C HamanoAug 31, 2016
  43. Johannes SchindelinSep 1, 2016
  44. 09/22 sequencer: completely revamp the "todo" script parsingJohannes Schindelin, Aug 29, 2016
  45. Jakub NarębskiAug 31, 2016
  46. Stefan BellerAug 31, 2016
  47. Johannes SchindelinSep 1, 2016
  48. Junio C HamanoSep 1, 2016
  49. Johannes SchindelinSep 1, 2016
  50. Jakub NarębskiSep 1, 2016
  51. Johannes SchindelinSep 9, 2016
  52. 10/22 sequencer: avoid completely different messages for different actionsJohannes Schindelin, Aug 29, 2016
  53. Jakub NarębskiAug 31, 2016
  54. Johannes SchindelinSep 1, 2016
  55. Jakub NarębskiSep 1, 2016
  56. Johannes SchindelinSep 9, 2016
  57. 13/22 sequencer: remember the onelines when parsing the todo fileJohannes Schindelin, Aug 29, 2016
  58. Jakub NarębskiAug 31, 2016
  59. Junio C HamanoAug 31, 2016
  60. Jakub NarębskiAug 31, 2016
  61. Junio C HamanoAug 31, 2016
  62. Johannes SchindelinSep 1, 2016
  63. Johannes SchindelinSep 1, 2016
  64. Jakub NarębskiSep 1, 2016
  65. Johannes SchindelinSep 1, 2016
  66. Junio C HamanoSep 1, 2016
  67. Johannes SchindelinSep 9, 2016
  68. Jakub NarębskiSep 9, 2016
  69. Git garden shears, was Re: [PATCH 13/22] sequencer: remember the onelines when parsing the todo fileJohannes Schindelin, Sep 11, 2016
  70. Jakub NarębskiSep 21, 2016
  71. Johannes SchindelinSep 25, 2016
  72. Jakub NarębskiSep 1, 2016
  73. Junio C HamanoSep 1, 2016
  74. Johannes SchindelinSep 9, 2016
  75. Johannes SchindelinSep 1, 2016
  76. 14/22 sequencer: prepare for rebase -i's commit functionalityJohannes Schindelin, Aug 29, 2016
  77. Junio C HamanoAug 29, 2016
  78. Johannes SchindelinAug 30, 2016
  79. Junio C HamanoAug 30, 2016
  80. Johannes SchindelinAug 30, 2016
  81. Junio C HamanoAug 30, 2016
  82. Johannes SchindelinAug 31, 2016
  83. 16/22 sequencer: prepare for rebase -i's GPG settingsJohannes Schindelin, Aug 29, 2016
  84. Jakub NarębskiAug 31, 2016
  85. Junio C HamanoAug 31, 2016
  86. Jakub NarębskiAug 31, 2016
  87. Junio C HamanoAug 31, 2016
  88. Johannes SchindelinSep 1, 2016
  89. Johannes SchindelinSep 1, 2016
  90. Johannes SchindelinSep 1, 2016
  91. Jakub NarębskiSep 1, 2016
  92. 15/22 sequencer: introduce a helper to read files written by scriptsJohannes Schindelin, Aug 29, 2016
  93. Dennis KaarsemakerAug 29, 2016
  94. Johannes SchindelinAug 29, 2016
  95. 17/22 sequencer: allow editing the commit message on a case-by-case basisJohannes Schindelin, Aug 29, 2016
  96. Jakub NarębskiAug 31, 2016
  97. Johannes SchindelinSep 1, 2016
  98. 18/22 sequencer: support amending commitsJohannes Schindelin, Aug 29, 2016
  99. Jakub NarębskiAug 31, 2016
  100. Johannes SchindelinSep 1, 2016
  101. 19/22 sequencer: support cleaning up commit messagesJohannes Schindelin, Aug 29, 2016
  102. Jakub NarębskiSep 1, 2016
  103. Johannes SchindelinSep 1, 2016
  104. Jakub NarębskiSep 1, 2016
  105. 20/22 sequencer: remember do_recursive_merge()'s return valueJohannes Schindelin, Aug 29, 2016
  106. Dennis KaarsemakerAug 29, 2016
  107. Johannes SchindelinAug 29, 2016
  108. Jakub NarębskiAug 29, 2016
  109. Junio C HamanoAug 29, 2016
  110. 12/22 sequencer: refactor the code to obtain a short commit nameJohannes Schindelin, Aug 29, 2016
  111. Dennis KaarsemakerAug 29, 2016
  112. Johannes SchindelinAug 29, 2016
  113. 22/22 sequencer: refactor write_message()Johannes Schindelin, Aug 29, 2016
  114. Jakub NarębskiSep 1, 2016
  115. Johannes SchindelinSep 1, 2016
  116. Jakub NarębskiSep 1, 2016
  117. Johannes SchindelinSep 9, 2016
  118. Jakub NarębskiSep 9, 2016
  119. Johannes SchindelinSep 11, 2016
  120. 21/22 sequencer: left-trim the lines read from the scriptJohannes Schindelin, Aug 29, 2016
  121. Jakub NarębskiSep 1, 2016
  122. Johannes SchindelinSep 1, 2016
  123. Junio C HamanoSep 1, 2016
  124. Johannes SchindelinSep 9, 2016
  125. Jakub NarębskiSep 1, 2016
  126. Johannes SchindelinSep 9, 2016
  127. 11/22 sequencer: get rid of the subcommand fieldJohannes Schindelin, Aug 29, 2016
  128. Jakub NarębskiAug 31, 2016
  129. Johannes SchindelinSep 1, 2016
  130. Dennis KaarsemakerAug 29, 2016
  131. Johannes SchindelinAug 29, 2016
  132. Jakub NarębskiSep 2, 2016
  133. Johannes SchindelinSep 2, 2016
  134. 00/25 Prepare the sequencer for the upcoming rebase -i patchesJohannes Schindelin, Sep 11, 2016
  135. 01/25 sequencer: use static initializers for replay_optsJohannes Schindelin, Sep 11, 2016
  136. Junio C HamanoSep 12, 2016
  137. 02/25 sequencer: use memoized sequencer directory pathJohannes Schindelin, Sep 11, 2016
  138. Junio C HamanoSep 12, 2016
  139. 03/25 sequencer: avoid unnecessary indirectionJohannes Schindelin, Sep 11, 2016
  140. Junio C HamanoSep 12, 2016
  141. 05/25 sequencer: allow the sequencer to take custody of malloc()ed dataJohannes Schindelin, Sep 11, 2016
  142. Junio C HamanoSep 12, 2016
  143. Johannes SchindelinOct 5, 2016
  144. Junio C HamanoOct 6, 2016
  145. Jakub NarębskiOct 6, 2016
  146. Junio C HamanoOct 6, 2016
  147. Johannes SchindelinOct 8, 2016
  148. 04/25 sequencer: future-proof remove_sequencer_state()Johannes Schindelin, Sep 11, 2016
  149. Junio C HamanoSep 12, 2016
  150. Johannes SchindelinOct 5, 2016
  151. Junio C HamanoOct 5, 2016
  152. 06/25 sequencer: release memory that was allocated when reading optionsJohannes Schindelin, Sep 11, 2016
  153. 07/25 sequencer: future-proof read_populate_todo()Johannes Schindelin, Sep 11, 2016
  154. 08/25 sequencer: completely revamp the "todo" script parsingJohannes Schindelin, Sep 11, 2016
  155. 09/25 sequencer: avoid completely different messages for different actionsJohannes Schindelin, Sep 11, 2016
  156. 10/25 sequencer: get rid of the subcommand fieldJohannes Schindelin, Sep 11, 2016
  157. Junio C HamanoSep 15, 2016
  158. 11/25 sequencer: refactor the code to obtain a short commit nameJohannes Schindelin, Sep 11, 2016
  159. 12/25 sequencer: remember the onelines when parsing the todo fileJohannes Schindelin, Sep 11, 2016
  160. 13/25 sequencer: prepare for rebase -i's commit functionalityJohannes Schindelin, Sep 11, 2016
  161. 14/25 sequencer: introduce a helper to read files written by scriptsJohannes Schindelin, Sep 11, 2016
  162. 15/25 sequencer: prepare for rebase -i's GPG settingsJohannes Schindelin, Sep 11, 2016
  163. 16/25 sequencer: allow editing the commit message on a case-by-case basisJohannes Schindelin, Sep 11, 2016
  164. 17/25 sequencer: support amending commitsJohannes Schindelin, Sep 11, 2016
  165. Junio C HamanoSep 12, 2016
  166. Johannes SchindelinOct 5, 2016
  167. 18/25 sequencer: support cleaning up commit messagesJohannes Schindelin, Sep 11, 2016
  168. Junio C HamanoSep 12, 2016
  169. 19/25 sequencer: remember do_recursive_merge()'s return valueJohannes Schindelin, Sep 11, 2016
  170. Junio C HamanoSep 12, 2016
  171. Johannes SchindelinOct 5, 2016
  172. Junio C HamanoOct 5, 2016
  173. 20/25 sequencer: left-trim lines read from the scriptJohannes Schindelin, Sep 11, 2016
  174. Junio C HamanoSep 11, 2016
  175. Johannes SchindelinSep 12, 2016
  176. Junio C HamanoSep 12, 2016
  177. Johannes SchindelinOct 6, 2016
  178. Johannes SixtOct 6, 2016
  179. Junio C HamanoOct 6, 2016
  180. Johannes SchindelinOct 9, 2016
  181. Johannes SixtOct 9, 2016
  182. 21/25 sequencer: refactor write_message()Johannes Schindelin, Sep 11, 2016
  183. Junio C HamanoSep 11, 2016
  184. Johannes SixtSep 12, 2016
  185. Junio C HamanoSep 15, 2016
  186. Johannes SchindelinOct 5, 2016
  187. 22/25 sequencer: remove overzealous assumption in rebase -i modeJohannes Schindelin, Sep 11, 2016
  188. Junio C HamanoSep 11, 2016
  189. 23/25 sequencer: mark action_name() for translationJohannes Schindelin, Sep 11, 2016
  190. 24/25 sequencer: quote filenames in error messagesJohannes Schindelin, Sep 11, 2016
  191. Junio C HamanoSep 11, 2016
  192. Johannes SchindelinOct 6, 2016
  193. 25/25 sequencer: remove bogus hint for translatorsJohannes Schindelin, Sep 11, 2016
  194. Junio C HamanoSep 11, 2016
  195. Johannes SchindelinOct 6, 2016
  196. 00/25 Prepare the sequencer for the upcoming rebase -i patchesJohannes Schindelin, Oct 10, 2016
  197. 01/25 sequencer: use static initializers for replay_optsJohannes Schindelin, Oct 10, 2016
  198. Junio C HamanoOct 10, 2016
  199. 02/25 sequencer: use memoized sequencer directory pathJohannes Schindelin, Oct 10, 2016
  200. 04/25 sequencer: future-proof remove_sequencer_state()Johannes Schindelin, Oct 10, 2016
  201. 03/25 sequencer: avoid unnecessary indirectionJohannes Schindelin, Oct 10, 2016
  202. Junio C HamanoOct 10, 2016
  203. 05/25 sequencer: eventually release memory allocated for the option valuesJohannes Schindelin, Oct 10, 2016
  204. Junio C HamanoOct 10, 2016
  205. Johannes SchindelinOct 11, 2016
  206. Junio C HamanoOct 11, 2016
  207. Johannes SchindelinOct 12, 2016
  208. Re* [PATCH v3 05/25] sequencer: eventually release memory allocated for the option valuesJunio C Hamano, Oct 12, 2016
  209. Johannes SchindelinOct 13, 2016
  210. 07/25 sequencer: completely revamp the "todo" script parsingJohannes Schindelin, Oct 10, 2016
  211. Junio C HamanoOct 10, 2016
  212. Johannes SchindelinOct 11, 2016
  213. Johannes SchindelinOct 11, 2016
  214. Johannes SchindelinOct 11, 2016
  215. Junio C HamanoOct 11, 2016
  216. Junio C HamanoOct 11, 2016
  217. Torsten BögershausenOct 15, 2016
  218. Jeff KingOct 15, 2016
  219. Torsten BögershausenOct 15, 2016
  220. Jeff KingOct 15, 2016
  221. Johannes SchindelinOct 16, 2016
  222. Jeff KingOct 16, 2016
  223. Johannes SchindelinOct 17, 2016
  224. Jeff KingOct 17, 2016
  225. 06/25 sequencer: future-proof read_populate_todo()Johannes Schindelin, Oct 10, 2016
  226. 08/25 sequencer: strip CR from the todo scriptJohannes Schindelin, Oct 10, 2016
  227. Junio C HamanoOct 11, 2016
  228. Johannes SchindelinOct 12, 2016
  229. 11/25 sequencer: refactor the code to obtain a short commit nameJohannes Schindelin, Oct 10, 2016
  230. 09/25 sequencer: avoid completely different messages for different actionsJohannes Schindelin, Oct 10, 2016
  231. 12/25 sequencer: remember the onelines when parsing the todo fileJohannes Schindelin, Oct 10, 2016
  232. Junio C HamanoOct 11, 2016
  233. Johannes SchindelinOct 12, 2016
  234. Junio C HamanoOct 12, 2016
  235. Johannes SchindelinOct 13, 2016
  236. 14/25 sequencer: introduce a helper to read files written by scriptsJohannes Schindelin, Oct 10, 2016
  237. Junio C HamanoOct 17, 2016
  238. Johannes SchindelinOct 18, 2016
  239. Junio C HamanoOct 18, 2016
  240. Johannes SchindelinOct 20, 2016
  241. 13/25 sequencer: prepare for rebase -i's commit functionalityJohannes Schindelin, Oct 10, 2016
  242. Junio C HamanoOct 11, 2016
  243. Johannes SchindelinOct 12, 2016
  244. Junio C HamanoOct 12, 2016
  245. Johannes SchindelinOct 13, 2016
  246. Junio C HamanoOct 14, 2016
  247. 15/25 sequencer: allow editing the commit message on a case-by-case basisJohannes Schindelin, Oct 10, 2016
  248. Junio C HamanoOct 17, 2016
  249. 10/25 sequencer: get rid of the subcommand fieldJohannes Schindelin, Oct 10, 2016
  250. 17/25 sequencer: support cleaning up commit messagesJohannes Schindelin, Oct 10, 2016
  251. 18/25 sequencer: do not try to commit when there were merge conflictsJohannes Schindelin, Oct 10, 2016
  252. 16/25 sequencer: support amending commitsJohannes Schindelin, Oct 10, 2016
  253. Junio C HamanoOct 17, 2016
  254. Johannes SchindelinOct 18, 2016
  255. Junio C HamanoOct 18, 2016
  256. 19/25 sequencer: left-trim lines read from the scriptJohannes Schindelin, Oct 10, 2016
  257. 20/25 sequencer: refactor write_message()Johannes Schindelin, Oct 10, 2016
  258. 23/25 sequencer: quote filenames in error messagesJohannes Schindelin, Oct 10, 2016
  259. 24/25 sequencer: start error messages consistently with lower caseJohannes Schindelin, Oct 10, 2016
  260. 25/25 sequencer: mark all error messages for translationJohannes Schindelin, Oct 10, 2016
  261. Johannes SixtOct 12, 2016
  262. Junio C HamanoOct 12, 2016
  263. Johannes SchindelinOct 13, 2016
  264. Johannes SixtOct 13, 2016
  265. 22/25 sequencer: mark action_name() for translationJohannes Schindelin, Oct 10, 2016
  266. 21/25 sequencer: remove overzealous assumption in rebase -i modeJohannes Schindelin, Oct 10, 2016
  267. 00/25 Prepare the sequencer for the upcoming rebase -i patchesJohannes Schindelin, Oct 14, 2016
  268. 18/25 sequencer: do not try to commit when there were merge conflictsJohannes Schindelin, Oct 14, 2016
  269. Junio C HamanoOct 20, 2016
  270. Johannes SchindelinOct 21, 2016
  271. 17/25 sequencer: support cleaning up commit messagesJohannes Schindelin, Oct 14, 2016
  272. Junio C HamanoOct 20, 2016
  273. 16/25 sequencer: support amending commitsJohannes Schindelin, Oct 14, 2016
  274. 19/25 sequencer: left-trim lines read from the scriptJohannes Schindelin, Oct 14, 2016
  275. 14/25 sequencer: introduce a helper to read files written by scriptsJohannes Schindelin, Oct 14, 2016
  276. 12/25 sequencer: remember the onelines when parsing the todo fileJohannes Schindelin, Oct 14, 2016
  277. 15/25 sequencer: allow editing the commit message on a case-by-case basisJohannes Schindelin, Oct 14, 2016
  278. 11/25 sequencer: get rid of the subcommand fieldJohannes Schindelin, Oct 14, 2016
  279. 13/25 sequencer: prepare for rebase -i's commit functionalityJohannes Schindelin, Oct 14, 2016
  280. 20/25 sequencer: refactor write_message()Johannes Schindelin, Oct 14, 2016
  281. Junio C HamanoOct 20, 2016
  282. Junio C HamanoOct 20, 2016
  283. Johannes SchindelinOct 21, 2016
  284. Junio C HamanoOct 21, 2016
  285. Johannes SchindelinOct 23, 2016
  286. 24/25 sequencer: start error messages consistently with lower caseJohannes Schindelin, Oct 14, 2016
  287. 22/25 sequencer: mark action_name() for translationJohannes Schindelin, Oct 14, 2016
  288. 25/25 sequencer: mark all error messages for translationJohannes Schindelin, Oct 14, 2016
  289. 23/25 sequencer: quote filenames in error messagesJohannes Schindelin, Oct 14, 2016
  290. Junio C HamanoOct 20, 2016
  291. Junio C HamanoOct 20, 2016
  292. 21/25 sequencer: remove overzealous assumption in rebase -i modeJohannes Schindelin, Oct 14, 2016
  293. 08/25 sequencer: completely revamp the "todo" script parsingJohannes Schindelin, Oct 14, 2016
  294. Junio C HamanoOct 17, 2016
  295. Johannes SchindelinOct 18, 2016
  296. 09/25 sequencer: strip CR from the todo scriptJohannes Schindelin, Oct 14, 2016
  297. 03/25 sequencer: avoid unnecessary indirectionJohannes Schindelin, Oct 14, 2016
  298. 05/25 sequencer: eventually release memory allocated for the option valuesJohannes Schindelin, Oct 14, 2016
  299. Junio C HamanoOct 17, 2016
  300. Johannes SchindelinOct 18, 2016
  301. Junio C HamanoOct 19, 2016
  302. Johannes SchindelinOct 20, 2016
  303. 04/25 sequencer: future-proof remove_sequencer_state()Johannes Schindelin, Oct 14, 2016
  304. 07/25 sequencer: refactor the code to obtain a short commit nameJohannes Schindelin, Oct 14, 2016
  305. 02/25 sequencer: use memoized sequencer directory pathJohannes Schindelin, Oct 14, 2016
  306. 10/25 sequencer: avoid completely different messages for different actionsJohannes Schindelin, Oct 14, 2016
  307. 06/25 sequencer: future-proof read_populate_todo()Johannes Schindelin, Oct 14, 2016
  308. 01/25 sequencer: use static initializers for replay_optsJohannes Schindelin, Oct 14, 2016
  309. Junio C HamanoOct 17, 2016
  310. 00/27 Prepare the sequencer for the upcoming rebase -i patchesJohannes Schindelin, Oct 21, 2016
  311. 02/27 sequencer: use memoized sequencer directory pathJohannes Schindelin, Oct 21, 2016
  312. 01/27 sequencer: use static initializers for replay_optsJohannes Schindelin, Oct 21, 2016
  313. 04/27 sequencer: future-proof remove_sequencer_state()Johannes Schindelin, Oct 21, 2016
  314. 03/27 sequencer: avoid unnecessary indirectionJohannes Schindelin, Oct 21, 2016
  315. 05/27 sequencer: plug memory leaks for the option valuesJohannes Schindelin, Oct 21, 2016
  316. 06/27 sequencer: future-proof read_populate_todo()Johannes Schindelin, Oct 21, 2016
  317. 08/27 sequencer: completely revamp the "todo" script parsingJohannes Schindelin, Oct 21, 2016
  318. Lars SchneiderNov 6, 2016
  319. 09/27 sequencer: strip CR from the todo scriptJohannes Schindelin, Oct 21, 2016
  320. 07/27 sequencer: refactor the code to obtain a short commit nameJohannes Schindelin, Oct 21, 2016
  321. 11/27 sequencer: get rid of the subcommand fieldJohannes Schindelin, Oct 21, 2016
  322. 12/27 sequencer: remember the onelines when parsing the todo fileJohannes Schindelin, Oct 21, 2016
  323. 13/27 sequencer: prepare for rebase -i's commit functionalityJohannes Schindelin, Oct 21, 2016
  324. 10/27 sequencer: avoid completely different messages for different actionsJohannes Schindelin, Oct 21, 2016
  325. 15/27 sequencer: allow editing the commit message on a case-by-case basisJohannes Schindelin, Oct 21, 2016
  326. 14/27 sequencer: introduce a helper to read files written by scriptsJohannes Schindelin, Oct 21, 2016
  327. 16/27 sequencer: support amending commitsJohannes Schindelin, Oct 21, 2016
  328. 17/27 sequencer: support cleaning up commit messagesJohannes Schindelin, Oct 21, 2016
  329. 18/27 sequencer: left-trim lines read from the scriptJohannes Schindelin, Oct 21, 2016
  330. 21/27 sequencer: refactor write_message() to take a pointer/lengthJohannes Schindelin, Oct 21, 2016
  331. 19/27 sequencer: stop releasing the strbuf in write_message()Johannes Schindelin, Oct 21, 2016
  332. Junio C HamanoOct 21, 2016
  333. 23/27 sequencer: remove overzealous assumption in rebase -i modeJohannes Schindelin, Oct 21, 2016
  334. 25/27 sequencer: quote filenames in error messagesJohannes Schindelin, Oct 21, 2016
  335. 22/27 sequencer: teach write_message() to append an optional LFJohannes Schindelin, Oct 21, 2016
  336. Junio C HamanoOct 21, 2016
  337. Johannes SchindelinOct 23, 2016
  338. 26/27 sequencer: start error messages consistently with lower caseJohannes Schindelin, Oct 21, 2016
  339. 20/27 sequencer: roll back lock file if write_message() failedJohannes Schindelin, Oct 21, 2016
  340. 24/27 sequencer: mark action_name() for translationJohannes Schindelin, Oct 21, 2016
  341. 27/27 sequencer: mark all error messages for translationJohannes Schindelin, Oct 21, 2016
  342. Junio C HamanoOct 21, 2016
  343. Johannes SchindelinOct 23, 2016
  344. Junio C HamanoOct 24, 2016
  345. Junio C HamanoOct 22, 2016
  346. Johannes SchindelinOct 23, 2016
  347. Johannes SchindelinOct 23, 2016
  348. Max HornOct 24, 2016
  349. Johannes SchindelinOct 24, 2016
  350. Junio C HamanoOct 24, 2016
  351. Stefan BellerOct 24, 2016
  352. Junio C HamanoOct 24, 2016

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.