summaryrefslogtreecommitdiff
path: root/git-request-pull.sh
diff options
context:
space:
mode:
Diffstat (limited to 'git-request-pull.sh')
-rwxr-xr-xgit-request-pull.sh89
1 files changed, 89 insertions, 0 deletions
diff --git a/git-request-pull.sh b/git-request-pull.sh
new file mode 100755
index 0000000..4694130
--- /dev/null
+++ b/git-request-pull.sh
@@ -0,0 +1,89 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0+
+#
+# git-request-pull wrapper with sanity checks
+#
+
+baserev=
+headrev=
+
+parse_options() {
+ # The code below if borrowed from git-request-pull
+
+ # Skip all options
+ while [[ $# != 0 ]] ; do
+ case "$1" in
+ -p)
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*)
+ return
+ ;;
+ *)
+ break
+ ;;
+ esac
+ shift
+ done
+
+ local base=$1
+ local head=
+
+ baserev=$(git rev-parse --verify --quiet "$base"^0)
+ if [[ -z "$baserev" ]] ; then
+ return
+ fi
+
+ local=${3%:*}
+ local=${local:-HEAD}
+ head=$(git symbolic-ref -q "$local")
+ head=${head:-$(git show-ref --heads --tags "$local" | cut -d' ' -f2)}
+ head=${head:-$(git rev-parse --quiet --verify "$local")}
+
+ if [[ -z "$head" ]] ; then
+ return
+ fi
+
+ headrev=$(git rev-parse --verify --quiet "$head"^0)
+}
+
+check_commits() {
+ if [[ -z "$baserev" || -z "$headrev" ]] ; then
+ # git request-pull will catch this issue
+ return
+ fi
+
+ local author
+ local commit
+ local committer
+ local errors=0
+ local sob
+
+ for commit in $(git rev-list ^$baserev $headrev) ; do
+ local author=$(git show --pretty='format:%an <%ae>' -s $commit)
+ local committer=$(git show --pretty='format:%cn <%ce>' -s $commit)
+ local summary=$(git show --pretty='format:%h ("%s")' -s $commit)
+
+ git show -s $commit | grep -Fqx " Signed-off-by: $author" || {
+ echo "Commit $summary is not signed off by author"
+ errors=$((errors+1))
+ }
+ git show -s $commit | grep -Fqx " Signed-off-by: $committer" || {
+ echo "Commit $summary is not signed off by committer"
+ errors=$((errors+1))
+ }
+ done
+
+ if [[ $errors != 0 ]] ; then
+ echo "$errors errors found, please fix"
+ exit 1
+ fi
+}
+
+parse_options $*
+check_commits
+
+git request-pull $*