I don't trust test's boolean operators.
[invirt/scripts/git-hooks.git] / sub / update
index 96347fe..2986daa 100755 (executable)
@@ -13,11 +13,30 @@ if [ -z "$GIT_DIR" ]; then
         exit 1
 fi
 
-if [ -z "$ref" -o -z "$oldrev" -o -z "$newrev" ]; then
+if [ -z "$ref" ] || [ -z "$oldrev" ] || [ -z "$newrev" ]; then
         echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
         exit 1
 fi
 
+# --- Disallow pushing to the branches for pockets
+
+pocket_to_git() {
+    local pocket git
+    pocket="$1"
+    git="$(invirt-getconf "git.pockets.$pocket.git" 2>/dev/null)"
+    if [ $? != 0 ]; then
+       git="$pocket"
+    fi
+    echo "$git"
+}
+
+for pocket in $(invirt-getconf -l git.pockets); do
+    if [ "$ref" = "refs/heads/$(pocket_to_git "$pocket")" ]; then
+       echo "*** Pushing to a pocket branch in this repository is not allowed" >&2
+       exit 1
+    fi
+done
+
 # --- Disallow pushing tags
 
 case "$ref" in