[OS-BUILD PATCH 1/2] Add support for CI octopus merging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Don Zickus <dzickus@xxxxxxxxxx>

Add support for CI octopus merging

The intermediate branch rt-automated-devel was getting in the way as it
needed to be pushed with rt-devel and automotive-devel.  In prep to
remove that logic, add support for an octopus merge.

This requires creating another temporary branch for rebasing and
changing how ark_git_merge logic works.

Signed-off-by: Don Zickus <dzickus@xxxxxxxxxx>

diff --git a/redhat/scripts/ci/ark-ci-env.sh b/redhat/scripts/ci/ark-ci-env.sh
index blahblah..blahblah 100644
--- a/redhat/scripts/ci/ark-ci-env.sh
+++ b/redhat/scripts/ci/ark-ci-env.sh
@@ -56,22 +56,28 @@ ark_git_mirror()
 # Merge wrapper in case issues arise
 ark_git_merge()
 {
-	source_branch="$1"
-	target_branch="$2"
-	reset_branch="$3"
+	target_branch="$1"
+	branches="$2"
 
 	prev_branch="$(git rev-parse --abbrev-ref HEAD)"
-	ark_git_branch "$target_branch" "$source_branch"
+
+	# support octopus merge with branches variable.
+	# can't find a better way to convert multi branch string into
+	# something consumable for git-merge.  So convert to array and feed
+	# the array to git-merge.  Ugly but it works.
+	read -r -a source_branch <<< "$branches"
+	ark_git_branch "$target_branch" "${source_branch[@]}"
 	git checkout "$target_branch"
-	if test -n "$reset_branch"; then
-		# there are cases when the initial merge is a reset
-		git reset --hard "$source_branch"  || die "git reset $source_branch failed"
-	elif ! git merge -m "Merge '$source_branch' into '$target_branch'" "$source_branch"; then
+
+	# array causes headache to git-merge, use temp var msg
+	msg="Merge '${source_branch[@]}' into '$target_branch'"
+
+	if ! git merge -m "$msg" "${source_branch[@]}"; then
 		git merge --abort
 		printf "Merge conflict; halting!\n"
 		printf "To reproduce:\n"
 		printf "* git checkout %s\n" "${target_branch}"
-		printf "* git merge %s\n" "${source_branch}"
+		printf "* git merge %s\n" "${source_branch[@]}"
 		die "Merge conflicts"
 	fi
 
diff --git a/redhat/scripts/ci/ark-merge-rt.sh b/redhat/scripts/ci/ark-merge-rt.sh
index blahblah..blahblah 100755
--- a/redhat/scripts/ci/ark-merge-rt.sh
+++ b/redhat/scripts/ci/ark-merge-rt.sh
@@ -111,6 +111,7 @@ if test "$UPSTREAM_RT_DEVEL_VER" != "$OS_BUILD_VER"; then
 	# os-build stable tag
 	OS_BUILD_BASE_BRANCH="kernel-${MASTER_RT_DEVEL_VER}.0-0"
 fi
+UPSTREAM_RT_PREV_BRANCH=""
 
 # verify the core branches exist or use provided defaults
 UPSTREAM_RT_DEVEL_BRANCH="linux-${UPSTREAM_RT_DEVEL_VER}.y-rt"
@@ -140,33 +141,48 @@ ark_git_mirror "$DOWNSTREAM_RT_BRANCH" "$UPSTREAM_RT_TREE_NAME" "$UPSTREAM_RT_DE
 # finally merge the two correct branches
 ark_git_merge "$OS_BUILD_BASE_BRANCH" "$RT_AUTOMATED_BRANCH" "$RT_REBASE"
 ark_git_merge "$DOWNSTREAM_RT_BRANCH" "$RT_AUTOMATED_BRANCH"
+# handle rebasing
+if test "$UPSTREAM_RT_DEVEL_VER" != "$RT_DEVEL_VER" -o \
+	"$UPSTREAM_RT_DEVEL_VER" != "$AUTOMOTIVE_DEVEL_VER"; then
+	# we need the previous rt branch for rebase purposes
+	UPSTREAM_RT_PREV_BRANCH="linux-${OS_BUILD_VER_prev}.y-rt"
+	git fetch -q "$UPSTREAM_RT_TREE_NAME" "$UPSTREAM_RT_PREV_BRANCH"
 
-## MERGE the upstream branches to the development branches
-if test -n "$RT_REBASE"; then
 	# handle the rebase
 	# rebases usually go from prev version to new version
-	# rebuild the prev merge base in case the previous automated one is
-	# corrupted.
+	# rebuild the prev merge base as it isn't saved.
+	# then rebuild the current merge base as it isn't saved either
+	# because we use an octopus merge below.
 	prev_branch="$(git rev-parse --abbrev-ref HEAD)"
-	temp_branch="_temp_rt_devel_$(date +%F)"
-	git branch -D "$temp_branch" 2>/dev/null
-	git checkout -b "$temp_branch" "kernel-${OS_BUILD_VER_prev}.0-0"
-	git merge "$UPSTREAM_RT_TREE_NAME/linux-${OS_BUILD_VER_prev}.y-rt"
+	temp_prev_branch="_temp_prev_rt_devel_$(date +%F)"
+	git branch -D "$temp_prev_branch" 2>/dev/null
+	git fetch "$UPSTREAM_RT_TREE_NAME" "$UPSTREAM_RT_PREV_BRANCH"
+	git checkout -b "$temp_prev_branch" "kernel-${OS_BUILD_VER_prev}.0-0"
+	git merge "$UPSTREAM_RT_TREE_NAME/$UPSTREAM_RT_PREV_BRANCH"
+
+	# create devel merge branch to base octopus merge on.
+	temp_devel_branch="_temp_devel_rt_devel_$(date +%F)"
+	git branch -D "$temp_devel_branch" 2>/dev/null
+	git checkout -b "$temp_devel_branch" "$OS_BUILD_BASE_BRANCH"
+	git merge "$UPSTREAM_RT_TREE_NAME/$UPSTREAM_RT_DEVEL_BRANCH"
+
 	git checkout "$prev_branch"
-	ark_git_rebase "$RT_DEVEL_BRANCH" "$temp_branch" "$RT_AUTOMATED_BRANCH"
-	ark_git_rebase "$AUTOMOTIVE_DEVEL_BRANCH" "$temp_branch" "$RT_AUTOMATED_BRANCH"
-	git branch -D "$temp_branch"
+        # do the git rebase --onto $temp_devel_branch $temp_prev_branch
+	ark_git_rebase "$RT_DEVEL_BRANCH" "$temp_prev_branch" "$temp_devel_branch"
+	ark_git_rebase "$AUTOMOTIVE_DEVEL_BRANCH" "$temp_prev_branch" "$temp_devel_branch"
+	git branch -D "$temp_prev_branch"
+	git branch -D "$temp_devel_branch"
 fi
 
 ## Build -rt-devel branch, generate pending-rhel configs
-ark_git_merge "$RT_AUTOMATED_BRANCH" "$RT_DEVEL_BRANCH"
+ark_git_merge "$RT_DEVEL_BRANCH" "$OS_BUILD_BASE_BRANCH $UPSTREAM_RT_TREE_NAME/$UPSTREAM_RT_DEVEL_BRANCH"
 # don't care if configs were added or not hence '|| true'
 ark_update_configs "$RT_DEVEL_BRANCH" || true
 # skip pushing config update MRs, keep them in pending-rhel
 ark_push_changes "$RT_DEVEL_BRANCH" "skip"
 
 ## Build -automotive-devel branch, generate pending-rhel configs
-ark_git_merge "$RT_AUTOMATED_BRANCH" "$AUTOMOTIVE_DEVEL_BRANCH"
+ark_git_merge "$AUTOMOTIVE_DEVEL_BRANCH" "$OS_BUILD_BASE_BRANCH $UPSTREAM_RT_TREE_NAME/$UPSTREAM_RT_DEVEL_BRANCH"
 # don't care if configs were added or not hence '|| true'
 ark_update_configs "$AUTOMOTIVE_DEVEL_BRANCH" || true
 # skip pushing config update MRs, keep them in pending-rhel

--
https://gitlab.com/cki-project/kernel-ark/-/merge_requests/2969
--
_______________________________________________
kernel mailing list -- kernel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to kernel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/kernel@xxxxxxxxxxxxxxxxxxxxxxx
Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue




[Index of Archives]     [Fedora General Discussion]     [Older Fedora Users Archive]     [Fedora Advisory Board]     [Fedora Security]     [Fedora Devel Java]     [Fedora Legacy]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Mentors]     [Fedora Package Announce]     [Fedora Package Review]     [Fedora Music]     [Fedora Packaging]     [Centos]     [Fedora SELinux]     [Coolkey]     [Yum Users]     [Tux]     [Yosemite News]     [KDE Users]     [Fedora Art]     [Fedora Docs]     [USB]     [Asterisk PBX]

  Powered by Linux