git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Jeff King <peff@peff.net>
Date
Jul 15, 2017, 16:05 UTC
Message-ID
<20170715160540.f2g5opqlr5z3r4aa@sigill.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:
Show 17 quoted lines
> 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"
Previous: Johannes Sixt
Message 3 of 3 in “[FEATURE] git-commit option to prepend filename to commit message”
  1. John J FoerchJul 15, 2017
  2. Johannes SixtJul 15, 2017
  3. Jeff KingJul 15, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.