# [FEATURE] git-commit option to prepend filename to commit message

3 messages from 2017-07-15 to 2017-07-15. Participants: John J Foerch, Johannes Sixt, Jeff King.
Thread: https://gitlist.dev/t/46390

## John J Foerch, 2017-07-15 14:19

Subject: [FEATURE] git-commit option to prepend filename to commit message
Message-ID: <18894679.1800.1500128374439@elwamui-karabash.atl.sa.earthlink.net>
URL: https://gitlist.dev/e/18894679.1800.1500128374439%40elwamui-karabash.atl.sa.earthlink.net

```
Hello,

I had an idea for a feature for git commit that I wanted to pass along and see if maybe others would also think this would be useful.

Very often, I make commits that affect a single file, and have simple commit messages of this form:

    <filename>: <what changed>

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?

Thank you,

John Foerch

```

## Johannes Sixt, 2017-07-15 16:01

Subject: Re: [FEATURE] git-commit option to prepend filename to commit message
Message-ID: <ef92480f-3de6-fa82-78bc-2a91566e8864@kdbg.org>
URL: https://gitlist.dev/e/ef92480f-3de6-fa82-78bc-2a91566e8864%40kdbg.org
In-Reply-To: <18894679.1800.1500128374439@elwamui-karabash.atl.sa.earthlink.net>

```
Am 15.07.2017 um 16:19 schrieb John J Foerch:
> The feature would be a command line option for git commit that would
> automatically prepend the "<filename>: " to the commit message.
Write a prepare-commit-msg hook:

https://www.kernel.org/pub/software/scm/git/docs/githooks.html#_prepare_commit_msg

-- Hannes

```

## Jeff King, 2017-07-15 16:05

Subject: Re: [FEATURE] git-commit option to prepend filename to commit message
Message-ID: <20170715160540.f2g5opqlr5z3r4aa@sigill.intra.peff.net>
URL: https://gitlist.dev/e/20170715160540.f2g5opqlr5z3r4aa%40sigill.intra.peff.net
In-Reply-To: <18894679.1800.1500128374439@elwamui-karabash.atl.sa.earthlink.net>

```
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"

```
