diff --git a/ci/kokoro/build-merge-into-chromeos.sh b/ci/kokoro/build-merge-into-chromeos.sh index 8cfe5e4b6b..9ecc36eaa0 100755 --- a/ci/kokoro/build-merge-into-chromeos.sh +++ b/ci/kokoro/build-merge-into-chromeos.sh @@ -195,18 +195,21 @@ main() { parent_commit="FETCH_HEAD" fi - local merge_count=$(git log --oneline --decorate=no --no-color \ - "${parent_commit}..origin/main" | wc -l) - if [ "${merge_count}" -lt "$MIN_COMMIT_COUNT" ]; then - echo "Not enough commits to merge. Skipping." - return - fi - echo "Checking out parent: ${parent_commit}" git checkout -b chromeos "${parent_commit}" git branch --set-upstream-to origin/chromeos chromeos - "${KOKORO_ARTIFACTS_DIR}/create_merge" "origin/main" + local merge_count=$(git log --oneline --decorate=no --no-color \ + "${parent_commit}..origin/main" | wc -l) + if [ "${merge_count}" -ge "$MIN_COMMIT_COUNT" ]; then + "${KOKORO_ARTIFACTS_DIR}/create_merge" "origin/main" + else + echo "Not enough commits to merge." + fi + + # Rebase to integrate cherry-picks. Always resolve conflicts with content from origin/main. + git rebase --rebase-merges -X theirs + upload_with_retries echo "Abandoning previous dry runs" diff --git a/tools/chromeos/create_merge b/tools/chromeos/create_merge index b14e7c6b05..17bf7dc7cf 100755 --- a/tools/chromeos/create_merge +++ b/tools/chromeos/create_merge @@ -90,7 +90,9 @@ merge_message() { bug_references fi echo "TEST=CQ" - echo "" +} + +merge_trailers() { cq_depends if [ "${DRY_RUN_ONLY}" = true ]; then echo "Commit: false" @@ -99,7 +101,11 @@ merge_message() { main() { prerequisites - git merge -X theirs --no-ff "${MERGE_TARGET}" -m "$(merge_message)" + # Note: trailers need to be added in a separate -m argument. Otherwise trailing whitespace may + # be trimmed which can confuse the gerrit preupload hook when it's trying to add the Commit-Id + # trailer. + git merge -X theirs --no-ff "${MERGE_TARGET}" -m "$(merge_message)" -m "$(merge_trailers)" + git --no-pager log -n 1 }