Re: [PATCH] Fix contrib/hooks/post-receive-email for new branch with no new commits
From: Jakub Narebski <hidden>
Date: 2016-06-15 22:46:08
"Pat Notz" [off-list ref] writes:
In the show_new_revisions function, the original code: git rev-parse --not --branches | grep -v $(git rev-parse $refname) | isn't quite right since one can create a new branch and push it without any new commits. In that case, two refs will have the same sha1 but both would get filtered by the 'grep'. In the end, we'll show ALL the history which is not what we want. Instead, we should list the branches by name and remove the branch being updated and THEN pass that list through rev-parse.
Good idea, bad execution.
quoted hunk ↗ jump to hunk
Signed-off-by: Pat Notz <redacted> --- contrib/hooks/post-receive-email | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)diff --git a/contrib/hooks/post-receive-email b/contrib/hooks/post-receive-email index 28a3c0e..116f89c 100644 --- a/contrib/hooks/post-receive-email +++ b/contrib/hooks/post-receive-email@@ -615,7 +615,9 @@ show_new_revisions() revspec=$oldrev..$newrev fi - git rev-parse --not --branches | grep -v $(git rev-parse $refname) | + this_branch=$(echo $refname | sed 's@refs/heads/@@') + other_branches=$(git branch | sed 's/\*//g' | grep -v $this_branch)
git-branch is porcelain, git-branch is porcelain, git-branch is porcelain,
git-branch is porcelain, git-branch is porcelain, git-branch is porcelain,
git-branch is porcelain, git-branch is porcelain, ...
Don't use sed if shell will suffice...
Either:
+ this_branch=$refname
+ other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ |
+ grep -v $this_branch)
or
+ this_branch=${refname#refs/heads/}
...
+ git rev-parse --not $other_branches | if [ -z "$custom_showrev" ] then git rev-list --pretty --stdin $revspec -- 1.6.1.2
-- Jakub Narebski Poland ShadeHawk on #git