Re: Bug: commit -p breaks with -m
- From
Jeff King <peff@peff.net>
- Date
- Aug 15, 2013, 12:16 UTC
- Message-ID
- <20130815121635.GB22102@sigill.intra.peff.net>
- In-Reply-To
- <6EC98F2F-98FC-439B-BD9C-B1D0DB1F5E10@gmail.com>
On Thu, Aug 15, 2013 at 12:43:39AM -0400, Matan Nassau wrote:
Show 22 quoted lines
> With git 1.8.3.3,
>
> $ seq 5 >data
> $ git add data
> $ git commit -mdata
> $ sed -i '2 d' data
> $ git commit -pmchange
>
> At the prompt, type e to edit the hunk. The editor doesn't start, but
> git records a commit.
>
> I found that builtin/commit.c sets the GIT_EDITOR env var to ":" when
> the user specifies the -m option. This was done in 406400ce4f69.
> Removing these two lines,
>
> if (!use_editor)
> setenv("GIT_EDITOR", ":", 1);
>
> seems to fix the issue, but I'm not sure this won't break the
> prepare-commit-msg hook. I'd like to submit a patch: can I get a hint
> if this change would break commit hooks or anything else I'm not
> seeing?Yeah, that is definitely a bug. Just removing those lines would not be the right fix, though, because the point of them is to let the prepare-commit-msg hook know whether or not an editor is in use.
Instead, I think you would want to limit the scope of where we have set GIT_EDITOR. I.e., drop those lines, and then add GIT_EDITOR=: to the environment that we pass to the hook via the run_hook function. Unfortunately, I think that will require some refactoring of the run_hook interface, which does not allow arbitrary environment parameters to be set.
-Peff