Message ID | 20190129150159.10588-17-alban.gruin@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | sequencer: refactor functions working on a todo_list | expand |
Hi Alban On 29/01/2019 15:01, Alban Gruin wrote: > As transform_todo_file() is only needed inside of rebase--interactive.c, > it is moved there from sequencer.c. I think I'd prefer to minimize the code under builtin and move this to rebase-interactive.c when it is modified earlier in the series. (I'd be quite happy if all the files in builtin just consisted of some option parsing followed by a call to run_git_foo() which resides in libgit) Also I wonder if we should be moving more functions (e.g. todo_list_write_file() and possibly add_exec_commands(), rearrange_squash() and the script generation) from sequencer.c to rebase-interactive.c when they're rewritten (possibly in a separate commit for ease of review) but I haven't looked if this is practical or if there are some dependencies that make that tricky. Unless there are some simple cases it should probably be a separate series. Thanks for working on this series, it's great to see the todo list handling becoming more efficient. Best Wishes Phillip > > Signed-off-by: Alban Gruin <alban.gruin@gmail.com> > --- > builtin/rebase--interactive.c | 26 +++++++++++++++++++++++++- > sequencer.c | 23 ----------------------- > sequencer.h | 1 - > 3 files changed, 25 insertions(+), 25 deletions(-) > > diff --git a/builtin/rebase--interactive.c b/builtin/rebase--interactive.c > index 645ac587f7..7f1e88a087 100644 > --- a/builtin/rebase--interactive.c > +++ b/builtin/rebase--interactive.c > @@ -35,6 +35,30 @@ static int edit_todo_file(unsigned flags) > return 0; > } > > +static int transform_todo_file(unsigned flags) > +{ > + const char *todo_file = rebase_path_todo(); > + struct todo_list todo_list = TODO_LIST_INIT; > + int res; > + > + if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0) > + return error_errno(_("could not read '%s'."), todo_file); > + > + if (todo_list_parse_insn_buffer(the_repository, todo_list.buf.buf, > + &todo_list)) { > + todo_list_release(&todo_list); > + return error(_("unusable todo list: '%s'"), todo_file); > + } > + > + res = todo_list_write_to_file(the_repository, &todo_list, todo_file, > + NULL, NULL, -1, flags); > + todo_list_release(&todo_list); > + > + if (res) > + return error_errno(_("could not write '%s'."), todo_file); > + return 0; > +} > + > static int get_revision_ranges(const char *upstream, const char *onto, > const char **head_hash, > char **revisions, char **shortrevisions) > @@ -277,7 +301,7 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix) > } > case SHORTEN_OIDS: > case EXPAND_OIDS: > - ret = transform_todo_file(the_repository, flags); > + ret = transform_todo_file(flags); > break; > case CHECK_TODO_LIST: > ret = check_todo_list_from_file(the_repository); > diff --git a/sequencer.c b/sequencer.c > index 21b04e0642..5239700efc 100644 > --- a/sequencer.c > +++ b/sequencer.c > @@ -4593,29 +4593,6 @@ int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list, > return res; > } > > -int transform_todo_file(struct repository *r, unsigned flags) > -{ > - const char *todo_file = rebase_path_todo(); > - struct todo_list todo_list = TODO_LIST_INIT; > - int res; > - > - if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0) > - return error_errno(_("could not read '%s'."), todo_file); > - > - if (todo_list_parse_insn_buffer(r, todo_list.buf.buf, &todo_list)) { > - todo_list_release(&todo_list); > - return error(_("unusable todo list: '%s'"), todo_file); > - } > - > - res = todo_list_write_to_file(r, &todo_list, todo_file, > - NULL, NULL, -1, flags); > - todo_list_release(&todo_list); > - > - if (res) > - return error_errno(_("could not write '%s'."), todo_file); > - return 0; > -} > - > static const char edit_todo_list_advice[] = > N_("You can fix this with 'git rebase --edit-todo' " > "and then run 'git rebase --continue'.\n" > diff --git a/sequencer.h b/sequencer.h > index 68acab980b..11afd47aa9 100644 > --- a/sequencer.h > +++ b/sequencer.h > @@ -145,7 +145,6 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, > > int sequencer_add_exec_commands(struct repository *r, > struct string_list *commands); > -int transform_todo_file(struct repository *r, unsigned flags); > int check_todo_list_from_file(struct repository *r); > int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags, > const char *shortrevisions, const char *onto_name, >
Hi Phillip, Le 01/02/2019 à 12:15, Phillip Wood a écrit : > Hi Alban > > On 29/01/2019 15:01, Alban Gruin wrote: >> As transform_todo_file() is only needed inside of rebase--interactive.c, >> it is moved there from sequencer.c. > > I think I'd prefer to minimize the code under builtin and move this to > rebase-interactive.c when it is modified earlier in the series. (I'd be > quite happy if all the files in builtin just consisted of some option > parsing followed by a call to run_git_foo() which resides in libgit) > I do agree, but transform_todo_file() is only used by rebase -p. Once it is deprecated, it’s much easier to see this function is no longer used if it’s marked as static thanks to -Werror=unused-function. Now that I think about it, check_todo_list_from_file(), rearrange_squash_in_todo_list(), and sequencer_add_exec_commands() are only used by rebase -p, but I left them in sequencer.c. > Also I wonder if we should be moving more functions (e.g. > todo_list_write_file() and possibly add_exec_commands(), > rearrange_squash() and the script generation) from sequencer.c to > rebase-interactive.c when they're rewritten (possibly in a separate > commit for ease of review) but I haven't looked if this is practical or > if there are some dependencies that make that tricky. Unless there are > some simple cases it should probably be a separate series. > It might be doable, but I think it’s a bit more difficult with sequencer_make_script() (and especially sequencer_make_script_with_merges()). I will explore this after this series. > Thanks for working on this series, it's great to see the todo list > handling becoming more efficient. > You’re welcome ;-) -- Alban > Best Wishes > > Phillip >
diff --git a/builtin/rebase--interactive.c b/builtin/rebase--interactive.c index 645ac587f7..7f1e88a087 100644 --- a/builtin/rebase--interactive.c +++ b/builtin/rebase--interactive.c @@ -35,6 +35,30 @@ static int edit_todo_file(unsigned flags) return 0; } +static int transform_todo_file(unsigned flags) +{ + const char *todo_file = rebase_path_todo(); + struct todo_list todo_list = TODO_LIST_INIT; + int res; + + if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0) + return error_errno(_("could not read '%s'."), todo_file); + + if (todo_list_parse_insn_buffer(the_repository, todo_list.buf.buf, + &todo_list)) { + todo_list_release(&todo_list); + return error(_("unusable todo list: '%s'"), todo_file); + } + + res = todo_list_write_to_file(the_repository, &todo_list, todo_file, + NULL, NULL, -1, flags); + todo_list_release(&todo_list); + + if (res) + return error_errno(_("could not write '%s'."), todo_file); + return 0; +} + static int get_revision_ranges(const char *upstream, const char *onto, const char **head_hash, char **revisions, char **shortrevisions) @@ -277,7 +301,7 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix) } case SHORTEN_OIDS: case EXPAND_OIDS: - ret = transform_todo_file(the_repository, flags); + ret = transform_todo_file(flags); break; case CHECK_TODO_LIST: ret = check_todo_list_from_file(the_repository); diff --git a/sequencer.c b/sequencer.c index 21b04e0642..5239700efc 100644 --- a/sequencer.c +++ b/sequencer.c @@ -4593,29 +4593,6 @@ int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list, return res; } -int transform_todo_file(struct repository *r, unsigned flags) -{ - const char *todo_file = rebase_path_todo(); - struct todo_list todo_list = TODO_LIST_INIT; - int res; - - if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0) - return error_errno(_("could not read '%s'."), todo_file); - - if (todo_list_parse_insn_buffer(r, todo_list.buf.buf, &todo_list)) { - todo_list_release(&todo_list); - return error(_("unusable todo list: '%s'"), todo_file); - } - - res = todo_list_write_to_file(r, &todo_list, todo_file, - NULL, NULL, -1, flags); - todo_list_release(&todo_list); - - if (res) - return error_errno(_("could not write '%s'."), todo_file); - return 0; -} - static const char edit_todo_list_advice[] = N_("You can fix this with 'git rebase --edit-todo' " "and then run 'git rebase --continue'.\n" diff --git a/sequencer.h b/sequencer.h index 68acab980b..11afd47aa9 100644 --- a/sequencer.h +++ b/sequencer.h @@ -145,7 +145,6 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, int sequencer_add_exec_commands(struct repository *r, struct string_list *commands); -int transform_todo_file(struct repository *r, unsigned flags); int check_todo_list_from_file(struct repository *r); int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags, const char *shortrevisions, const char *onto_name,
As transform_todo_file() is only needed inside of rebase--interactive.c, it is moved there from sequencer.c. Signed-off-by: Alban Gruin <alban.gruin@gmail.com> --- builtin/rebase--interactive.c | 26 +++++++++++++++++++++++++- sequencer.c | 23 ----------------------- sequencer.h | 1 - 3 files changed, 25 insertions(+), 25 deletions(-)