summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2019-02-28 13:23:23 -0500
committerDavid Goulet <dgoulet@torproject.org>2019-03-01 09:24:46 -0500
commit436e0c8ca4a0cfb5206b404835c86aae45d98c86 (patch)
treedcf56cfc8cb8b96413210b30493e661af16f3335 /scripts
parentcb0d40304968735db5e85fc81e451a149bf05cc0 (diff)
downloadtor-436e0c8ca4a0cfb5206b404835c86aae45d98c86.tar.gz
tor-436e0c8ca4a0cfb5206b404835c86aae45d98c86.zip
maint: Make git scripts fetch origin once
Replace the "git pull" by one single "git fetch origin" and then "git merge" into each defined branches. This speeds up the process considerably. Closes #29616 Signed-off-by: David Goulet <dgoulet@torproject.org>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/maint/git-merge-forward.sh39
-rwxr-xr-xscripts/maint/git-pull-all.sh32
2 files changed, 64 insertions, 7 deletions
diff --git a/scripts/maint/git-merge-forward.sh b/scripts/maint/git-merge-forward.sh
index e22e7befad..4b294f4945 100755
--- a/scripts/maint/git-merge-forward.sh
+++ b/scripts/maint/git-merge-forward.sh
@@ -48,6 +48,11 @@ RELEASE_034=( "release-0.3.4" "maint-0.3.4" "$GIT_PATH/$TOR_WKT_NAME/release-0.3
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" )
+# 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"
+
##########################
# Git Worktree to manage #
##########################
@@ -146,6 +151,19 @@ function merge_branch
fi
}
+# Pull the given branch name.
+function merge_branch_origin
+{
+ local cmd="git merge --ff-only origin/$1"
+ printf " %s Merging branch origin/%s..." "$MARKER" "$1"
+ if [ $DRY_RUN -eq 0 ]; then
+ msg=$( eval "$cmd" 2>&1 )
+ validate_ret $? "$msg"
+ else
+ printf "\\n %s\\n" "${IWTH}$cmd${CNRM}"
+ fi
+}
+
# Go into the worktree repository.
function goto_repo
{
@@ -156,6 +174,19 @@ function goto_repo
cd "$1" || exit
}
+# Fetch the origin. No arguments.
+function fetch_origin
+{
+ local cmd="git fetch origin"
+ printf " %s Fetching origin..." "$MARKER"
+ if [ $DRY_RUN -eq 0 ]; then
+ msg=$( eval "$cmd" 2>&1 )
+ validate_ret $? "$msg"
+ else
+ printf "\\n %s\\n" "${IWTH}$cmd${CNRM}"
+ fi
+}
+
###############
# Entry point #
###############
@@ -170,6 +201,10 @@ while getopts "n" opt; do
esac
done
+# First, fetch the origin.
+goto_repo "$ORIGIN_PATH"
+fetch_origin
+
# Go over all configured worktree.
for ((i=0; i<COUNT; i++)); do
current=${!WORKTREE[$i]:0:1}
@@ -182,8 +217,8 @@ for ((i=0; i<COUNT; i++)); do
goto_repo "$repo_path"
# Checkout the current branch
switch_branch "$current"
- # Update the current branch with a pull to get the latest.
- pull_branch "$current"
+ # Update the current branch with an origin merge to get the latest.
+ merge_branch_origin "$current"
# Merge the previous branch. Ex: merge maint-0.2.5 into maint-0.2.9.
merge_branch "$previous" "$current"
done
diff --git a/scripts/maint/git-pull-all.sh b/scripts/maint/git-pull-all.sh
index e414ea28f0..9c6a0a8f45 100755
--- a/scripts/maint/git-pull-all.sh
+++ b/scripts/maint/git-pull-all.sh
@@ -47,6 +47,11 @@ RELEASE_034=( "release-0.3.4" "$GIT_PATH/$TOR_WKT_NAME/release-0.3.4" )
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" )
+# 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"
+
##########################
# Git Worktree to manage #
##########################
@@ -121,10 +126,10 @@ function switch_branch
}
# Pull the given branch name.
-function pull_branch
+function merge_branch
{
- local cmd="git pull"
- printf " %s Pulling branch %s..." "$MARKER" "$1"
+ local cmd="git merge --ff-only origin/$1"
+ printf " %s Merging branch origin/%s..." "$MARKER" "$1"
if [ $DRY_RUN -eq 0 ]; then
msg=$( eval "$cmd" 2>&1 )
validate_ret $? "$msg"
@@ -143,6 +148,19 @@ function goto_repo
cd "$1" || exit
}
+# Fetch the origin. No arguments.
+function fetch_origin
+{
+ local cmd="git fetch origin"
+ printf " %s Fetching origin..." "$MARKER"
+ if [ $DRY_RUN -eq 0 ]; then
+ msg=$( eval "$cmd" 2>&1 )
+ validate_ret $? "$msg"
+ else
+ printf "\\n %s\\n" "${IWTH}$cmd${CNRM}"
+ fi
+}
+
###############
# Entry point #
###############
@@ -157,6 +175,10 @@ while getopts "n" opt; do
esac
done
+# First, fetch the origin.
+goto_repo "$ORIGIN_PATH"
+fetch_origin
+
# Go over all configured worktree.
for ((i=0; i<COUNT; i++)); do
current=${!WORKTREE[$i]:0:1}
@@ -168,6 +190,6 @@ for ((i=0; i<COUNT; i++)); do
goto_repo "$repo_path"
# Checkout the current branch
switch_branch "$current"
- # Update the current branch with a pull to get the latest.
- pull_branch "$current"
+ # Update the current branch by merging the origin to get the latest.
+ merge_branch "$current"
done