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
This commit is contained in:
John Baldwin 2022-11-07 14:43:49 -08:00
parent f515a279f7
commit 613aaf59af
2 changed files with 33 additions and 5 deletions

View File

@ -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

View File

@ -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
}