git: 613aaf59afa3 - main - git-arc: Accept message via -m when updating reviews.

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Mon, 07 Nov 2022 22:46:32 UTC
The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=613aaf59afa307fc77c8eed01962a59423b1c5f3

commit 613aaf59afa307fc77c8eed01962a59423b1c5f3
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2022-11-07 22:43:49 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2022-11-07 22:46:15 +0000

    git-arc: Accept message via -m when updating reviews.
    
    If a -m argument is given to update, it is passed through to arc diff
    when updating each review.  Note that if an empty message is specified
    via -m, arc diff will update the review without adding a note.
    
    If an -m argument is not given, then the user's editor is invoked by
    arc to supply a message for each review matching the previous
    behavior.
    
    This can be used to simplify the process for updating a set of
    reviews, e.g.:
    
      git checkout foo
      git rebase main
      git arc update -m "Rebase" main..
    
    This will rebase the 'foo' branch and update the reviews for all
    commits on the branch without invoking the user's editor separately
    for each review.
    
    Reviewed by:    markj
    Differential Revision:  https://reviews.freebsd.org/D37260
---
 tools/tools/git/git-arc.1  | 12 +++++++++++-
 tools/tools/git/git-arc.sh | 26 ++++++++++++++++++++++----
 2 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/tools/tools/git/git-arc.1 b/tools/tools/git/git-arc.1
index c499c2da3320..2e107a708d9d 100644
--- a/tools/tools/git/git-arc.1
+++ b/tools/tools/git/git-arc.1
@@ -24,7 +24,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd October 12, 2022
+.Dd November 7, 2022
 .Dt GIT-ARC 1
 .Os
 .Sh NAME
@@ -48,6 +48,7 @@
 .Op Ar commit Ns | Ns Ar commit-range
 .Nm
 .Cm update
+.Op Fl m Ar message
 .Op Ar commit Ns | Ns Ar commit-range
 .Sh DESCRIPTION
 The
@@ -105,6 +106,15 @@ Synchronize the Differential Revisions associated with the
 specified commits.
 Currently only the diff is updated; the review description and other
 metadata are not synchronized.
+If a message is specified with
+.Fl m ,
+that message is added as a note to the Differential Revision.
+If no message is supplied,
+the user's editor will be opened to provide an update message for
+each revision.
+If an empty message is supplied via
+.Fl m ,
+then no notes will be added when updating Differential Revisions.
 .El
 .Sh CONFIGURATION
 These are manipulated by
diff --git a/tools/tools/git/git-arc.sh b/tools/tools/git/git-arc.sh
index a9faed2ea876..5e8cc44ce3cc 100644
--- a/tools/tools/git/git-arc.sh
+++ b/tools/tools/git/git-arc.sh
@@ -53,7 +53,7 @@ Commands:
   list <commit>|<commit range>
   patch <diff1> [<diff2> ...]
   stage [-b branch] [<commit>|<commit range>]
-  update [<commit>|<commit range>]
+  update [-m message] [<commit>|<commit range>]
 
 Description:
   Create or manage FreeBSD Phabricator reviews based on git commits.  There
@@ -501,7 +501,20 @@ gitarc__stage()
 
 gitarc__update()
 {
-    local commit commits diff
+    local commit commits diff have_msg msg
+
+    while getopts m: o; do
+        case "$o" in
+        m)
+            msg="$OPTARG"
+            have_msg=1
+            ;;
+        *)
+            err_usage
+            ;;
+        esac
+    done
+    shift $((OPTIND-1))
 
     commits=$(build_commit_list "$@")
     for commit in ${commits}; do
@@ -514,8 +527,13 @@ gitarc__update()
         # 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 "$commit" "${commit}~"
+        if [ -n "$have_msg" ]; then
+            arc diff --message "$msg" --allow-untracked --never-apply-patches \
+                --update "$diff" --head "$commit" "${commit}~"
+        else
+            arc diff --allow-untracked --never-apply-patches --update "$diff" \
+                --head "$commit" "${commit}~"
+        fi
     done
 }