Hello,

On Mon, Nov 06 2023, Florian Weimer via Gcc wrote:
> Emacs has a very useful facility.  You press “C-x 4 a” in a place where
> you make changes, and the editor automatically opens the right ChangeLog
> file and adds a draft entry to it, like this:
>
> 2023-11-06  Florian Weimer  <fwei...@redhat.com>
>
>       * c-opts.cc (c_common_post_options): █
>
> Is there something like this that works with commit messages and
> produces output compatible with GCC's expectations?
>

I use exactly this.  But I modify it to write the ChangeLog to file
ChangeLog.mine instead:

  (setq change-log-default-name "ChangeLog.mine")

Then in a git prepare-commit-msg hook I gather these:

----------------------------------------------------------------------
#!/bin/bash
#
# Hook script to prepare the commit log message from the first
# entry in each modified ChangeLog being committed.

set -e

# echo $1 $2 $3

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

# "merge" means the commit is a merge or a .git/MERGE_MSG file exists.
# "message" means a -m or -F option was given.
# "squash" means a .git/SQUASH_MSG file exists.
# "commit" means a -c, -C or --amend option was given (and $3 is commit SHA1).
case "$2," in
  merge,|squash,) exit ;;
  message,) exit ;;
esac

# If there is already a ChangeLog entry, assume --amend and exit
grep -q "ChangeLog" "$COMMIT_MSG_FILE" && exit 0

TMPF=$(mktemp)

echo > $TMPF 

for I in `find . -name ChangeLog.mine -type f -size +0c | xargs`; do
    echo >> $TMPF 
    CNF=`echo ${I%.mine} | cut -c3-` >> $TMPF 
    echo "${CNF}:" >> $TMPF 
    echo >> $TMPF 
    awk -v n=2 '/^2/{p++} p<n' $I >> $TMPF 
done

echo >> $TMPF 
cat $COMMIT_MSG_FILE >> $TMPF

mv $TMPF $COMMIT_MSG_FILE
----------------------------------------------------------------------

The only downside is that you need to truncate the ChangeLog.mine files
at the appropriate time.  The big upside is that you can generate
ChangeLog as you stage hunks in emacs magit.

Martin

Reply via email to