summaryrefslogtreecommitdiff
path: root/scripts/git
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/git')
-rwxr-xr-xscripts/git/git-install-tools.sh189
-rwxr-xr-xscripts/git/git-list-tor-branches.sh153
-rwxr-xr-xscripts/git/git-merge-forward.sh77
-rwxr-xr-xscripts/git/git-pull-all.sh59
-rwxr-xr-xscripts/git/git-push-all.sh51
-rwxr-xr-xscripts/git/git-setup-dirs.sh48
-rwxr-xr-xscripts/git/pre-push.git-hook9
7 files changed, 378 insertions, 208 deletions
diff --git a/scripts/git/git-install-tools.sh b/scripts/git/git-install-tools.sh
new file mode 100755
index 0000000000..ef8623a018
--- /dev/null
+++ b/scripts/git/git-install-tools.sh
@@ -0,0 +1,189 @@
+#!/usr/bin/env bash
+
+SCRIPT_NAME=$(basename "$0")
+SCRIPTS_DIR=$(dirname "$0")
+
+TOOL_NAMES=(push-all pull-all merge-forward list-tor-branches)
+
+function usage()
+{
+ echo "$SCRIPT_NAME [-h] [-n] [-v] [-f] <all|hooks|tools|aliases>"
+ echo
+ echo " flags:"
+ echo " -h: show this help text"
+ echo " -n: dry-run"
+ echo " -v: verbose mode"
+ echo " -f: force-install even if \$TOR_DEVTOOLS_DIR looks fishy"
+ echo
+ echo " modes:"
+ echo " hooks: install git hooks in this repository."
+ echo " tools: install scripts in \$TOR_DEVTOOLS_DIR"
+ echo " aliases: set up global git aliases for git tools in \$TOR_DEVTOOLS_DIR"
+ echo " all: all of the above."
+}
+
+INSTALL_HOOKS=0
+INSTALL_TOOLS=0
+INSTALL_ALIASES=0
+
+DRY_RUN=0
+VERBOSE=0
+FORCE=0
+
+while getopts "hnfv" opt; do
+ case "$opt" in
+ h) usage
+ exit 0
+ ;;
+ n) DRY_RUN=1
+ ;;
+ v) VERBOSE=1
+ ;;
+ f) FORCE=1
+ ;;
+ *) echo
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+for item in "${@:$OPTIND}"; do
+ case "$item" in
+ hooks) INSTALL_HOOKS=1
+ ;;
+ tools) INSTALL_TOOLS=1
+ ;;
+ aliases) INSTALL_ALIASES=1
+ ;;
+ all) INSTALL_HOOKS=1
+ INSTALL_TOOLS=1
+ INSTALL_ALIASES=1
+ ;;
+ *) echo "Unrecognized mode '$item'"
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+if [[ $VERBOSE = 1 ]]; then
+ function note()
+ {
+ echo "$@"
+ }
+else
+ function note()
+ {
+ true
+ }
+fi
+
+function fail()
+{
+ echo "$@" 1>&2
+ exit 1
+}
+
+if [[ $INSTALL_HOOKS = 0 && $INSTALL_TOOLS = 0 && $INSTALL_ALIASES = 0 ]]; then
+ echo "Nothing to do. Try $SCRIPT_NAME -h for a list of commands."
+ exit 0
+fi
+
+if [[ $INSTALL_TOOLS = 1 || $INSTALL_ALIASES = 1 ]]; then
+ if [[ -z "$TOR_DEVTOOLS_DIR" ]] ; then
+ fail "\$TOR_DEVTOOLS_DIR was not set."
+ fi
+ note "Checking whether \$TOR_DEVTOOLS_DIR ($TOR_DEVTOOLS_DIR) is a git repo..."
+ GITDIR=$(cd "$TOR_DEVTOOLS_DIR" && git rev-parse --git-dir 2>/dev/null)
+ note "GITDIR is $GITDIR"
+ if [[ -n "$GITDIR" ]] ; then
+ cat <<EOF
+You have asked me to install to \$TOR_DEVTOOLS_DIR ($TOR_DEVTOOLS_DIR).
+That is inside a git repository, so you might not want to install there:
+depending on what you pull or push, you might find yourself giving somebody
+else write access to your scripts. I think you should just use ~/bin or
+something.
+EOF
+
+ echo
+ if [[ "$FORCE" = 1 ]] ; then
+ echo "I will install anyway, since you said '-f'."
+ else
+ echo "I will not install. You can tell me -f if you are really sure."
+ exit 1
+ fi
+ else
+ note "It was not."
+ fi
+fi
+
+if [[ ! -d "$SCRIPTS_DIR" || ! -e "$SCRIPTS_DIR/git-push-all.sh" ]]; then
+ fail "Couldn't find scripts in '$SCRIPTS_DIR'"
+fi
+
+if [[ $DRY_RUN = 1 ]]; then
+ echo "** DRY RUN **"
+ RUN="echo >>"
+else
+ RUN=
+fi
+
+set -e
+
+# ======================================================================
+if [[ $INSTALL_HOOKS = 1 ]]; then
+ HOOKS_DIR=$(git rev-parse --git-path hooks)
+
+ note "Looking for hooks directory"
+
+ if [[ -z "$HOOKS_DIR" || ! -d "$HOOKS_DIR" ]]; then
+ fail "Couldn't find git hooks directory."
+ fi
+
+ note "Found hooks directory in $HOOKS_DIR"
+
+ note "Installing hooks"
+ for fn in "$SCRIPTS_DIR"/*.git-hook; do
+ name=$(basename "$fn")
+ $RUN install --backup "$fn" "${HOOKS_DIR}/${name%.git-hook}"
+ done
+fi
+
+
+# ======================================================================
+if [[ $INSTALL_TOOLS = 1 ]]; then
+ note "Installing tools."
+ note "Looking for \$TOR_DEVTOOLS_DIR ($TOR_DEVTOOLS_DIR)"
+
+ if [[ ! -d "$TOR_DEVTOOLS_DIR" ]]; then
+ note "Creating directory"
+ $RUN mkdir -p "$TOR_DEVTOOLS_DIR"
+ fi
+
+ note "Copying scripts"
+ for tool in "${TOOL_NAMES[@]}"; do
+ $RUN install --backup "${SCRIPTS_DIR}/git-${tool}.sh" "${TOR_DEVTOOLS_DIR}/"
+ done
+fi
+
+# ======================================================================
+if [[ $INSTALL_ALIASES = 1 ]]; then
+ note "Installing aliases."
+ note "Looking for \$TOR_DEVTOOLS_DIR ($TOR_DEVTOOLS_DIR)"
+
+ note "Checking for ${TOR_DEVTOOLS_DIR}/git-push-all.sh"
+ if [[ ! -x "${TOR_DEVTOOLS_DIR}/git-push-all.sh" ]]; then
+ if [[ $DRY_RUN = 0 ]]; then
+ fail "Could not find scripts in \$TOR_DEVTOOLS_DIR"
+ fi
+ fi
+
+ note "Setting aliases"
+ for tool in "${TOOL_NAMES[@]}"; do
+ $RUN git config --global "alias.$tool" \!"${TOR_DEVTOOLS_DIR}/git-${tool}.sh"
+ done
+
+fi
+
+note Done.
diff --git a/scripts/git/git-list-tor-branches.sh b/scripts/git/git-list-tor-branches.sh
new file mode 100755
index 0000000000..d6b30f064f
--- /dev/null
+++ b/scripts/git/git-list-tor-branches.sh
@@ -0,0 +1,153 @@
+#!/usr/bin/env bash
+
+# Script to be used by other git scripts, and provide a single place
+# that lists our supported branches. To change which branches are
+# supported, look at the end of the file that says 'edit here'.
+
+SCRIPT_NAME=$(basename "$0")
+
+function usage()
+{
+ echo "$SCRIPT_NAME [-h] [-l|-s|-b|-m] [-R]"
+ echo
+ echo " arguments:"
+ echo " -h: show this help text"
+ echo
+ echo " -l: list the active tor branches (default)"
+ echo " -s: list the suffixes to be used with the active tor branches"
+ echo " -b: write bash code setting WORKTREE to an array of ( branch path ) arrays"
+ echo " -m: write bash code setting WORKTREE to an array of"
+ echo " ( branch parent path suffix parent_suffix ) arrays"
+ echo
+ echo " -R: omit release branches."
+}
+
+# list : just a list of branch names.
+# branch_path : For git-setup-dirs.sh and git-pull-all.sh
+# suffix: write a list of suffixes.
+# merge: branch, upstream, path, suffix, upstream suffix.
+mode="list"
+skip_release_branches="no"
+
+while getopts "hblmsR" opt ; do
+ case "$opt" in
+ h) usage
+ exit 0
+ ;;
+ b) mode="branch_path"
+ ;;
+ l) mode="list"
+ ;;
+ s) mode="suffix"
+ ;;
+ m) mode="merge"
+ ;;
+ R) skip_release_branches="yes"
+ ;;
+ *) echo "Unknown option"
+ exit 1
+ ;;
+ esac
+done
+
+all_branch_vars=()
+
+prev_maint_branch=""
+prev_maint_suffix=""
+
+branch() {
+ # The name of the branch. (Supplied by caller) Ex: maint-0.4.3
+ brname="$1"
+
+ # The name of the branch with no dots. Ex: maint-043
+ brname_nodots="${brname//./}"
+ # The name of the branch with no dots, and _ instead of -. Ex: maint_043
+ brname_nodots_uscore="${brname_nodots//-/_}"
+ # Name to use for a variable to represent the branch. Ex: MAINT_043
+ varname="${brname_nodots_uscore^^}"
+
+ is_maint="no"
+
+ # suffix: a suffix to place at the end of branches we generate with respect
+ # to this branch. Ex: _043
+
+ # location: where the branch can be found.
+
+ if [[ "$brname" == "master" ]]; then
+ suffix="_master"
+ location="\$GIT_PATH/\$TOR_MASTER_NAME"
+ elif [[ "$brname" =~ ^maint- ]]; then
+ suffix="_${brname_nodots#maint-}"
+ location="\$GIT_PATH/\$TOR_WKT_NAME/$brname"
+ is_maint="yes"
+ elif [[ "$brname" =~ ^release- ]]; then
+ suffix="_r${brname_nodots#release-}"
+ location="\$GIT_PATH/\$TOR_WKT_NAME/$brname"
+
+ if [[ "$skip_release_branches" = "yes" ]]; then
+ return
+ fi
+ else
+ echo "Unrecognized branch type '${brname}'" >&2
+ exit 1
+ fi
+
+ all_branch_vars+=("$varname")
+
+ # Now emit the per-branch information
+ if [[ "$mode" == "branch_path" ]]; then
+ echo "${varname}=( \"$brname\" \"$location\" )"
+ elif [[ "$mode" == "merge" ]]; then
+ echo "${varname}=( \"$brname\" \"$prev_maint_branch\" \"$location\" \"$suffix\" \"$prev_maint_suffix\" )"
+ elif [[ "$mode" == "list" ]]; then
+ echo "$brname"
+ elif [[ "$mode" == "suffix" ]]; then
+ echo "$suffix"
+ else
+ echo "unknown mode $mode" >&2
+ exit 1
+ fi
+
+ if [[ "$is_maint" == "yes" ]]; then
+ prev_maint_branch="$brname"
+ prev_maint_suffix="$suffix"
+ fi
+}
+
+finish() {
+ if [[ "$mode" == branch_path ]] || [[ "$mode" == merge ]]; then
+ echo "WORKTREE=("
+ for v in "${all_branch_vars[@]}"; do
+ echo " ${v}[@]"
+ done
+ echo ")"
+ elif [[ "$mode" == list ]] || [[ "$mode" == suffix ]]; then
+ # nothing to do
+ :
+ else
+ echo "unknown mode $mode" >&2
+ exit 1
+ fi
+}
+
+# ==============================
+# EDIT HERE
+# ==============================
+# List of all branches. These must be in order, from oldest to newest, with
+# maint before release.
+
+branch maint-0.3.5
+branch release-0.3.5
+
+branch maint-0.4.1
+branch release-0.4.1
+
+branch maint-0.4.2
+branch release-0.4.2
+
+branch maint-0.4.3
+branch release-0.4.3
+
+branch master
+
+finish
diff --git a/scripts/git/git-merge-forward.sh b/scripts/git/git-merge-forward.sh
index bbc5047cb7..7c72f8478d 100755
--- a/scripts/git/git-merge-forward.sh
+++ b/scripts/git/git-merge-forward.sh
@@ -91,41 +91,11 @@ TOR_WKT_NAME=${TOR_WKT_NAME:-"tor-wkt"}
# But it's the earliest maint branch, so we don't merge forward into it.
# Since we don't merge forward into it, the second and fifth items must be
# blank ("").
-MAINT_035_TB=( "maint-0.3.5" "" "$GIT_PATH/$TOR_WKT_NAME/maint-0.3.5" \
- "_035" "")
-# Used in maint/release merge and test branch modes
-MAINT_040=( "maint-0.4.0" "maint-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.0" \
- "_040" "_035")
-MAINT_041=( "maint-0.4.1" "maint-0.4.0" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.1" \
- "_041" "_040")
-MAINT_042=( "maint-0.4.2" "maint-0.4.1" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.2" \
- "_042" "_041")
-MAINT_MASTER=( "master" "maint-0.4.2" "$GIT_PATH/$TOR_MASTER_NAME" \
- "_master" "_042")
-
-RELEASE_035=( "release-0.3.5" "maint-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/release-0.3.5" )
-RELEASE_040=( "release-0.4.0" "maint-0.4.0" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.0" )
-RELEASE_041=( "release-0.4.1" "maint-0.4.1" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.1" )
-RELEASE_042=( "release-0.4.2" "maint-0.4.2" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.2" )
-
-# The master branch path has to be the main repository thus contains the
+
# origin that will be used to fetch the updates. All the worktrees are created
# from that repository.
ORIGIN_PATH="$GIT_PATH/$TOR_MASTER_NAME"
-# SC2034 -- shellcheck thinks that these are unused. We know better.
-ACTUALLY_THESE_ARE_USED=<<EOF
-${MAINT_035_TB[0]}
-${MAINT_040[0]}
-${MAINT_041[0]}
-${MAINT_042[0]}
-${MAINT_MASTER[0]}
-${RELEASE_035[0]}
-${RELEASE_040[0]}
-${RELEASE_041[0]}
-${RELEASE_042[0]}
-EOF
-
#######################
# Argument processing #
#######################
@@ -170,49 +140,16 @@ done
# Git worktrees to manage #
###########################
+set -e
if [ -z "$TEST_BRANCH_PREFIX" ]; then
-
# maint/release merge mode
- #
- # List of all worktrees to merge forward into. All defined above.
- # Ordering is important. Always the maint-* branch BEFORE the release-*.
- WORKTREE=(
- # We don't merge forward into MAINT_035_TB[@], because it's the earliest
- # maint branch
- RELEASE_035[@]
-
- MAINT_040[@]
- RELEASE_040[@]
-
- MAINT_041[@]
- RELEASE_041[@]
-
- MAINT_042[@]
- RELEASE_042[@]
-
- MAINT_MASTER[@]
- )
-
+ eval "$(git-list-tor-branches.sh -m)"
+ # Remove first element: we don't merge forward into it.
+ WORKTREE=( "${WORKTREE[@]:1}" )
else
-
- # Test branch mode: base test branches on maint branches only
- #
- # List of all worktrees to create test branches from. All defined above.
- # Ordering is important. All maint-* branches, including the earliest one.
- WORKTREE=(
- # We want a test branch based on the earliest maint branch
- MAINT_035_TB[@]
-
- MAINT_040[@]
-
- MAINT_041[@]
-
- MAINT_042[@]
-
- MAINT_MASTER[@]
- )
-
+ eval "$(git-list-tor-branches.sh -m -R)"
fi
+set +e
COUNT=${#WORKTREE[@]}
diff --git a/scripts/git/git-pull-all.sh b/scripts/git/git-pull-all.sh
index c8d115da01..7f82eda296 100755
--- a/scripts/git/git-pull-all.sh
+++ b/scripts/git/git-pull-all.sh
@@ -2,7 +2,7 @@
SCRIPT_NAME=$(basename "$0")
-function usage()
+usage()
{
echo "$SCRIPT_NAME [-h] [-n]"
echo
@@ -47,66 +47,15 @@ TOR_WKT_NAME=${TOR_WKT_NAME:-"tor-wkt"}
# Git branches to manage #
##########################
-# Configuration of the branches that need pulling. The values are in order:
-# (1) Branch name to pull (update).
-# (2) Full path of the git worktree.
-#
-# As an example:
-# $ cd <PATH/TO/WORKTREE> (3)
-# $ git checkout maint-0.3.5 (1)
-# $ git pull
-#
-# First set of arrays are the maint-* branch and then the release-* branch.
-# New arrays need to be in the WORKTREE= array else they aren't considered.
-MAINT_035=( "maint-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/maint-0.3.5" )
-MAINT_040=( "maint-0.4.0" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.0" )
-MAINT_041=( "maint-0.4.1" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.1" )
-MAINT_042=( "maint-0.4.2" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.2" )
-MAINT_MASTER=( "master" "$GIT_PATH/$TOR_MASTER_NAME" )
-
-RELEASE_035=( "release-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/release-0.3.5" )
-RELEASE_040=( "release-0.4.0" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.0" )
-RELEASE_041=( "release-0.4.1" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.1" )
-RELEASE_042=( "release-0.4.2" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.2" )
+set -e
+eval "$(git-list-tor-branches.sh -b)"
+set +e
# The master branch path has to be the main repository thus contains the
# origin that will be used to fetch the updates. All the worktrees are created
# from that repository.
ORIGIN_PATH="$GIT_PATH/$TOR_MASTER_NAME"
-# SC2034 -- shellcheck thinks that these are unused. We know better.
-ACTUALLY_THESE_ARE_USED=<<EOF
-${MAINT_035[0]}
-${MAINT_040[0]}
-${MAINT_041[0]}
-${MAINT_042[0]}
-${MAINT_MASTER[0]}
-${RELEASE_035[0]}
-${RELEASE_040[0]}
-${RELEASE_041[0]}
-${RELEASE_042[0]}
-EOF
-
-###########################
-# Git worktrees to manage #
-###########################
-
-# List of all worktrees to pull. All defined above. Ordering is not important.
-WORKTREE=(
- MAINT_035[@]
- RELEASE_035[@]
-
- MAINT_040[@]
- RELEASE_040[@]
-
- MAINT_041[@]
- RELEASE_041[@]
-
- MAINT_042[@]
- RELEASE_042[@]
-
- MAINT_MASTER[@]
-)
COUNT=${#WORKTREE[@]}
#######################
diff --git a/scripts/git/git-push-all.sh b/scripts/git/git-push-all.sh
index 0abddc8023..558ea8d01c 100755
--- a/scripts/git/git-push-all.sh
+++ b/scripts/git/git-push-all.sh
@@ -168,63 +168,42 @@ echo "Calling $GIT_PUSH" "$@" "<branches>"
# Git upstream remote branches #
################################
+set -e
DEFAULT_UPSTREAM_BRANCHES=
if [ "$DEFAULT_UPSTREAM_REMOTE" != "$UPSTREAM_REMOTE" ]; then
- DEFAULT_UPSTREAM_BRANCHES=$(echo \
- "$DEFAULT_UPSTREAM_REMOTE"/master \
- "$DEFAULT_UPSTREAM_REMOTE"/{release,maint}-0.4.2 \
- "$DEFAULT_UPSTREAM_REMOTE"/{release,maint}-0.4.1 \
- "$DEFAULT_UPSTREAM_REMOTE"/{release,maint}-0.4.0 \
- "$DEFAULT_UPSTREAM_REMOTE"/{release,maint}-0.3.5 \
- )
+ for br in $(git-list-tor-branches.sh -l); do
+ DEFAULT_UPSTREAM_BRANCHES="${DEFAULT_UPSTREAM_BRANCHES} ${DEFAULT_UPSTREAM_REMOTE}/${br}"
+ done
fi
-UPSTREAM_BRANCHES=$(echo \
- "$UPSTREAM_REMOTE"/master \
- "$UPSTREAM_REMOTE"/{release,maint}-0.4.2 \
- "$UPSTREAM_REMOTE"/{release,maint}-0.4.1 \
- "$UPSTREAM_REMOTE"/{release,maint}-0.4.0 \
- "$UPSTREAM_REMOTE"/{release,maint}-0.3.5 \
- )
+UPSTREAM_BRANCHES=
+for br in $(git-list-tor-branches.sh -l); do
+ UPSTREAM_BRANCHES="${UPSTREAM_BRANCHES} ${UPSTREAM_REMOTE}/${br}"
+done
########################
# Git branches to push #
########################
-PUSH_BRANCHES=$(echo \
- master \
- {release,maint}-0.4.2 \
- {release,maint}-0.4.1 \
- {release,maint}-0.4.0 \
- {release,maint}-0.3.5 \
- )
-
if [ -z "$TEST_BRANCH_PREFIX" ]; then
# maint/release push mode: push all branches.
#
# List of branches to push. Ordering is not important.
- PUSH_BRANCHES=$(echo \
- master \
- {release,maint}-0.4.2 \
- {release,maint}-0.4.1 \
- {release,maint}-0.4.0 \
- {release,maint}-0.3.5 \
- )
+ PUSH_BRANCHES="$(git-list-tor-branches.sh -l)"
else
# Test branch push mode: push test branches, based on each maint branch.
#
# List of branches to push. Ordering is not important.
- PUSH_BRANCHES=" \
- ${TEST_BRANCH_PREFIX}_master \
- ${TEST_BRANCH_PREFIX}_042 \
- ${TEST_BRANCH_PREFIX}_041 \
- ${TEST_BRANCH_PREFIX}_040 \
- ${TEST_BRANCH_PREFIX}_035 \
- "
+ PUSH_BRANCHES=""
+ for suffix in $(git-list-tor-branches.sh -s -R); do
+ PUSH_BRANCHES="${PUSH_BRANCHES} ${TEST_BRANCH_PREFIX}${suffix}"
+ done
fi
+set +e
+
###############
# Entry point #
###############
diff --git a/scripts/git/git-setup-dirs.sh b/scripts/git/git-setup-dirs.sh
index 20a148204a..1f61eb8b83 100755
--- a/scripts/git/git-setup-dirs.sh
+++ b/scripts/git/git-setup-dirs.sh
@@ -90,41 +90,15 @@ GITHUB_PUSH=${TOR_GITHUB_PUSH:-"No_Pushing_To_GitHub"}
# The branches and worktrees need to be modified when there is a new branch,
# and when an old branch is no longer supported.
-# Configuration of the branches that needs merging. The values are in order:
-# (0) current maint/release branch name
-# (1) Full path of the git worktree
-#
-# First set of arrays are the maint-* branch and then the release-* branch.
-# New arrays need to be in the WORKTREE= array else they aren't considered.
-MAINT_035=( "maint-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/maint-0.3.5" )
-MAINT_040=( "maint-0.4.0" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.0" )
-MAINT_041=( "maint-0.4.1" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.1" )
-MAINT_042=( "maint-0.4.2" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.2" )
-MAINT_MASTER=( "master" "$GIT_PATH/$TOR_MASTER_NAME" )
-
-RELEASE_035=( "release-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/release-0.3.5" )
-RELEASE_040=( "release-0.4.0" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.0" )
-RELEASE_041=( "release-0.4.1" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.1" )
-RELEASE_042=( "release-0.4.2" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.2" )
+set -e
+eval "$(git-list-tor-branches.sh -b)"
+set +e
# The master branch path has to be the main repository thus contains the
# origin that will be used to fetch the updates. All the worktrees are created
# from that repository.
ORIGIN_PATH="$GIT_PATH/$TOR_MASTER_NAME"
-# SC2034 -- shellcheck thinks that these are unused. We know better.
-ACTUALLY_THESE_ARE_USED=<<EOF
-${MAINT_035[0]}
-${MAINT_040[0]}
-${MAINT_041[0]}
-${MAINT_042[0]}
-${MAINT_MASTER[0]}
-${RELEASE_035[0]}
-${RELEASE_040[0]}
-${RELEASE_041[0]}
-${RELEASE_042[0]}
-EOF
-
#######################
# Argument processing #
#######################
@@ -161,22 +135,6 @@ done
# Git worktrees to manage #
###########################
-WORKTREE=(
- MAINT_035[@]
- RELEASE_035[@]
-
- MAINT_040[@]
- RELEASE_040[@]
-
- MAINT_041[@]
- RELEASE_041[@]
-
- MAINT_042[@]
- RELEASE_042[@]
-
- MAINT_MASTER[@]
-)
-
COUNT=${#WORKTREE[@]}
#############
diff --git a/scripts/git/pre-push.git-hook b/scripts/git/pre-push.git-hook
index 7b06f3734d..efa45b9860 100755
--- a/scripts/git/pre-push.git-hook
+++ b/scripts/git/pre-push.git-hook
@@ -26,7 +26,11 @@ z40=0000000000000000000000000000000000000000
upstream_name=${TOR_UPSTREAM_REMOTE_NAME:-"upstream"}
+# The working directory
workdir=$(git rev-parse --show-toplevel)
+# The .git directory
+# If $workdir is a worktree, then $gitdir is not $workdir/.git
+gitdir=$(git rev-parse --git-dir)
cd "$workdir" || exit 1
@@ -58,7 +62,8 @@ do
fi
# Call the pre-commit hook for the common checks, if it is executable
- if [ -x scripts/git/pre-commit.git-hook ]; then
+ pre_commit=${gitdir}/hooks/pre-commit
+ if [ -x "$pre_commit" ]; then
# Only check the files newly modified in this branch
CHECK_FILTER="git diff --name-only --diff-filter=ACMR $range"
# Use the appropriate owned tor source list to filter the changed
@@ -81,7 +86,7 @@ do
# We want word splitting here, because file names are space
# separated
# shellcheck disable=SC2086
- if ! scripts/git/pre-commit.git-hook $CHECK_FILES ; then
+ if ! "$pre_commit" $CHECK_FILES ; then
exit 1
fi
fi