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"