In general, a 'Sign-off' added should be that of the *committer* and not
that of the *commit's author*. As the 3rd part of the 'prepare-commit-msg'
hook appended the sign-off of the *commit's author* it worked weirdly in
some cases. For example 'git commit --amend -s' when coupled with that part
of the script woked weirdly as illustrated by the following scenario in which
the last commit's log message has the following trailer,

    ...

    Signed-off-by: Random Developer <develo...@example.com>

and the commit's author is "Random Developer <develo...@example.com>". Assume
that the commit is trying to be amended by another developer who's identity is
"Another Developer <another-...@example.com>". When he tries to do

    $ git commit --amend -s

with the 3rd part of the hook enabled then the trailer he would see in his 
editor
would be,

    ...

    Signed-off-by: Random Developer <develo...@example.com>
    Signed-off-by: Another Developer <another-...@example.com>
    Signed-off-by: Random Developer <develo...@example.com>

This is because,

  * the hook is invoked only after the sign-off is appended by the '-s' option

  * the script tries to add the sign-off of the *commit's author* using 
interpret-trailers
    and 'interpret-trailers' in it's default configuration tries to adds the 
trailer
    when the *neighbouring* trailer isn't the same as the one trying to be 
added.

This is just an example and this kind of issue could repeat if similar 
conditions are
satisified for other cases.

Moreover the rest of Git adds the sign-off of the *committer* using 
sequencer.c::append_signoff().
So, use the correct logical variable that identifies the committer to append 
the sign-off
in the sample hook script.

Bottom line: Being consistent prevents all sorts of weird issues.

Signed-off-by: Kaartic Sivaraam <kaarticsivaraam91...@gmail.com>
---
 Changes in v2:

    - updated the commit message
 
 Suggestions regarding ways to improve the message are most welcome.

 templates/hooks--prepare-commit-msg.sample | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/templates/hooks--prepare-commit-msg.sample 
b/templates/hooks--prepare-commit-msg.sample
index a84c3e5a8..12dd8fd88 100755
--- a/templates/hooks--prepare-commit-msg.sample
+++ b/templates/hooks--prepare-commit-msg.sample
@@ -34,7 +34,7 @@ SHA1=$3
 #  *) ;;
 # esac
 
-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: 
\1/p')
 # git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
 # if test -z "$COMMIT_SOURCE"
 # then
-- 
2.14.0.rc1.434.g6eded367a

Reply via email to