git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johan Herland <johan@herland.net>
To: Christian Couder <christian.couder@gmail.com>
Cc: Josh Triplett <josh@joshtriplett.org>,
	Thomas Rast <tr@thomasrast.ch>,
	Michael Haggerty <mhagger@alum.mit.edu>,
	Git mailing list <git@vger.kernel.org>,
	Dan Carpenter <dan.carpenter@oracle.com>,
	Greg KH <greg@kroah.com>
Subject: Re: [PATCH] commit: Add -f, --fixes <commit> option to add Fixes: line
Date: Wed, 30 Oct 2013 20:07:01 +0100	[thread overview]
Message-ID: <CALKQrgdo=RP6vgCUML_L_NPsvSbg8Lyjy4HqmWYXk+NmWOjCvw@mail.gmail.com> (raw)
In-Reply-To: <CAP8UFD1eTmUGt7dWAP-Ws17op=z98hOvBa_g8_y=xS8WQ1dRMg@mail.gmail.com>

On Tue, Oct 29, 2013 at 7:23 AM, Christian Couder
<christian.couder@gmail.com> wrote:
> On Mon, Oct 28, 2013 at 3:46 AM, Johan Herland <johan@herland.net> wrote:
>> On Sun, Oct 27, 2013 at 8:04 PM, Christian Couder <christian.couder@gmail.com> wrote:
>>> If "git commit" processes these arguments and puts the result in the
>>> commit message file that is passed to the
>>> prepare-commit-msg hook, then this hook can still get them from the
>>> file and process them however it wants.
>>>
>>> And in most cases the processing could be the same as what is done by
>>> the commit-msg hook when the user changes the "Fixes: xxx" and
>>> "Stuffed-by: yyy" lines in the editor.
>>>
>>> So it would probably be easier for people customizing the
>>> prepare-commit-msg and commit-msg if "git commit" processes the
>>> arguments instead of just passing them to the prepare-commit-msg hook.
>>>
>>> And it will be better for people who don't set up any *commit-msg hook.
>>> Even if there is no commit template, "-f Acked-by:Peff" and "-f
>>> Fixes:security-bug" could still work.
>>> I suspect most users don't setup any hook or commit template.
>>
>> Hmm. I'm not sure what you argue about which part of the system should
>> perform which function. Let's examine the above options in more
>> detail. Roughly, the flow of events look like this
>>
>>   git commit -f ack:Peff -f fix:security-bug
>>     |
>>     v
>>   builtin/commit.c (i.e. inside "git commit")
>>     |
>>     v
>>   prepare-commit-msg hook
>>     |
>>     v
>>   commit message template:
>>     Fixes: security-bug
>>     Acked-by: Peff
>
> Here it could already be:
>
>      Fixes: 1234beef56 (Commit message summmary)
>      Acked-by: Jeff King <peff@peff.net>
>
> Because builtin/commit.c hook could already have expanded everything.
>
>>     |
>>     v
>>   user edits commit message (may or may not change Fixes/Acked-by lines)
>>     |
>>     v
>>   commit-msg hook
>>     |
>>     v
>>   commit message:
>>     Fixes: 1234beef56 (Commit message summmary)
>>     Acked-by: Jeff King <peff@peff.net>
>>
>> (The above is even a bit simplified, but I believe it's sufficient for
>> the current discussion.) So, there are several expansions happening
>> between the initial "git commit" and the final commit message. They
>> are:
>>
>>  1. "fix" -> "Fixes: "
>>  2. "security-bug" -> "1234beef56 (Commit message summmary)"
>>  3. "ack" -> "Acked-by: "
>>  4. "Peff" -> "Jeff King <peff@peff.net>"
>>
>> First, I think we both agree that expansions #2 and #4 MUST be done by
>> the commit-msg hook. The reason for this is two-fold: (a) the
>> expansion must be done (at least) after the user has edited the commit
>> message (since the values entered by the user might require the same
>> expansion), and (b) how (and whether) to perform the expansion is a
>> project-specific policy question, and not something that Git can
>> dictate.
>
> I don't agree. Git doesn't need to dictate anything to be able to do
> these expansions.
> Git only needs some hints to do these expansions properly and it could
> just look at the commit template, or the config, to get those hints.
>
> For example, if there is a "Acked-by:" line in the commit template,
> then Git might decide that "ack" means "Acked-by", and then that "-by"
> means that "Peff" should be related to an author, and then that it is
> probably "Jeff King <peff@peff.net>".

I don't like putting that much Magic into core Git... Especially not
into builtin/commit.c. However, if we - as you suggest further below -
put it into a separate helper, and we make that helper available (and
usable) from elsewhere (most importantly from hooks where
people/projects can add their own more specific functionality), then I
don't have a problem with it.

[...]

>>> Supporting project specific conventions/rules would still be possible
>>> by processing lines in the commit message file without changing "git
>>> commit".
>>>
>>> If "git commit" is already able to do some processing, it only adds
>>> power to what can be done by people writing hooks.
>>>
>>> We could even have git plumbing commands used by git commit to process
>>> the -f (or whatever option) arguments and they could be reused by the
>>> *commit-msg hooks if they find them useful.
>>
>> Can you walk through an example of such reusable functionality?
>
> Ok, let's call the new plumbing command "git interpret-trailers".
> And let's suppose that "git commit" is passed "-f ack:Peff -f
> fix:security-bug" (or "--trailer ack=Peff --trailer
> fix=security-bug").
>
> "git commit" would then call something like:
>
> git interpret-trailers --file commit_message_template.txt 'ack:Peff'
> 'fix:security-bug'
>
> And this command would output:
>
> ------------------
> <<<upper part of commit_message_template.txt>>>
>
> Fixes: 1234beef56 (Commit message summmary)
> Reported-by:
> Suggested-by:
> Improved-by:
> Acked-by: Jeff King <peff@peff.net>
> Reviewed-by:
> Tested-by:
> Signed-off-by: Myself <myself@example.com>
> ------------------
>
> Because it would have looked at the commit template it is passed and
> filled in the blanks it could fill using the arguments it is also
> passed.
>
> "git commit" would then put the above lines in the file that it passes
> to the prepare-commit-msg hook.
>
> Then the prepare-commit-msg could just do nothing.
>
> After the user has edited the commit message, the commit-msg hook
> could just call:
>
> git interpret-trailers --trim-empty --file commit_message.txt
>
> so that what the user changed is interpreted again.
>
> For example if the user changed the "Reviewed-by:" line to
> "Reviewed-by: Johan", then the output would be:
>
> ------------------
> <<<upper part of commit_message.txt>>>
>
> Fixes: 1234beef56 (Commit message summmary)
> Acked-by: Jeff King <peff@peff.net>
> Reviewed-by: Johan Herland <johan@herland.net>
> Signed-off-by: Myself <myself@example.com>
> ------------------
>
> And that would be the final commit message in most cases.

This approach looks OK to me, as long as we make sure that this
functionality is (a) optional, (b) flexible/reusable from hooks, and
(c) not bound tightly to core Git (and AFAICS, your proposal is just
that). As I said above, this stuff certainly does not belong in
builtin/commit.c...


...Johan

-- 
Johan Herland, <johan@herland.net>
www.herland.net

  reply	other threads:[~2013-10-30 19:07 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20131024122255.GI9378@mwanda>
     [not found] ` <20131024122512.GB9534@mwanda>
     [not found]   ` <20131026181709.GB10488@kroah.com>
2013-10-27  1:34     ` [PATCH] commit: Add -f, --fixes <commit> option to add Fixes: line Josh Triplett
2013-10-27  5:42       ` Michael Haggerty
2013-10-27  6:37         ` Theodore Ts'o
2013-10-27  7:14         ` Josh Triplett
2013-10-27  8:03           ` [Ksummit-2013-discuss] " Michel Lespinasse
2013-10-27  9:23             ` Josh Triplett
2013-10-27  8:09           ` Thomas Rast
2013-10-27  9:20             ` Josh Triplett
2013-10-27 10:59               ` Johan Herland
2013-10-27 19:10                 ` Christian Couder
2013-10-28  2:46                   ` Johan Herland
2013-10-28 22:10                     ` Thomas Rast
2013-10-29  2:02                       ` Jeff King
2013-10-30 17:53                       ` Johan Herland
2013-10-29  6:23                     ` Christian Couder
2013-10-30 19:07                       ` Johan Herland [this message]
2013-11-02 12:54                         ` Christian Couder
2013-10-27  9:26             ` Stefan Beller
2013-10-27 16:30               ` Thomas Rast
2013-10-27 17:03                 ` Stefan Beller
2013-10-31 23:03                 ` Stefan Beller
2013-10-31 23:04                   ` [PATCH] Documentation: add a script to generate a (long/short) options overview Stefan Beller
2013-10-31 23:09                     ` Stefan Beller
2013-10-31 23:45                       ` brian m. carlson
2013-11-01  0:09                         ` Junio C Hamano
2013-10-28  9:02           ` [PATCH] commit: Add -f, --fixes <commit> option to add Fixes: line Michael Haggerty
2013-10-28 11:29             ` Johan Herland
2013-10-29  2:08               ` Jeff King
2013-10-29  8:26                 ` Matthieu Moy
2013-10-30 18:12                 ` Johan Herland
2013-10-31  6:28                   ` Duy Nguyen
2013-10-31 17:20                     ` Junio C Hamano
2013-10-31 23:52                       ` Duy Nguyen
2013-11-01  0:16                       ` Johan Herland
2013-10-27  8:33       ` Duy Nguyen
2013-10-27  9:13         ` Josh Triplett
2013-10-28  0:49       ` Jim Hill
2013-10-28  1:52       ` Junio C Hamano
2013-10-28  7:16         ` Josh Triplett
2013-10-28  8:27           ` Michael Haggerty
2013-10-28  8:59           ` [ksummit-attendees] " Christoph Hellwig
2013-10-28 23:09             ` Benjamin Herrenschmidt
2013-10-28 23:38               ` Russell King - ARM Linux
2013-10-28 23:41               ` Russell King - ARM Linux
2013-10-28  9:08         ` Junio C Hamano
2013-10-29  4:45           ` Christian Couder
2013-10-29 19:54             ` Junio C Hamano
2013-10-30 17:28       ` Tony Luck
2013-10-30 18:33         ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CALKQrgdo=RP6vgCUML_L_NPsvSbg8Lyjy4HqmWYXk+NmWOjCvw@mail.gmail.com' \
    --to=johan@herland.net \
    --cc=christian.couder@gmail.com \
    --cc=dan.carpenter@oracle.com \
    --cc=git@vger.kernel.org \
    --cc=greg@kroah.com \
    --cc=josh@joshtriplett.org \
    --cc=mhagger@alum.mit.edu \
    --cc=tr@thomasrast.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).