The branch master has been updated via debabf50f5f2d7d0de575c69f8af642e9e84ae77 (commit) via c728b5e389a29e30759acc1baa7dcf0d05b6f0d0 (commit) via 3bfc3b4bc4fbc9026afed38335f15b1b0cbbfd4c (commit) via 41d7c0e63bf92b762f0369f0a56e25dfc51b2061 (commit) via 9ce7e5fb4ed7546ba412d14422e4bf2713bc1440 (commit) from b57692c1f0b653ba5e4cbb2ae581b6f9def2bb45 (commit)
- Log ----------------------------------------------------------------- commit debabf50f5f2d7d0de575c69f8af642e9e84ae77 Author: Dr. David von Oheimb <david.von.ohe...@siemens.com> Date: Mon Nov 22 13:37:50 2021 +0100 ghmerge: restore to original commit HEAD of target on error/abort Also add an empty line before the git log output for readability. Reviewed-by: Tomas Mraz <to...@openssl.org> (Merged from https://github.com/openssl/tools/pull/97) commit c728b5e389a29e30759acc1baa7dcf0d05b6f0d0 Author: Dr. David von Oheimb <david.von.ohe...@siemens.com> Date: Mon Nov 22 12:52:44 2021 +0100 ghmerge: correct assignment to WORK_USED Reviewed-by: Tomas Mraz <to...@openssl.org> (Merged from https://github.com/openssl/tools/pull/97) commit 3bfc3b4bc4fbc9026afed38335f15b1b0cbbfd4c Author: Dr. David von Oheimb <david.von.ohe...@siemens.com> Date: Mon Nov 22 12:31:18 2021 +0100 ghmerge: Rename --ref to --target for clarity We are keeping --ref for backward compat. Reviewed-by: Tomas Mraz <to...@openssl.org> (Merged from https://github.com/openssl/tools/pull/97) commit 41d7c0e63bf92b762f0369f0a56e25dfc51b2061 Author: Dr. David von Oheimb <david.von.ohe...@siemens.com> Date: Wed Nov 17 14:14:36 2021 +0100 ghmerge: extend --cherry-pick with the number of commits to pick Reviewed-by: Paul Dale <pa...@openssl.org> Reviewed-by: Tomas Mraz <to...@openssl.org> (Merged from https://github.com/openssl/tools/pull/97) commit 9ce7e5fb4ed7546ba412d14422e4bf2713bc1440 Author: Dr. David von Oheimb <david.von.ohe...@siemens.com> Date: Mon Oct 25 14:45:17 2021 +0200 ghmerge: Fix behavior on failed cherry-pick, rebase, and pull Reviewed-by: Paul Dale <pa...@openssl.org> Reviewed-by: Tomas Mraz <to...@openssl.org> (Merged from https://github.com/openssl/tools/pull/97) ----------------------------------------------------------------------- Summary of changes: review-tools/ghmerge | 106 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 68 insertions(+), 38 deletions(-) diff --git a/review-tools/ghmerge b/review-tools/ghmerge index 7d1fc25..1371bfb 100755 --- a/review-tools/ghmerge +++ b/review-tools/ghmerge @@ -11,8 +11,9 @@ Option style arguments: --tools Merge a tools PR (rather than openssl PR) --web Merge a web PR (rather than openssl PR) --remote <remote> Repo to merge with (rather than git.openssl.org), usually 'upstream' ---ref <branch> Branch to merge with (rather than current branch), usually 'master' ---cherry-pick Use cherry-pick (rather than pull --rebase) +--target <branch> Merge target (rather than current branch), usually 'master' +--ref <branch> A synonym for --target +--cherry-pick [<n>] Cherry-pick the last n (1 <= n <= 99, default: 1) commits, rather than rebasing --squash Squash new commits non-interactively (allows editing msg) --noautosquash Do not automatically squash fixups in interactive rebase --nobuild Do not call 'openssbuild' before merging @@ -22,7 +23,8 @@ Examples: ghmerge 12345 mattcaswell ghmerge 12345 paulidale t8m --nobuild --myemail=d...@ddvo.net ghmerge edd05b7^^^^..19692bb2c32 --squash -- 12345 levitte - ghmerge 12345 slontis --ref openssl-3.0" + ghmerge 12345 slontis --target openssl-3.0 + ghmerge --nobuild --target openssl-3.0 --cherry-pick 3 16051 paulidale" exit 9 } @@ -33,7 +35,7 @@ PICK=no INTERACTIVE=yes AUTOSQUASH="--autosquash" REMOTE="" -REF="" +TARGET="" BUILD=yes [ -z ${CC+x} ] && CC="ccache gcc" # opensslbuild will otherwise use "ccache clang-3.6" @@ -59,7 +61,11 @@ while [ $# -ne 0 ]; do WHAT=web ; BUILD=no ; shift ;; --cherry-pick) - PICK=yes ; shift + shift; + PICK=1; + if [ "$1" != "" ] && [ $1 -ge 1 ] 2>/dev/null && [ $1 -le 99 ]; then + PICK=$1 ; shift + fi ;; --noautosquash) AUTOSQUASH="" ; shift @@ -77,12 +83,12 @@ while [ $# -ne 0 ]; do fi shift; REMOTE=$1; shift ;; - --ref) + --target|--ref) if [ $# -lt 2 ] ; then echo "Missing argument of '$1'" usage_exit fi - shift; REF=$1; shift + shift; TARGET=$1; shift ;; --) if [ $# -lt 3 ] ; then @@ -165,7 +171,18 @@ function cleanup { rv=$? echo # make sure to enter new line, needed, e.g., after Ctrl-C [ $rv -ne 0 ] && echo -e "\nghmerge failed" - if [ "$REF" != "$ORIG_REF" ] || [ "$WORK_USED" != "" ]; then + if [ "$REBASING" == 1 ] ; then + git rebase --abort 2>/dev/null || true + fi + if [ "$CHERRYPICKING" == 1 ] ; then + echo "Hint: maybe --cherry-pick was not given a suitable <n> parameter." + git cherry-pick --abort 2>/dev/null || true + fi + if [ "$ORIG_TARGET_HEAD" != "" ]; then + echo Restoring original commit HEAD of $TARGET + git reset --hard "$ORIG_TARGET_HEAD" + fi + if [ "$TARGET" != "$ORIG_REF" ] || [ "$WORK_USED" != "" ]; then echo Returning to previous branch $ORIG_REF git checkout -q $ORIG_REF fi @@ -173,61 +190,73 @@ function cleanup { git branch -qD $WORK_USED fi if [ "$STASH_OUT" != "No local changes to save" ]; then - git stash pop -q # restore original state, pruning any leftover commits added locally + git stash pop -q # restore original state of $ORIG_REF, pruning any leftover commits added locally fi } trap 'cleanup' EXIT -[ "$REF" = "" ] && REF=$ORIG_REF -if [ "$REF" != "$ORIG_REF" ]; then - echo -n "Press Enter to checkout $REF: "; read foo - git checkout $REF +[ "$TARGET" = "" ] && TARGET=$ORIG_REF +if [ "$TARGET" != "$ORIG_REF" ]; then + echo -n "Press Enter to checkout $TARGET: "; read foo + git checkout $TARGET fi -echo -n "Press Enter to pull the latest $REMOTE/$REF: "; read foo -git pull $REMOTE $REF || (git rebase --abort; exit 1) +echo -n "Press Enter to pull the latest $REMOTE/$TARGET: "; read foo +REBASING=1 +git pull $REMOTE $TARGET || exit 1 +REBASING= -WORK_USED=$WORK # append new commits from $REPO/$BRANCH -if [ "$PICK" != "yes" ]; then - echo Rebasing $REPO/$BRANCH on $REF... +if [ "$PICK" == "no" ]; then + echo Rebasing $REPO/$BRANCH on $TARGET... git fetch $REPO $BRANCH && git checkout -b $WORK FETCH_HEAD WORK_USED=$WORK - git rebase $REF || (echo 'Fix or Ctrl-d to abort' ; read || (git rebase --abort; exit 1)) + REBASING=1 + git rebase $TARGET || (echo 'Fix or Ctrl-d to abort' ; read || exit 1) + REBASING= else - echo Cherry-picking $REPO/$BRANCH to $REF... - git checkout -b $WORK $REF + echo Cherry-picking $REPO/$BRANCH to $TARGET... + git checkout -b $WORK $TARGET WORK_USED=$WORK - git fetch $REPO $BRANCH && git cherry-pick FETCH_HEAD + CHERRYPICKING=1 + git fetch $REPO $BRANCH && (git cherry-pick FETCH_HEAD~$PICK..FETCH_HEAD || exit 1) + CHERRYPICKING= fi -echo Diff against $REMOTE/$REF -git diff $REMOTE/$REF +echo Diff against $REMOTE/$TARGET +git diff $REMOTE/$TARGET if [ "$INTERACTIVE" == "yes" ] ; then - echo -n "Press Enter to interactively rebase $AUTOSQUASH on $REMOTE/$REF: "; read foo - git rebase -i $AUTOSQUASH $REMOTE/$REF || (git rebase --abort; exit 1) - echo "Calling addrev $ADDREVOPTS --prnum=$PRNUM $TEAM $REMOTE/$REF.." - addrev $ADDREVOPTS --prnum=$PRNUM $TEAM $REMOTE/$REF.. + echo -n "Press Enter to interactively rebase $AUTOSQUASH on $REMOTE/$TARGET: "; read foo + REBASING=1 + git rebase -i $AUTOSQUASH $REMOTE/$TARGET || exit 1 + REBASING= + echo "Calling addrev $ADDREVOPTS --prnum=$PRNUM $TEAM $REMOTE/$TARGET.." + addrev $ADDREVOPTS --prnum=$PRNUM $TEAM $REMOTE/$TARGET.. fi -echo Log since $REMOTE/$REF -git log $REMOTE/$REF.. +echo +echo Log since $REMOTE/$TARGET +git log $REMOTE/$TARGET.. -git checkout $REF +git checkout $TARGET if [ "$INTERACTIVE" != "yes" ] ; then - echo -n "Press Enter to non-interactively merge --squash $BRANCH to $REMOTE/$REF: "; read foo + echo -n "Press Enter to non-interactively merge --squash $BRANCH to $REMOTE/$TARGET: "; read foo + ORIG_TARGET_HEAD=`git show -s --format="%H"` git merge --ff-only --no-commit --squash $WORK AUTHOR=`git show --no-patch --pretty="format:%an <%ae>" $WORK` git commit --author="$AUTHOR" - addrev $ADDREVOPTS --prnum=$PRNUM $TEAM $REMOTE/${REF}.. + addrev $ADDREVOPTS --prnum=$PRNUM $TEAM $REMOTE/${TARGET}.. else - # echo -n "Press Enter to merge to $REMOTE/$REF: "; read foo + # echo -n "Press Enter to merge to $TARGET: "; read foo + echo + echo "Merging to $TARGET" + ORIG_TARGET_HEAD=`git show -s --format="%H"` git merge --ff-only $WORK fi -echo New log since $REMOTE/$REF -git log $REMOTE/$REF.. +echo New log since $REMOTE/$TARGET +git log $REMOTE/$TARGET.. if [ "$BUILD" == "yes" ] ; then echo Rebuilding... @@ -235,7 +264,7 @@ if [ "$BUILD" == "yes" ] ; then fi while true ; do - echo -n "Enter 'y'/'yes' to push to $REMOTE/$REF or 'n'/'no' to abort: " + echo -n "Enter 'y'/'yes' to push to $REMOTE/$TARGET or 'n'/'no' to abort: " read x x="`echo $x | tr A-Z a-z`" if [ "$x" = "y" -o "$x" = "yes" -o "$x" = "n" -o "$x" = "no" ] ; then @@ -244,5 +273,6 @@ while true ; do done if [ "$x" = "y" -o "$x" = "yes" ] ; then - git push -v $REMOTE $REF + git push -v $REMOTE $TARGET + ORIG_TARGET_HEAD= fi