util/scripts: Update get_maintainer.pl to latest from linux kernel
This is version 03aed21 from linux/scripts, updated on Dec 12, 2016. The version needs to be updated because Perl version 5.20 deprecated the /C regex expression. Perl version 5.24 removed it completely, so the old version fails to run on the coreboot builders. Change-Id: Ib97997237ca64c65d7f91d568ae4bec000804331 Signed-off-by: Martin Roth <martinroth@google.com> Reviewed-on: https://review.coreboot.org/18571 Tested-by: build bot (Jenkins) Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
		@@ -16,7 +16,9 @@ my $P = $0;
 | 
				
			|||||||
my $V = '0.26';
 | 
					my $V = '0.26';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use Getopt::Long qw(:config no_auto_abbrev);
 | 
					use Getopt::Long qw(:config no_auto_abbrev);
 | 
				
			||||||
 | 
					use Cwd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my $cur_path = fastgetcwd() . '/';
 | 
				
			||||||
my $lk_path = "./";
 | 
					my $lk_path = "./";
 | 
				
			||||||
my $email = 1;
 | 
					my $email = 1;
 | 
				
			||||||
my $email_usename = 1;
 | 
					my $email_usename = 1;
 | 
				
			||||||
@@ -42,10 +44,12 @@ my $output_multiline = 1;
 | 
				
			|||||||
my $output_separator = ", ";
 | 
					my $output_separator = ", ";
 | 
				
			||||||
my $output_roles = 0;
 | 
					my $output_roles = 0;
 | 
				
			||||||
my $output_rolestats = 1;
 | 
					my $output_rolestats = 1;
 | 
				
			||||||
 | 
					my $output_section_maxlen = 50;
 | 
				
			||||||
my $scm = 0;
 | 
					my $scm = 0;
 | 
				
			||||||
my $web = 0;
 | 
					my $web = 0;
 | 
				
			||||||
my $subsystem = 0;
 | 
					my $subsystem = 0;
 | 
				
			||||||
my $status = 0;
 | 
					my $status = 0;
 | 
				
			||||||
 | 
					my $letters = "";
 | 
				
			||||||
my $keywords = 1;
 | 
					my $keywords = 1;
 | 
				
			||||||
my $sections = 0;
 | 
					my $sections = 0;
 | 
				
			||||||
my $file_emails = 0;
 | 
					my $file_emails = 0;
 | 
				
			||||||
@@ -130,6 +134,7 @@ my %VCS_cmds_git = (
 | 
				
			|||||||
    "author_pattern" => "^GitAuthor: (.*)",
 | 
					    "author_pattern" => "^GitAuthor: (.*)",
 | 
				
			||||||
    "subject_pattern" => "^GitSubject: (.*)",
 | 
					    "subject_pattern" => "^GitSubject: (.*)",
 | 
				
			||||||
    "stat_pattern" => "^(\\d+)\\t(\\d+)\\t\$file\$",
 | 
					    "stat_pattern" => "^(\\d+)\\t(\\d+)\\t\$file\$",
 | 
				
			||||||
 | 
					    "file_exists_cmd" => "git ls-files \$file",
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
my %VCS_cmds_hg = (
 | 
					my %VCS_cmds_hg = (
 | 
				
			||||||
@@ -158,6 +163,7 @@ my %VCS_cmds_hg = (
 | 
				
			|||||||
    "author_pattern" => "^HgAuthor: (.*)",
 | 
					    "author_pattern" => "^HgAuthor: (.*)",
 | 
				
			||||||
    "subject_pattern" => "^HgSubject: (.*)",
 | 
					    "subject_pattern" => "^HgSubject: (.*)",
 | 
				
			||||||
    "stat_pattern" => "^(\\d+)\t(\\d+)\t\$file\$",
 | 
					    "stat_pattern" => "^(\\d+)\t(\\d+)\t\$file\$",
 | 
				
			||||||
 | 
					    "file_exists_cmd" => "hg files \$file",
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
my $conf = which_conf(".get_maintainer.conf");
 | 
					my $conf = which_conf(".get_maintainer.conf");
 | 
				
			||||||
@@ -186,6 +192,27 @@ if (-f $conf) {
 | 
				
			|||||||
    unshift(@ARGV, @conf_args) if @conf_args;
 | 
					    unshift(@ARGV, @conf_args) if @conf_args;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my @ignore_emails = ();
 | 
				
			||||||
 | 
					my $ignore_file = which_conf(".get_maintainer.ignore");
 | 
				
			||||||
 | 
					if (-f $ignore_file) {
 | 
				
			||||||
 | 
					    open(my $ignore, '<', "$ignore_file")
 | 
				
			||||||
 | 
						or warn "$P: Can't find a readable .get_maintainer.ignore file $!\n";
 | 
				
			||||||
 | 
					    while (<$ignore>) {
 | 
				
			||||||
 | 
						my $line = $_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$line =~ s/\s*\n?$//;
 | 
				
			||||||
 | 
						$line =~ s/^\s*//;
 | 
				
			||||||
 | 
						$line =~ s/\s+$//;
 | 
				
			||||||
 | 
						$line =~ s/#.*$//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						next if ($line =~ m/^\s*$/);
 | 
				
			||||||
 | 
						if (rfc822_valid($line)) {
 | 
				
			||||||
 | 
						    push(@ignore_emails, $line);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    close($ignore);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (!GetOptions(
 | 
					if (!GetOptions(
 | 
				
			||||||
		'email!' => \$email,
 | 
							'email!' => \$email,
 | 
				
			||||||
		'git!' => \$email_git,
 | 
							'git!' => \$email_git,
 | 
				
			||||||
@@ -215,6 +242,7 @@ if (!GetOptions(
 | 
				
			|||||||
		'status!' => \$status,
 | 
							'status!' => \$status,
 | 
				
			||||||
		'scm!' => \$scm,
 | 
							'scm!' => \$scm,
 | 
				
			||||||
		'web!' => \$web,
 | 
							'web!' => \$web,
 | 
				
			||||||
 | 
							'letters=s' => \$letters,
 | 
				
			||||||
		'pattern-depth=i' => \$pattern_depth,
 | 
							'pattern-depth=i' => \$pattern_depth,
 | 
				
			||||||
		'k|keywords!' => \$keywords,
 | 
							'k|keywords!' => \$keywords,
 | 
				
			||||||
		'sections!' => \$sections,
 | 
							'sections!' => \$sections,
 | 
				
			||||||
@@ -245,7 +273,8 @@ $output_multiline = 0 if ($output_separator ne ", ");
 | 
				
			|||||||
$output_rolestats = 1 if ($interactive);
 | 
					$output_rolestats = 1 if ($interactive);
 | 
				
			||||||
$output_roles = 1 if ($output_rolestats);
 | 
					$output_roles = 1 if ($output_rolestats);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ($sections) {
 | 
					if ($sections || $letters ne "") {
 | 
				
			||||||
 | 
					    $sections = 1;
 | 
				
			||||||
    $email = 0;
 | 
					    $email = 0;
 | 
				
			||||||
    $email_list = 0;
 | 
					    $email_list = 0;
 | 
				
			||||||
    $scm = 0;
 | 
					    $scm = 0;
 | 
				
			||||||
@@ -270,7 +299,7 @@ if ($email &&
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
if (!top_of_kernel_tree($lk_path)) {
 | 
					if (!top_of_kernel_tree($lk_path)) {
 | 
				
			||||||
    die "$P: The current directory does not appear to be "
 | 
					    die "$P: The current directory does not appear to be "
 | 
				
			||||||
	. "a coreboot source tree.\n";
 | 
						. "a linux kernel source tree.\n";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Read MAINTAINERS for type/value pairs
 | 
					## Read MAINTAINERS for type/value pairs
 | 
				
			||||||
@@ -283,7 +312,7 @@ open (my $maint, '<', "${lk_path}MAINTAINERS")
 | 
				
			|||||||
while (<$maint>) {
 | 
					while (<$maint>) {
 | 
				
			||||||
    my $line = $_;
 | 
					    my $line = $_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ($line =~ m/^(\C):\s*(.*)/) {
 | 
					    if ($line =~ m/^([A-Z]):\s*(.*)/) {
 | 
				
			||||||
	my $type = $1;
 | 
						my $type = $1;
 | 
				
			||||||
	my $value = $2;
 | 
						my $value = $2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -406,7 +435,9 @@ foreach my $file (@ARGV) {
 | 
				
			|||||||
	    die "$P: file '${file}' not found\n";
 | 
						    die "$P: file '${file}' not found\n";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if ($from_filename) {
 | 
					    if ($from_filename || ($file ne "&STDIN" && vcs_file_exists($file))) {
 | 
				
			||||||
 | 
						$file =~ s/^\Q${cur_path}\E//;	#strip any absolute path
 | 
				
			||||||
 | 
						$file =~ s/^\Q${lk_path}\E//;	#or the path to the lk tree
 | 
				
			||||||
	push(@files, $file);
 | 
						push(@files, $file);
 | 
				
			||||||
	if ($file ne "MAINTAINERS" && -f $file && ($keywords || $file_emails)) {
 | 
						if ($file ne "MAINTAINERS" && -f $file && ($keywords || $file_emails)) {
 | 
				
			||||||
	    open(my $f, '<', $file)
 | 
						    open(my $f, '<', $file)
 | 
				
			||||||
@@ -513,12 +544,22 @@ if ($web) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
exit($exit);
 | 
					exit($exit);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub ignore_email_address {
 | 
				
			||||||
 | 
					    my ($address) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foreach my $ignore (@ignore_emails) {
 | 
				
			||||||
 | 
						return 1 if ($ignore eq $address);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub range_is_maintained {
 | 
					sub range_is_maintained {
 | 
				
			||||||
    my ($start, $end) = @_;
 | 
					    my ($start, $end) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (my $i = $start; $i < $end; $i++) {
 | 
					    for (my $i = $start; $i < $end; $i++) {
 | 
				
			||||||
	my $line = $typevalue[$i];
 | 
						my $line = $typevalue[$i];
 | 
				
			||||||
	if ($line =~ m/^(\C):\s*(.*)/) {
 | 
						if ($line =~ m/^([A-Z]):\s*(.*)/) {
 | 
				
			||||||
	    my $type = $1;
 | 
						    my $type = $1;
 | 
				
			||||||
	    my $value = $2;
 | 
						    my $value = $2;
 | 
				
			||||||
	    if ($type eq 'S') {
 | 
						    if ($type eq 'S') {
 | 
				
			||||||
@@ -536,7 +577,7 @@ sub range_has_maintainer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    for (my $i = $start; $i < $end; $i++) {
 | 
					    for (my $i = $start; $i < $end; $i++) {
 | 
				
			||||||
	my $line = $typevalue[$i];
 | 
						my $line = $typevalue[$i];
 | 
				
			||||||
	if ($line =~ m/^(\C):\s*(.*)/) {
 | 
						if ($line =~ m/^([A-Z]):\s*(.*)/) {
 | 
				
			||||||
	    my $type = $1;
 | 
						    my $type = $1;
 | 
				
			||||||
	    my $value = $2;
 | 
						    my $value = $2;
 | 
				
			||||||
	    if ($type eq 'M') {
 | 
						    if ($type eq 'M') {
 | 
				
			||||||
@@ -585,7 +626,7 @@ sub get_maintainers {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	    for ($i = $start; $i < $end; $i++) {
 | 
						    for ($i = $start; $i < $end; $i++) {
 | 
				
			||||||
		my $line = $typevalue[$i];
 | 
							my $line = $typevalue[$i];
 | 
				
			||||||
		if ($line =~ m/^(\C):\s*(.*)/) {
 | 
							if ($line =~ m/^([A-Z]):\s*(.*)/) {
 | 
				
			||||||
		    my $type = $1;
 | 
							    my $type = $1;
 | 
				
			||||||
		    my $value = $2;
 | 
							    my $value = $2;
 | 
				
			||||||
		    if ($type eq 'X') {
 | 
							    if ($type eq 'X') {
 | 
				
			||||||
@@ -600,7 +641,7 @@ sub get_maintainers {
 | 
				
			|||||||
	    if (!$exclude) {
 | 
						    if (!$exclude) {
 | 
				
			||||||
		for ($i = $start; $i < $end; $i++) {
 | 
							for ($i = $start; $i < $end; $i++) {
 | 
				
			||||||
		    my $line = $typevalue[$i];
 | 
							    my $line = $typevalue[$i];
 | 
				
			||||||
		    if ($line =~ m/^(\C):\s*(.*)/) {
 | 
							    if ($line =~ m/^([A-Z]):\s*(.*)/) {
 | 
				
			||||||
			my $type = $1;
 | 
								my $type = $1;
 | 
				
			||||||
			my $value = $2;
 | 
								my $value = $2;
 | 
				
			||||||
			if ($type eq 'F') {
 | 
								if ($type eq 'F') {
 | 
				
			||||||
@@ -644,8 +685,10 @@ sub get_maintainers {
 | 
				
			|||||||
			$line =~ s/\\\./\./g;       	##Convert \. to .
 | 
								$line =~ s/\\\./\./g;       	##Convert \. to .
 | 
				
			||||||
			$line =~ s/\.\*/\*/g;       	##Convert .* to *
 | 
								$line =~ s/\.\*/\*/g;       	##Convert .* to *
 | 
				
			||||||
		    }
 | 
							    }
 | 
				
			||||||
		    $line =~ s/^([A-Z]):/$1:\t/g;
 | 
							    my $count = $line =~ s/^([A-Z]):/$1:\t/g;
 | 
				
			||||||
		    print("$line\n");
 | 
							    if ($letters eq "" || (!$count || $letters =~ /$1/i)) {
 | 
				
			||||||
 | 
								print("$line\n");
 | 
				
			||||||
 | 
							    }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		print("\n");
 | 
							print("\n");
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
@@ -749,6 +792,7 @@ MAINTAINER field selection options:
 | 
				
			|||||||
    --git-max-maintainers => maximum maintainers to add (default: $email_git_max_maintainers)
 | 
					    --git-max-maintainers => maximum maintainers to add (default: $email_git_max_maintainers)
 | 
				
			||||||
    --git-min-percent => minimum percentage of commits required (default: $email_git_min_percent)
 | 
					    --git-min-percent => minimum percentage of commits required (default: $email_git_min_percent)
 | 
				
			||||||
    --git-blame => use git blame to find modified commits for patch or file
 | 
					    --git-blame => use git blame to find modified commits for patch or file
 | 
				
			||||||
 | 
					    --git-blame-signatures => when used with --git-blame, also include all commit signers
 | 
				
			||||||
    --git-since => git history to use (default: $email_git_since)
 | 
					    --git-since => git history to use (default: $email_git_since)
 | 
				
			||||||
    --hg-since => hg history to use (default: $email_hg_since)
 | 
					    --hg-since => hg history to use (default: $email_hg_since)
 | 
				
			||||||
    --interactive => display a menu (mostly useful if used with the --git option)
 | 
					    --interactive => display a menu (mostly useful if used with the --git option)
 | 
				
			||||||
@@ -775,12 +819,13 @@ Other options:
 | 
				
			|||||||
  --pattern-depth => Number of pattern directory traversals (default: 0 (all))
 | 
					  --pattern-depth => Number of pattern directory traversals (default: 0 (all))
 | 
				
			||||||
  --keywords => scan patch for keywords (default: $keywords)
 | 
					  --keywords => scan patch for keywords (default: $keywords)
 | 
				
			||||||
  --sections => print all of the subsystem sections with pattern matches
 | 
					  --sections => print all of the subsystem sections with pattern matches
 | 
				
			||||||
 | 
					  --letters => print all matching 'letter' types from all matching sections
 | 
				
			||||||
  --mailmap => use .mailmap file (default: $email_use_mailmap)
 | 
					  --mailmap => use .mailmap file (default: $email_use_mailmap)
 | 
				
			||||||
  --version => show version
 | 
					  --version => show version
 | 
				
			||||||
  --help => show this help information
 | 
					  --help => show this help information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Default options:
 | 
					Default options:
 | 
				
			||||||
  [--email --nogit --git-fallback --m --n --l --multiline -pattern-depth=0
 | 
					  [--email --nogit --git-fallback --m --r --n --l --multiline --pattern-depth=0
 | 
				
			||||||
   --remove-duplicates --rolestats]
 | 
					   --remove-duplicates --rolestats]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Notes:
 | 
					Notes:
 | 
				
			||||||
@@ -812,6 +857,9 @@ Notes:
 | 
				
			|||||||
      Entries in this file can be any command line argument.
 | 
					      Entries in this file can be any command line argument.
 | 
				
			||||||
      This file is prepended to any additional command line arguments.
 | 
					      This file is prepended to any additional command line arguments.
 | 
				
			||||||
      Multiple lines and # comments are allowed.
 | 
					      Multiple lines and # comments are allowed.
 | 
				
			||||||
 | 
					  Most options have both positive and negative forms.
 | 
				
			||||||
 | 
					      The negative forms for --<foo> are --no<foo> and --no-<foo>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EOT
 | 
					EOT
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -821,11 +869,22 @@ sub top_of_kernel_tree {
 | 
				
			|||||||
    if ($lk_path ne "" && substr($lk_path,length($lk_path)-1,1) ne "/") {
 | 
					    if ($lk_path ne "" && substr($lk_path,length($lk_path)-1,1) ne "/") {
 | 
				
			||||||
	$lk_path .= "/";
 | 
						$lk_path .= "/";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (   (-f "${lk_path}MAINTAINERS")
 | 
					    if (   (-f "${lk_path}COPYING")
 | 
				
			||||||
 | 
						&& (-f "${lk_path}CREDITS")
 | 
				
			||||||
 | 
						&& (-f "${lk_path}Kbuild")
 | 
				
			||||||
 | 
						&& (-f "${lk_path}MAINTAINERS")
 | 
				
			||||||
	&& (-f "${lk_path}Makefile")
 | 
						&& (-f "${lk_path}Makefile")
 | 
				
			||||||
 | 
						&& (-f "${lk_path}README")
 | 
				
			||||||
	&& (-d "${lk_path}Documentation")
 | 
						&& (-d "${lk_path}Documentation")
 | 
				
			||||||
	&& (-d "${lk_path}src")
 | 
						&& (-d "${lk_path}arch")
 | 
				
			||||||
	&& (-d "${lk_path}util")) {
 | 
						&& (-d "${lk_path}include")
 | 
				
			||||||
 | 
						&& (-d "${lk_path}drivers")
 | 
				
			||||||
 | 
						&& (-d "${lk_path}fs")
 | 
				
			||||||
 | 
						&& (-d "${lk_path}init")
 | 
				
			||||||
 | 
						&& (-d "${lk_path}ipc")
 | 
				
			||||||
 | 
						&& (-d "${lk_path}kernel")
 | 
				
			||||||
 | 
						&& (-d "${lk_path}lib")
 | 
				
			||||||
 | 
						&& (-d "${lk_path}scripts")) {
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -890,7 +949,7 @@ sub find_first_section {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    while ($index < @typevalue) {
 | 
					    while ($index < @typevalue) {
 | 
				
			||||||
	my $tv = $typevalue[$index];
 | 
						my $tv = $typevalue[$index];
 | 
				
			||||||
	if (($tv =~ m/^(\C):\s*(.*)/)) {
 | 
						if (($tv =~ m/^([A-Z]):\s*(.*)/)) {
 | 
				
			||||||
	    last;
 | 
						    last;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	$index++;
 | 
						$index++;
 | 
				
			||||||
@@ -904,7 +963,7 @@ sub find_starting_index {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    while ($index > 0) {
 | 
					    while ($index > 0) {
 | 
				
			||||||
	my $tv = $typevalue[$index];
 | 
						my $tv = $typevalue[$index];
 | 
				
			||||||
	if (!($tv =~ m/^(\C):\s*(.*)/)) {
 | 
						if (!($tv =~ m/^([A-Z]):\s*(.*)/)) {
 | 
				
			||||||
	    last;
 | 
						    last;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	$index--;
 | 
						$index--;
 | 
				
			||||||
@@ -918,7 +977,7 @@ sub find_ending_index {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    while ($index < @typevalue) {
 | 
					    while ($index < @typevalue) {
 | 
				
			||||||
	my $tv = $typevalue[$index];
 | 
						my $tv = $typevalue[$index];
 | 
				
			||||||
	if (!($tv =~ m/^(\C):\s*(.*)/)) {
 | 
						if (!($tv =~ m/^([A-Z]):\s*(.*)/)) {
 | 
				
			||||||
	    last;
 | 
						    last;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	$index++;
 | 
						$index++;
 | 
				
			||||||
@@ -927,6 +986,20 @@ sub find_ending_index {
 | 
				
			|||||||
    return $index;
 | 
					    return $index;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub get_subsystem_name {
 | 
				
			||||||
 | 
					    my ($index) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $start = find_starting_index($index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $subsystem = $typevalue[$start];
 | 
				
			||||||
 | 
					    if ($output_section_maxlen && length($subsystem) > $output_section_maxlen) {
 | 
				
			||||||
 | 
						$subsystem = substr($subsystem, 0, $output_section_maxlen - 3);
 | 
				
			||||||
 | 
						$subsystem =~ s/\s*$//;
 | 
				
			||||||
 | 
						$subsystem = $subsystem . "...";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return $subsystem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub get_maintainer_role {
 | 
					sub get_maintainer_role {
 | 
				
			||||||
    my ($index) = @_;
 | 
					    my ($index) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -935,16 +1008,11 @@ sub get_maintainer_role {
 | 
				
			|||||||
    my $end = find_ending_index($index);
 | 
					    my $end = find_ending_index($index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $role = "unknown";
 | 
					    my $role = "unknown";
 | 
				
			||||||
    my $subsystem = $typevalue[$start];
 | 
					    my $subsystem = get_subsystem_name($index);
 | 
				
			||||||
    if (length($subsystem) > 20) {
 | 
					 | 
				
			||||||
	$subsystem = substr($subsystem, 0, 17);
 | 
					 | 
				
			||||||
	$subsystem =~ s/\s*$//;
 | 
					 | 
				
			||||||
	$subsystem = $subsystem . "...";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for ($i = $start + 1; $i < $end; $i++) {
 | 
					    for ($i = $start + 1; $i < $end; $i++) {
 | 
				
			||||||
	my $tv = $typevalue[$i];
 | 
						my $tv = $typevalue[$i];
 | 
				
			||||||
	if ($tv =~ m/^(\C):\s*(.*)/) {
 | 
						if ($tv =~ m/^([A-Z]):\s*(.*)/) {
 | 
				
			||||||
	    my $ptype = $1;
 | 
						    my $ptype = $1;
 | 
				
			||||||
	    my $pvalue = $2;
 | 
						    my $pvalue = $2;
 | 
				
			||||||
	    if ($ptype eq "S") {
 | 
						    if ($ptype eq "S") {
 | 
				
			||||||
@@ -974,16 +1042,7 @@ sub get_maintainer_role {
 | 
				
			|||||||
sub get_list_role {
 | 
					sub get_list_role {
 | 
				
			||||||
    my ($index) = @_;
 | 
					    my ($index) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $i;
 | 
					    my $subsystem = get_subsystem_name($index);
 | 
				
			||||||
    my $start = find_starting_index($index);
 | 
					 | 
				
			||||||
    my $end = find_ending_index($index);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    my $subsystem = $typevalue[$start];
 | 
					 | 
				
			||||||
    if (length($subsystem) > 20) {
 | 
					 | 
				
			||||||
	$subsystem = substr($subsystem, 0, 17);
 | 
					 | 
				
			||||||
	$subsystem =~ s/\s*$//;
 | 
					 | 
				
			||||||
	$subsystem = $subsystem . "...";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ($subsystem eq "THE REST") {
 | 
					    if ($subsystem eq "THE REST") {
 | 
				
			||||||
	$subsystem = "";
 | 
						$subsystem = "";
 | 
				
			||||||
@@ -1003,7 +1062,7 @@ sub add_categories {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    for ($i = $start + 1; $i < $end; $i++) {
 | 
					    for ($i = $start + 1; $i < $end; $i++) {
 | 
				
			||||||
	my $tv = $typevalue[$i];
 | 
						my $tv = $typevalue[$i];
 | 
				
			||||||
	if ($tv =~ m/^(\C):\s*(.*)/) {
 | 
						if ($tv =~ m/^([A-Z]):\s*(.*)/) {
 | 
				
			||||||
	    my $ptype = $1;
 | 
						    my $ptype = $1;
 | 
				
			||||||
	    my $pvalue = $2;
 | 
						    my $pvalue = $2;
 | 
				
			||||||
	    if ($ptype eq "L") {
 | 
						    if ($ptype eq "L") {
 | 
				
			||||||
@@ -1045,7 +1104,7 @@ sub add_categories {
 | 
				
			|||||||
		if ($name eq "") {
 | 
							if ($name eq "") {
 | 
				
			||||||
		    if ($i > 0) {
 | 
							    if ($i > 0) {
 | 
				
			||||||
			my $tv = $typevalue[$i - 1];
 | 
								my $tv = $typevalue[$i - 1];
 | 
				
			||||||
			if ($tv =~ m/^(\C):\s*(.*)/) {
 | 
								if ($tv =~ m/^([A-Z]):\s*(.*)/) {
 | 
				
			||||||
			    if ($1 eq "P") {
 | 
								    if ($1 eq "P") {
 | 
				
			||||||
				$name = $2;
 | 
									$name = $2;
 | 
				
			||||||
				$pvalue = format_email($name, $address, $email_usename);
 | 
									$pvalue = format_email($name, $address, $email_usename);
 | 
				
			||||||
@@ -1062,7 +1121,7 @@ sub add_categories {
 | 
				
			|||||||
		if ($name eq "") {
 | 
							if ($name eq "") {
 | 
				
			||||||
		    if ($i > 0) {
 | 
							    if ($i > 0) {
 | 
				
			||||||
			my $tv = $typevalue[$i - 1];
 | 
								my $tv = $typevalue[$i - 1];
 | 
				
			||||||
			if ($tv =~ m/^(\C):\s*(.*)/) {
 | 
								if ($tv =~ m/^([A-Z]):\s*(.*)/) {
 | 
				
			||||||
			    if ($1 eq "P") {
 | 
								    if ($1 eq "P") {
 | 
				
			||||||
				$name = $2;
 | 
									$name = $2;
 | 
				
			||||||
				$pvalue = format_email($name, $address, $email_usename);
 | 
									$pvalue = format_email($name, $address, $email_usename);
 | 
				
			||||||
@@ -1071,7 +1130,8 @@ sub add_categories {
 | 
				
			|||||||
		    }
 | 
							    }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if ($email_reviewer) {
 | 
							if ($email_reviewer) {
 | 
				
			||||||
		    push_email_addresses($pvalue, 'reviewer');
 | 
							    my $subsystem = get_subsystem_name($i);
 | 
				
			||||||
 | 
							    push_email_addresses($pvalue, "reviewer:$subsystem");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	    } elsif ($ptype eq "T") {
 | 
						    } elsif ($ptype eq "T") {
 | 
				
			||||||
		push(@scm, $pvalue);
 | 
							push(@scm, $pvalue);
 | 
				
			||||||
@@ -1857,6 +1917,7 @@ sub vcs_assign {
 | 
				
			|||||||
	my $percent = $sign_offs * 100 / $divisor;
 | 
						my $percent = $sign_offs * 100 / $divisor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$percent = 100 if ($percent > 100);
 | 
						$percent = 100 if ($percent > 100);
 | 
				
			||||||
 | 
						next if (ignore_email_address($line));
 | 
				
			||||||
	$count++;
 | 
						$count++;
 | 
				
			||||||
	last if ($sign_offs < $email_git_min_signatures ||
 | 
						last if ($sign_offs < $email_git_min_signatures ||
 | 
				
			||||||
		 $count > $email_git_max_maintainers ||
 | 
							 $count > $email_git_max_maintainers ||
 | 
				
			||||||
@@ -2071,6 +2132,24 @@ sub vcs_file_blame {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub vcs_file_exists {
 | 
				
			||||||
 | 
					    my ($file) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $exists;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $vcs_used = vcs_exists();
 | 
				
			||||||
 | 
					    return 0 if (!$vcs_used);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $cmd = $VCS_cmds{"file_exists_cmd"};
 | 
				
			||||||
 | 
					    $cmd =~ s/(\$\w+)/$1/eeg;		# interpolate $cmd
 | 
				
			||||||
 | 
					    $cmd .= " 2>&1";
 | 
				
			||||||
 | 
					    $exists = &{$VCS_cmds{"execute_cmd"}}($cmd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0 if ($? != 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $exists;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub uniq {
 | 
					sub uniq {
 | 
				
			||||||
    my (@parms) = @_;
 | 
					    my (@parms) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user