On do, 2016-09-01 at 17:32 +0200, Johannes Schindelin wrote: > Hi Dennis, > > On Thu, 1 Sep 2016, Dennis Kaarsemaker wrote: > > > > > On wo, 2016-08-31 at 10:56 +0200, Johannes Schindelin wrote: > > > > > > diff --git a/sequencer.c b/sequencer.c > > > index 51c2f76..4c902e5 100644 > > > --- a/sequencer.c > > > +++ b/sequencer.c > > > @@ -763,7 +763,8 @@ enum todo_command { > > > TODO_SQUASH, > > > TODO_EXEC, > > > TODO_NOOP, > > > - TODO_DROP > > > + TODO_DROP, > > > + TODO_COMMENT > > > }; > > (picking a random commit that touches this enum) > > > > In a few places you now make comparisons like "< TODO_NOOP", so I > > think > > it would be good to have a comment near the definition of this enum > > that says that ordering matters and why, so people don't attempt to > > add > > a new TODO_FOOBAR at the end. > True. > > It does not seem that we have a precedent for that. The closest is > what I > had in an early iteration of the fsck message IDs, and subsequently > things > were refactored so that it is not the order, but a flag, that > determines > what the command does. > > Not sure how to do this elegantly. Maybe like this? > > enum todo_command { > TODO_PICK_COMMANDS = 0, > TODO_PICK = TODO_PICK_COMMANDS, > TODO_SQUASH, > > TODO_NON_PICK_COMMANDS, > TODO_EXEC = TODO_NON_PICK_COMMANDS, > > TODO_NOOP_COMMANDS, > TODO_NOOP = TODO_NOOP_COMMANDS, > TODO_DROP > TODO_DROP, > > TODO_LAST_COMMAND, > TODO_COMMENT = TODO_LAST_COMMAND > }; > > But that is so god-awful to read. Agreed, that sure is awful. How about something like /* * Note that ordering matters in this enum. Not only must it match the * mapping below, it is also divided into several sections that matter. * When adding new commands, make sure you add it in the right section. */ enum todo_command { /* All commands that handle commits */ TODO_PICK, ... /* All commands that do something else than pick */ TODO_EXEC, ... /* All commands that do nothing but are counted for reporting progress */ TODO_NOOP, ... /* Comments, which are not counted TODO_COMMENT }