Daniel P. Berrangé <[email protected]> writes:

> 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)
>
> 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);
>           }

Reviewed-by: Fabiano Rosas <[email protected]>

Reply via email to