Re: Add support for `git rebase -no-edit`
- From
- Chaitanya Tata <chaitanya.tk17@gmail.com>
- Date
- Jan 11, 2024, 20:07 UTC
- Message-ID
- <CADA7-FNh_7OrFFb7qmYFf4i2t_VsjRSjtVngtRKS6HkADKrGYw@mail.gmail.com>
- In-Reply-To
- <ZaBHooq6ORZ3TTkL@nand.local>
Cheers, Chaitanya.
On Fri, Jan 12, 2024 at 1:25 AM Taylor Blau <me@ttaylorr.com> wrote:
Show 19 quoted lines
> > Hi Chaitanya, > > On Thu, Jan 11, 2024 at 10:55:47PM +0530, Chaitanya Tata wrote: > > Hi, > > > > I have a feature request to add `--no-edit` option to `git rebase` > > like we do for `git commit`. > > The workflow I typically follow is: > > > > * `git commit -a --fixup=XXX` > > * `git rebase -i HEAD~15 --autosquash` > > > > But it requires closing the editor without any changes. I can > > workaround this using the `GIT_EDITOR` option, see [1]. But it would > > be good to have this built-in. > > The easiest workaround would be setting GIT_EDITOR=true, which matches > the recommendation in [1].
Thanks for the quick response.
> > Short of that, you can't do a non-interactive rebase, since we rely on > the todo list generated by interactive rebases in order for > `--autosquash` to work.
IIUC, creating a todo list needs access to the file used in interactive rebase?
> Presumably plumbing in a new `--[no-]edit` option would be fairly > straightforward, and once that is done, the change boils down to just:
I am bit confused by this as this seems to contradict above statement, I guess the below patch will only work without `--autosquash`? Sorry, not familiar with git internals.
Show 30 quoted lines
>
> index 3cc88d8a80..5235a003f2 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -6169,7 +6169,7 @@ int complete_action(struct repository *r, struct replay_opts *opts, unsigned fla
> struct todo_list new_todo = TODO_LIST_INIT;
> struct strbuf *buf = &todo_list->buf, buf2 = STRBUF_INIT;
> struct object_id oid = onto->object.oid;
> - int res;
> + int res = 0;
>
> repo_find_unique_abbrev_r(r, shortonto, &oid,
> DEFAULT_ABBREV);
> @@ -6197,8 +6197,9 @@ int complete_action(struct repository *r, struct replay_opts *opts, unsigned fla
> return error(_("nothing to do"));
> }
>
> - res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
> - shortonto, flags);
> + if (!opts->edit)
> + res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
> + shortonto, flags);
> if (res == -1)
> return -1;
> else if (res == -2) {
>
> > [1] - https://stackoverflow.com/a/45783848
>
> Thanks,
> Taylor