]> git.ozlabs.org Git - patchwork/blobdiff - tools/post-receive.hook
pwclient: Rephrase patch_ids iterator
[patchwork] / tools / post-receive.hook
index 004422f1b263ead51b6719b0a7e013ca49eb35ff..a38522e22f350693957281659347f39cbcca44da 100755 (executable)
@@ -3,12 +3,17 @@
 # Git post-receive hook to update Patchwork patches after Git pushes
 #
 # Copyright © 2010 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
+# Released under the GNU General Public License v2 or later.
 set -eu
 
 #TODO: the state map should really live in the repo's git-config
 STATE_MAP="refs/heads/master:Accepted"
+#
+# ignore all commits already present in these refs
+# e.g.,
+#   EXCLUDE="refs/heads/upstream refs/heads/other-project"
+#
+EXCLUDE=""
 
 PWDIR=/srv/patchwork/apps/patchwork
 
@@ -26,8 +31,8 @@ get_patchwork_hash()
 get_patch_id()
 {
   local id
-  id=$($PWDIR/bin/pwclient view -h $1 2>/dev/null \
-    | sed -rne 's,X-Patchwork-Id: ,,p')
+  id=$($PWDIR/bin/pwclient info -h $1 2>/dev/null \
+    | sed -rne 's,- id[[:space:]]*: ,,p')
   echo $id
   test -n "$id"
 }
@@ -40,7 +45,8 @@ set_patch_state()
 update_patches()
 {
   local cnt; cnt=0
-  for rev in $(git rev-list --no-merges --reverse ${1}^..${2}); do
+  for rev in $(git rev-parse --not ${EXCLUDE} |
+               git rev-list --stdin --no-merges --reverse ${1}..${2}); do
     if [ "$do_exit" = 1 ]; then
       echo "I: exiting..." >&2
       break
@@ -68,6 +74,6 @@ while read oldrev newrev refname; do
     fi
   done
   if [ $found -eq 0 ]; then
-    echo "E: no mapping for refname $key" >&2
+    echo "E: STATE_MAP has no mapping for branch $refname" >&2
   fi
 done