Le 01/02/2019 à 15:51, Phillip Wood a écrit : >>> @@ -4473,38 +4475,62 @@ int sequencer_add_exec_commands(struct >>> repository *r, >>> * those chains if there are any. >>> */ >>> insert = -1; >>> - for (i = 0; i < todo_list.nr; i++) { >>> - enum todo_command command = todo_list.items[i].command; >>> - >>> - if (insert >= 0) { >>> - /* skip fixup/squash chains */ >>> - if (command == TODO_COMMENT) >>> - continue; >>> - else if (is_fixup(command)) { >>> - insert = i + 1; >>> - continue; >>> - } >>> - strbuf_insert(buf, >>> - todo_list.items[insert].offset_in_buf + >>> - offset, commands, commands_len); >> >> In a todo list that looks like >> pick abc message >> #pick cde empty commit >> This inserts the exec command for the first pick above the commented >> out pick. I think your translation puts it below the commented out >> pick as it ignores the value of insert. I think it's probably easiest >> to add an INSERT_ARRAY macro to insert it in the right place. An >> alternative might be to track the last insert position and only copy >> commands across when there is another exec to insert but that might >> get complicated in cases such as >> >> pick abc message >> #squash cde squash! message //empty commit for rewording >> fixup 123 fixup! message >> #pick 456 empty commit > > Thinking about this, I'm not sure it can happen as the empty squash > commit will be commented out before rearrange_squash() is called so I > think it would actually look like > > pick abc message > fixup 123 fixup! message > #pick cde squash! message > #pick 456 empty commit > > So I wonder if we can get away with treating insert as a flag and > inserting exec commands when > insert && command == TODO_COMMENT > > We could probably do with some tests for this to be sure. > I will try this approach. -- Alban > Best Wishes > > Phillip >