git: 548548649f9e - main - git-arc: Use --head to avoid changing the checkout.

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Wed, 17 Aug 2022 23:19:49 UTC
The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=548548649f9e31d961db5d4956cbf53dff525054

commit 548548649f9e31d961db5d4956cbf53dff525054
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2022-08-17 23:19:31 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2022-08-17 23:19:31 +0000

    git-arc: Use --head to avoid changing the checkout.
    
    Rather than using 'git checkout' to move to the commit in question for
    create and update, use the '--head' argument to 'arc diff'.  This
    avoids the need to alter the current checkout and the related bits to
    save/restore HEAD in the current checkout.
    
    Reviewed by:    imp, markj
    Differential Revision:  https://reviews.freebsd.org/D36248
---
 tools/tools/git/git-arc.sh | 34 ++++------------------------------
 1 file changed, 4 insertions(+), 30 deletions(-)

diff --git a/tools/tools/git/git-arc.sh b/tools/tools/git/git-arc.sh
index b33affe459b0..66372969de04 100644
--- a/tools/tools/git/git-arc.sh
+++ b/tools/tools/git/git-arc.sh
@@ -245,8 +245,6 @@ create_one_review()
         return 1
     fi
 
-    git checkout -q "$commit"
-
     msg=$(mktemp)
     git show -s --format='%B' "$commit" > "$msg"
     printf "\nTest Plan:\n" >> "$msg"
@@ -256,7 +254,8 @@ create_one_review()
     printf "%s\n" "${subscribers}" >> "$msg"
 
     yes | env EDITOR=true \
-        arc diff --message-file "$msg" --never-apply-patches --create --allow-untracked $BROWSE HEAD~
+        arc diff --message-file "$msg" --never-apply-patches --create \
+        --allow-untracked $BROWSE --head "$commit" "${commit}~"
     [ $? -eq 0 ] || err "could not create Phabricator diff"
 
     if [ -n "$parent" ]; then
@@ -333,24 +332,6 @@ show_and_prompt()
     prompt
 }
 
-save_head()
-{
-    local orig
-
-    if ! orig=$(git symbolic-ref --short -q HEAD); then
-        orig=$(git show -s --pretty=%H HEAD)
-    fi
-    SAVED_HEAD=$orig
-}
-
-restore_head()
-{
-    if [ -n "$SAVED_HEAD" ]; then
-        git checkout -q "$SAVED_HEAD"
-        SAVED_HEAD=
-    fi
-}
-
 build_commit_list()
 {
     local chash _commits commits
@@ -410,7 +391,6 @@ gitarc__create()
         doprompt=
     fi
 
-    save_head
     for commit in ${commits}; do
         if create_one_review "$commit" "$reviewers" "$subscribers" "$prev" \
                              "$doprompt"; then
@@ -419,7 +399,6 @@ gitarc__create()
             prev=""
         fi
     done
-    restore_head
 }
 
 gitarc__list()
@@ -524,7 +503,6 @@ gitarc__update()
     local commit commits diff
 
     commits=$(build_commit_list "$@")
-    save_head
     for commit in ${commits}; do
         diff=$(commit2diff "$commit")
 
@@ -532,14 +510,12 @@ gitarc__update()
             break
         fi
 
-        git checkout -q "$commit"
-
         # The linter is stupid and applies patches to the working copy.
         # This would be tolerable if it didn't try to correct "misspelled" variable
         # names.
-        arc diff --allow-untracked --never-apply-patches --update "$diff" HEAD~
+        arc diff --allow-untracked --never-apply-patches --update "$diff" \
+            --head "$commit" "${commit}~"
     done
-    restore_head
 }
 
 set -e
@@ -613,6 +589,4 @@ if [ "$(git config --bool --get arc.browse 2>/dev/null || echo false)" != "false
     BROWSE=--browse
 fi
 
-trap restore_head EXIT INT
-
 gitarc__"${verb}" "$@"