Prechádzať zdrojové kódy

scripts/git: Make the git push command and args configurable

TOR_GIT_PUSH provides the git push command and default arguments.

Also fix handling of git-push-all.sh script arguments and arguments that
are passed through to $TOR_GIT_PUSH, using a "--" argument as a separator.

Fix on 29879.
teor 4 rokov pred
rodič
commit
70387054b9
2 zmenil súbory, kde vykonal 26 pridanie a 6 odobranie
  1. 5 0
      changes/ticket31314
  2. 21 6
      scripts/git/git-push-all.sh

+ 5 - 0
changes/ticket31314

@@ -7,3 +7,8 @@
     - Add a -u argument to git-merge-forward.sh, so that the script can re-use
       existing test branches after a merge failure and fix.
       Closes ticket 31314.
+    - Add a TOR_GIT_PUSH env var, which sets the default git push command and
+      arguments for git-push-all.sh. Closes ticket 31314.
+    - Add a "--" command-line argument, to
+      separate git-push-all.sh script arguments from arguments that are passed
+      through to git push. Closes ticket 31314.

+ 21 - 6
scripts/git/git-push-all.sh

@@ -1,6 +1,7 @@
 #!/usr/bin/env bash
 
-# Usage: git-push-all.sh -t <test-branch-prefix> -r <remote-name> <git-opts>
+# Usage: git-push-all.sh -t <test-branch-prefix> -r <remote-name>
+#                        -- <git-opts>
 #        env vars: TOR_UPSTREAM_REMOTE_NAME=upstream TOR_PUSH_DELAY=0
 #        git-opts: --no-atomic --dry-run (any other git push option)
 #
@@ -16,6 +17,8 @@ set -e
 
 # Don't change this configuration - set the env vars in your .profile
 #
+# git push command and default arguments
+GIT_PUSH=${TOR_GIT_PUSH:-"git push --atomic"}
 # The upstream remote which git.torproject.org/tor.git points to.
 # In test branch mode, override this setting with -r <remote-name>
 UPSTREAM_REMOTE=${TOR_UPSTREAM_REMOTE_NAME:-"upstream"}
@@ -46,11 +49,21 @@ while getopts ":r:t:" opt; do
        OPTIND=$[$OPTIND - 2]
        ;;
     *)
-       # Assume git push will handle the option
+       # Assume we're done with script arguments,
+       # and git push will handle the option
+       break
        ;;
   esac
 done
 
+# getopts doesn't allow "-" as an option character,
+# so we have to handle -- manually
+if [ "$1" = "--" ]; then
+  shift
+fi
+
+echo "Calling git push --atomic $@ <branches>"
+
 if [ "$TEST_BRANCH_PREFIX" ]; then
   if [ "$UPSTREAM_REMOTE" = ${TOR_UPSTREAM_REMOTE_NAME:-"upstream"} ]; then
     echo "Pushing test branches ${TEST_BRANCH_PREFIX}_nnn to " \
@@ -108,9 +121,11 @@ if [ "$PUSH_DELAY" -le 0 ]; then
   # it is safe to use it unquoted.  (This also applies to the other shellcheck
   # exceptions below.)
   #
+  # Push all the branches at the same time
   # shellcheck disable=SC2086
-  git push --atomic "$@" "$UPSTREAM_REMOTE" $PUSH_BRANCHES
+  $GIT_PUSH "$@" "$UPSTREAM_REMOTE" $PUSH_BRANCHES
 else
+  # Push the branches in optimal CI order, with a delay between each push
   PUSH_BRANCHES=$(echo "$PUSH_BRANCHES" | tr " " "\n" | sort -V)
   MASTER_BRANCH=$(echo "$PUSH_BRANCHES" | tr " " "\n" | grep master)
   if [ -z "$TEST_BRANCH_PREFIX" ]; then
@@ -127,15 +142,15 @@ else
     # No release branches
     RELEASE_BRANCHES=
   fi
-  git push "$@" "$UPSTREAM_REMOTE" "$MASTER_BRANCH"
+  $GIT_PUSH "$@" "$UPSTREAM_REMOTE" "$MASTER_BRANCH"
   sleep "$PUSH_DELAY"
   # shellcheck disable=SC2086
   for b in $MAINT_BRANCHES; do
-    git push "$@" "$UPSTREAM_REMOTE" "$b"
+    $GIT_PUSH "$@" "$UPSTREAM_REMOTE" "$b"
     sleep "$PUSH_DELAY"
   done
   if [ "$RELEASE_BRANCHES" ]; then
     # shellcheck disable=SC2086
-    git push --atomic "$@" "$UPSTREAM_REMOTE" $RELEASE_BRANCHES
+    $GIT_PUSH "$@" "$UPSTREAM_REMOTE" $RELEASE_BRANCHES
   fi
 fi