"git intepret-trailers" vs. "sed script" to add the signature
- From
Kaartic Sivaraam <kaarticsivaraam91196@gmail.com>
- Date
- Jul 1, 2017, 16:16 UTC
- Message-ID
- <1498925790.4321.7.camel@gmail.com>
- In-Reply-To
- <1498918546.4321.1.camel@gmail.com>
On Sat, 2017-07-01 at 19:45 +0530, Kaartic Sivaraam wrote:
Show 7 quoted lines
> On Fri, 2017-06-30 at 09:44 -0700, Junio C Hamano wrote: > > It does look like a hack. I was wondering if "interpret-trailers" > > is mature enough and can be used for this by now. > > It does look promising except for a few differences from the hook > which > I'll explain in the following mail.
interpet-trailers =================
After enabling the script I tried the following (shown here as a diff) to add the signature with "interpret-trailers",
diff --git a/templates/hooks--prepare-commit-msg.sample b/templates/hooks--prepare-commit-msg.sample
index 6473bcacd..9f8cbe7fd 100755
--- a/templates/hooks--prepare-commit-msg.sample
+++ b/templates/hooks--prepare-commit-msg.sample
@@ -33,4 +33,4 @@ case "$2,$3" in
esac
SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
-grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+git interpret-trailers --in-place --trailer "$SOB" "$1"It adds the signature if it's not present in the following cases,
* commit * merge * commit --amend * commit -F * cherry-pick
It's pretty good in adding the signature except that it's not in line with "git commit -s" whose resulting "spacing" (new lines before and after) as shown in the editor is given below,
Show 7 quoted lines
> > > Signed-off-by: Test <hello@example.org> > > # Please enter the commit message for your changes. Lines starting > # with '#' will be ignored, and an empty message aborts the commit. > ...
The spacing of "git interpret-trailers" in the editor for the relevant cases are,
commit ------
Show 5 quoted lines
> > Signed-off-by: Test <hello@example.org> > # Please enter the commit message for your changes. Lines starting > # with '#' will be ignored, and an empty message aborts the commit. > ...
commit --amend --------------
Show 7 quoted lines
> Empty commit to test amending > > Signed-off-by: Test <hello@example.org> > > # Please enter the commit message for your changes. Lines starting > # with '#' will be ignored, and an empty message aborts the commit. > ...
merge -----
Show 9 quoted lines
> Merge branch 'hook-test' into hook-test-merge > > Signed-off-by: Test <hello@example.org> > > # Please enter a commit message to explain why this merge is necessary, > # especially if it merges an updated upstream into a topic branch. > # > # Lines starting with '#' will be ignored, and an empty message aborts > # the commit.
So, it seems that excepting for 'commit' it has quite a nice spacing. I guess we could add something like the following to fix that,
# Add new line after SOB in case of "git commit"
NEW_LINE='\
'
if [ -z "$2" ]
then
sed -i "1i$NEW_LINE" "$1"
fised-script ========== I also tried to add the signature that immitates the "-s" option of "git commit" using "sed" but it works only in following cases,
* commit * commit --amend * merge
It doesn't seem to work in cases where user doesn't edit the message using the editor. I'm not sure why.
I'm not including a patch of my manual way here as "git interpret- trailers" (with the fix added) seems quite promising (at least to me).
I'll send a typical patch that uses "git interpret-headers" as a follow-up.
-- Regards, Kaartic Sivaraam <kaarticsivaraam91196@gmail.com>