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

Re: [PATCH v3 07/25] sequencer: completely revamp the "todo" script parsing

From
Jeff King <peff@peff.net>
Date
Oct 17, 2016, 09:36 UTC
Message-ID
<20161017093608.qfevdonb336mglgx@sigill.intra.peff.net>
In-Reply-To
<alpine.DEB.2.20.1610171025470.197091@virtualbox>
[tl;dr: the version in your repo is fine, and there's a trivial fix
 below if we want to silence the warning in the meantime]
On Mon, Oct 17, 2016 at 10:37:52AM +0200, Johannes Schindelin wrote:
Show 7 quoted lines
> > I'm not sure I agree. IIRC, Assigning values outside the range of an enum has
> > always been fishy according to the standard, and a compiler really is
> > allowed to allocate a single bit for storage for this enum.
> 
> Really? I did see my share of code that completely violated this freedom,
> by assuming that it was really okay to cast a -1 to an enum and then test
> for that value later, when -1 was not a legal enum value.
I poked around a bit, and it seems we're both half-wrong. C99 says:
  6.7.2.2 Enumeration specifiers
  [...]
  The expression that defines the value of an enumeration constant shall
  be an integer constant expression that has a value representable as an
  int.
  [...]
  Each enumerated type shall be compatible with char, a signed integer
  type, or an unsigned integer type. The choice of type is
  implementation-defined, but shall be capable of representing the
  values of all the members of the enumeration.

My reading is that it can't be a single-bit bitfield as I claimed, but it also isn't necessarily interchangeable with an int. But you get at least a "char", and you can use all of those integer values even if they aren't explicitly part of the set. And I'd assume that goes for values even beyond the largest tag as long as you don't need more bits, so that:

  enum { A = 1, B = 2, C = 4 } x = A | B | C;

is OK (though I didn't see anything particularly about that in the standard).

Assigning "-1" works in the same way that normal "unsigned x = -1" works (and is defined by the standard), though of course it may unexpectedly conflict with an actual enum value if the compiler chooses a smaller type (e.g., it may literally be 255 in many cases).

Anyway. Enough language lawyering. It seems like clang is being overly strict in its interpretation of the standard (it should be giving us at least a char's worth of values). But it matters less what the standard says and more what real compilers do, and we have to deal with clang's behavior.

> In any case, the fact that even one compiler used to build Git *may*
> violate that standard, and that we therefore need such safety guards as
> the one under discussion, still makes me think that this warning, while
> certainly well-intentioned, is poison for cross-platform projects.

Oh, I agree that the warning is annoying, and the code should not go away. We just need to figure out how to silence clang.

Show 9 quoted lines
> > I'm happy to test the TODO_NOOP version against clang (and prepare a
> > patch on top if it still complains), but that doesn't seem to have
> > Junio's tree at all yet.
> 
> Junio chose to pick up only one patch series out of the rebase--helper
> thicket at a time, it seems. I did send out at least one revision per
> patch series prior to integrating them into Git for Windows v2.10.0,
> though. Plus, I kept updating the `interactive-rebase` branch in my
> repository on GitHub (https://github.com/dscho/git).

Thanks, I was able to test that branch. It looks like clang is happy with it because you compare against the max value. Unlike the ARRAY_SIZE() check, this does mean if somebody modifies the enum without touching the array, we might go out of bounds. But things would be severely broken enough from the mismatch that I don't think it's worth worrying about too much (and I see you have a nice comment warning people about this).

If the rest of your interactive-rebase branch is coming soon, I think we can probably ignore it for now. Otherwise something like:

diff --git a/sequencer.c b/sequencer.c
index d662c6b..1fdc35e 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -620,7 +620,8 @@ static int allow_empty(struct replay_opts *opts, struct commit *commit)
 
 enum todo_command {
 	TODO_PICK = 0,
-	TODO_REVERT
+	TODO_REVERT,
+	TODO_MAX
 };
 

is probably the simplest portable fix.

As a more clever change, I wondered if switching the enum values from
(0,1) to (1,2) would silence the warning, and indeed it does. Which I
assume is because using bit-flags, we could now represent "1|2", or "3",
which is larger than the array (well, obviously "2" is, but we'd need to
subtract 1 when indexing the array). I don't think that's a good route,
though, because it loses the 0-indexing, the benefits of
zero-initialization, etc. I was mostly just poking at how clang
perceives the enum values.

> P.S.: I cannot wait for the day when somebody with an artistic touch
> provides .css for the public-inbox.org site so it stops threatening
> causing eye cancer to me.

Heh. I gently hinted something similar to Eric in the past, but I think
he actually likes how it looks. He has invited others to mirror
public-inbox and make their own interface, though. I just lack the
"artistic touch" you mentioned.

-Peff
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 224 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.