git: ba47678b30a5 - main - git-arc: Use full names in reviewed-by lines

Mark Johnston <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a7a0d0e.3e737.7216d9da__47399.5532070816$1786383683$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by markj:

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

commit ba47678b30a50fd44234f8ed7fbef68a56479b37
Author:     Mark Johnston <[email protected]>
AuthorDate: 2026-08-10 14:49:11 +0000
Commit:     Mark Johnston <[email protected]>
CommitDate: 2026-08-10 17:31:21 +0000

    git-arc: Use full names in reviewed-by lines
    
    Phabricator user names are not useful identifiers outside of
    phabricator, don't use them if we can avoid it.
---
 tools/tools/git/git-arc.sh | 42 ++++++++++++++++++++++++++++++++++--------
 1 file changed, 34 insertions(+), 8 deletions(-)

diff --git a/tools/tools/git/git-arc.sh b/tools/tools/git/git-arc.sh
index 72605d49d40f..d8551630f7e2 100755
--- a/tools/tools/git/git-arc.sh
+++ b/tools/tools/git/git-arc.sh
@@ -289,7 +289,7 @@ create_one_review()
 # Get a list of reviewers who accepted the specified diff.
 diff2reviewers()
 {
-    local diff reviewid userids
+    local diff reviewid userids tmp author username realname
 
     diff=$1
     reviewid=$(diff2phid "$diff")
@@ -301,11 +301,27 @@ diff2reviewers()
         arc_call_conduit -- differential.revision.search |
         jq '.response.data[0].attachments.reviewers.reviewers[] | select(.status == "accepted").reviewerPHID')
     if [ -n "$userids" ]; then
+        tmp=$(xmktemp)
         echo '{
         "constraints": {"phids": ['"$(echo $userids | tr '[:blank:]' ',')"']}
         }' |
         arc_call_conduit -- user.search |
-        jq -r '.response.data[].fields.username'
+        jq -r '.response.data[] | [.fields.username, .fields.realName] | @tsv' > "$tmp"
+
+        while IFS=$(printf '\t') read -r username realname; do
+            if is_freebsd_committer "$username"; then
+                # FreeBSD uses bare login names in Reviewed-by lines.
+                echo "$username"
+            else
+                # Resolve mangled phabricator usernames.
+                author=$(find_author "$username" "$realname" "" "")
+                if [ "$author" = "ABORT" ]; then
+                    warn "Skipping reviewer ${username}: uncertain author identity"
+                else
+                    echo "$author"
+                fi
+            fi
+        done < "$tmp"
     fi
 }
 
@@ -448,6 +464,20 @@ gitarc__list()
     done
 }
 
+# Return true if the Phabricator username looks like a FreeBSD committer login:
+# no '.' in the name and not a guest account.
+is_freebsd_committer()
+{
+    case "$1" in
+    *.* | guest-*)
+        return 1
+        ;;
+    *)
+        return 0
+        ;;
+    esac
+}
+
 # Try to guess our way to a good author name. The DWIM is strong in this
 # function, but these heuristics seem to generally produce the right results, in
 # the sample of src commits I checked out.
@@ -468,14 +498,10 @@ find_author()
     # these people having their local config pointing at something other than
     # freebsd.org (which isn't surprising for ports committers getting src
     # commits reviewed).
-    case "${addr}" in
-    *.*) ;;             # external user
-    guest-*) ;;		# Fake email address, not a FreeBSD user
-    *)
+    if is_freebsd_committer "${addr}"; then
         echo "${name} <${addr}@FreeBSD.org>"
         return
-        ;;
-    esac
+    fi
 
     # Choice 2: author_addr and author_name were set in the bundle, so use
     # that. We may need to filter some known bogus ones, should they crop up.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.