With the GitLab mapping files from the previous commit, the
get_manitainer.pl script is now able to report the gitlab
handle for each maintainer/reviewer when displaying output.

For example:

  $ ./scripts/get_maintainer.pl -f hw/scsi/lsi53c895a.c
  Paolo Bonzini <[email protected]> (supporter:SCSI, gitlab:@bonzini)
  Fam Zheng <[email protected]> (reviewer:SCSI, gitlab:@famzheng)
  [email protected] (open list:All patches CC here)

Reviewed-by: Fabiano Rosas <[email protected]>
Signed-off-by: Daniel P. Berrangé <[email protected]>
---
 scripts/get_maintainer.pl | 51 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 47 insertions(+), 4 deletions(-)

diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index 76be402e11..9679f27413 100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
@@ -365,6 +365,31 @@ sub read_mailmap {
     close($mailmap_file);
 }
 
+my %gitlabmap;
+
+read_gitlabmap(".gitlab-map-auto");
+read_gitlabmap(".gitlab-map-manual");
+
+sub read_gitlabmap {
+    my $mapfile = shift;
+    open MAP, "<$mapfile"
+       or die "cannot open $mapfile: $!";
+
+    while (<MAP>) {
+       next if /^#/;
+       next if /^\s*$/;
+
+       if (/^(\S+)\t(.*)$/) {
+           my $handle = $1;
+           my $realname = $2;
+
+           $gitlabmap{$realname} = $handle;
+       }
+    }
+
+    close MAP;
+}
+
 ## use the filenames on the command line or find the filenames in the 
patchfiles
 
 my @files = ();
@@ -1068,6 +1093,18 @@ sub email_inuse {
     return 0;
 }
 
+sub gitlab_handle {
+    my $name = shift;
+
+    $name =~ s/"//g;
+
+    my $gitlab_handle;
+    if (exists $gitlabmap{$name}) {
+       return $gitlabmap{$name};
+    }
+    return undef;
+}
+
 sub push_email_address {
     my ($line, $role) = @_;
 
@@ -1077,10 +1114,12 @@ sub push_email_address {
        return 0;
     }
 
+    my $gitlab_handle = gitlab_handle($name);
+
     if (!$email_remove_duplicates) {
-       push(@email_to, [format_email($name, $address, $email_usename), $role]);
+       push(@email_to, [format_email($name, $address, $email_usename), $role, 
$gitlab_handle]);
     } elsif (!email_inuse($name, $address)) {
-       push(@email_to, [format_email($name, $address, $email_usename), $role]);
+       push(@email_to, [format_email($name, $address, $email_usename), $role, 
$gitlab_handle]);
        $email_hash_name{lc($name)}++ if ($name ne "");
        $email_hash_address{lc($address)}++;
     }
@@ -2026,10 +2065,14 @@ sub merge_email {
     my %saw;
 
     for (@_) {
-       my ($address, $role) = @$_;
+       my ($address, $role, $gitlab_handle) = @$_;
        if (!$saw{$address}) {
            if ($output_roles) {
-               push(@lines, "$address ($role)");
+               if (defined $gitlab_handle) {
+                   push(@lines, "$address ($role, gitlab:\@$gitlab_handle)");
+               } else {
+                   push(@lines, "$address ($role)");
+               }
            } else {
                push(@lines, $address);
            }
-- 
2.55.0


Reply via email to