mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-09-20 13:06:20 +02:00
Merge branch 'tor-github/pr/1720'
This commit is contained in:
commit
a62e3e45e6
153
scripts/git/git-list-tor-branches.sh
Executable file
153
scripts/git/git-list-tor-branches.sh
Executable file
@ -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
|
@ -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_041=( "maint-0.4.1" "maint-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.1" \
|
||||
"_041" "_035")
|
||||
MAINT_042=( "maint-0.4.2" "maint-0.4.1" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.2" \
|
||||
"_042" "_041")
|
||||
MAINT_043=( "maint-0.4.3" "maint-0.4.2" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.3" \
|
||||
"_043" "_042")
|
||||
MAINT_MASTER=( "master" "maint-0.4.3" "$GIT_PATH/$TOR_MASTER_NAME" \
|
||||
"_master" "_043")
|
||||
|
||||
RELEASE_035=( "release-0.3.5" "maint-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/release-0.3.5" )
|
||||
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" )
|
||||
RELEASE_043=( "release-0.4.3" "maint-0.4.3" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.3" )
|
||||
|
||||
# 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_041[0]}
|
||||
${MAINT_042[0]}
|
||||
${MAINT_043[0]}
|
||||
${MAINT_MASTER[0]}
|
||||
${RELEASE_035[0]}
|
||||
${RELEASE_041[0]}
|
||||
${RELEASE_042[0]}
|
||||
${RELEASE_043[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_041[@]
|
||||
RELEASE_041[@]
|
||||
|
||||
MAINT_042[@]
|
||||
RELEASE_042[@]
|
||||
|
||||
MAINT_043[@]
|
||||
RELEASE_043[@]
|
||||
|
||||
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_041[@]
|
||||
|
||||
MAINT_042[@]
|
||||
|
||||
MAINT_043[@]
|
||||
|
||||
MAINT_MASTER[@]
|
||||
)
|
||||
|
||||
eval "$(git-list-tor-branches.sh -m -R)"
|
||||
fi
|
||||
set +e
|
||||
|
||||
COUNT=${#WORKTREE[@]}
|
||||
|
||||
|
@ -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_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_043=( "maint-0.4.3" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.3" )
|
||||
MAINT_MASTER=( "master" "$GIT_PATH/$TOR_MASTER_NAME" )
|
||||
|
||||
RELEASE_035=( "release-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/release-0.3.5" )
|
||||
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" )
|
||||
RELEASE_043=( "release-0.4.3" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.3" )
|
||||
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_041[0]}
|
||||
${MAINT_042[0]}
|
||||
${MAINT_043[0]}
|
||||
${MAINT_MASTER[0]}
|
||||
${RELEASE_035[0]}
|
||||
${RELEASE_041[0]}
|
||||
${RELEASE_042[0]}
|
||||
${RELEASE_043[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_041[@]
|
||||
RELEASE_041[@]
|
||||
|
||||
MAINT_042[@]
|
||||
RELEASE_042[@]
|
||||
|
||||
MAINT_043[@]
|
||||
RELEASE_043[@]
|
||||
|
||||
MAINT_MASTER[@]
|
||||
)
|
||||
COUNT=${#WORKTREE[@]}
|
||||
|
||||
#######################
|
||||
|
@ -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.3 \
|
||||
"$DEFAULT_UPSTREAM_REMOTE"/{release,maint}-0.4.2 \
|
||||
"$DEFAULT_UPSTREAM_REMOTE"/{release,maint}-0.4.1 \
|
||||
"$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.3 \
|
||||
"$UPSTREAM_REMOTE"/{release,maint}-0.4.2 \
|
||||
"$UPSTREAM_REMOTE"/{release,maint}-0.4.1 \
|
||||
"$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.3 \
|
||||
{release,maint}-0.4.2 \
|
||||
{release,maint}-0.4.1 \
|
||||
{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.3 \
|
||||
{release,maint}-0.4.2 \
|
||||
{release,maint}-0.4.1 \
|
||||
{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}_043 \
|
||||
${TEST_BRANCH_PREFIX}_042 \
|
||||
${TEST_BRANCH_PREFIX}_041 \
|
||||
${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 #
|
||||
###############
|
||||
|
@ -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_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_043=( "maint-0.4.3" "$GIT_PATH/$TOR_WKT_NAME/maint-0.4.3" )
|
||||
MAINT_MASTER=( "master" "$GIT_PATH/$TOR_MASTER_NAME" )
|
||||
|
||||
RELEASE_035=( "release-0.3.5" "$GIT_PATH/$TOR_WKT_NAME/release-0.3.5" )
|
||||
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" )
|
||||
RELEASE_043=( "release-0.4.3" "$GIT_PATH/$TOR_WKT_NAME/release-0.4.3" )
|
||||
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_041[0]}
|
||||
${MAINT_042[0]}
|
||||
${MAINT_043[0]}
|
||||
${MAINT_MASTER[0]}
|
||||
${RELEASE_035[0]}
|
||||
${RELEASE_041[0]}
|
||||
${RELEASE_042[0]}
|
||||
${RELEASE_043[0]}
|
||||
EOF
|
||||
|
||||
#######################
|
||||
# Argument processing #
|
||||
#######################
|
||||
@ -161,22 +135,6 @@ done
|
||||
# Git worktrees to manage #
|
||||
###########################
|
||||
|
||||
WORKTREE=(
|
||||
MAINT_035[@]
|
||||
RELEASE_035[@]
|
||||
|
||||
MAINT_041[@]
|
||||
RELEASE_041[@]
|
||||
|
||||
MAINT_042[@]
|
||||
RELEASE_042[@]
|
||||
|
||||
MAINT_043[@]
|
||||
RELEASE_043[@]
|
||||
|
||||
MAINT_MASTER[@]
|
||||
)
|
||||
|
||||
COUNT=${#WORKTREE[@]}
|
||||
|
||||
#############
|
||||
|
Loading…
Reference in New Issue
Block a user