Web lists-archives.com

Re: [FEATURE] git-commit option to prepend filename to commit message






-----Original Message-----
>From: Jeff King <peff@xxxxxxxx>
>Sent: Jul 15, 2017 12:05 PM
>To: John J Foerch <jjfoerch@xxxxxxxxxxxxx>
>Cc: git@xxxxxxxxxxxxxxx
>Subject: Re: [FEATURE] git-commit option to prepend filename to commit message
>
>On Sat, Jul 15, 2017 at 10:19:34AM -0400, John J Foerch wrote:
>
>> The feature would be a command line option for git commit that would
>> automatically prepend the "<filename>: " to the commit message.  The
>> different cases of its behavior could be:
>> 
>>  - commit affecting a single file, with commit message given by -m:
>> 
>>    : prepend "<filename>: " to the message given by -m
>> 
>>  - commit affecting a single file, with commit message from editor:
>> 
>>    : pre-fill commit message template with "<filename>: "
>> 
>>  - commit affecting multiple files:
>> 
>>    : use common base directory of all affected files for <filename>, behaviors as above for use with -m or editor.
>> 
>> Anybody think that this or something like it would be a good convenience?
>
>Johannes already pointed you to the prepare-commit-msg hook, which I
>think is the right solution. I wrote a rough sketch for fun (note that
>you could write it in whatever language you like if the mix of
>perl/shell isn't to your liking):
>
>-- >8 --
>#!/bin/sh
>
># only kick in for vanilla commit, or "-m"
>case "$2" in
>""|message) ;;
>*) exit 0
>esac
>
># common prefix of all changed files
>prefix=$(
>        git diff-index --name-only HEAD |
>        perl -lne '
>                if (!defined $prefix) {
>                        $prefix = $_;
>                } else {
>                        chop $prefix while !/^\Q$prefix\E/;
>                }
>                END {
>                        # trim trailing slash if present
>                        $prefix =~ s{/$}{};
>                        print $prefix
>                }
>        '
>)
>
># now stick the prefix at the start of the message-in-progress
>{
>        printf '%s' "$prefix: "
>        cat "$1"
>} >"$1".tmp &&
>mv "$1".tmp "$1"

Thank you for that!