Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe909030 authored by Joe Perches's avatar Joe Perches Committed by Linus Torvalds
Browse files

parse-maintainers: Use perl hash references and specific filenames



Instead of reading STDIN and writing STDOUT, use specific filenames of
MAINTAINERS and MAINTAINERS.new.

Use hash references instead of global hash %hash so future modifications
can read and write specific hashes to split up MAINTAINERS into multiple
files using a script.

Signed-off-by: default avatarJoe Perches <joe@perches.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 61f74164
Loading
Loading
Loading
Loading
+34 −23
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

use strict;

my %hash;
my $P = $0;

# sort comparison functions
sub by_category($$) {
@@ -45,61 +45,72 @@ sub by_pattern($$) {
    }
}

sub trim {
    my $s = shift;
    $s =~ s/\s+$//;
    $s =~ s/^\s+//;
    return $s;
}

sub alpha_output {
    foreach my $key (sort by_category keys %hash) {
    my ($hashref, $filename) = (@_);

    open(my $file, '>', "$filename") or die "$P: $filename: open failed - $!\n";
    foreach my $key (sort by_category keys %$hashref) {
	if ($key eq " ") {
	    chomp $hash{$key};
	    print $hash{$key};
	    chomp $$hashref{$key};
	    print $file $$hashref{$key};
	} else {
	    print "\n" . $key . "\n";
	    foreach my $pattern (sort by_pattern split('\n', $hash{$key})) {
		print($pattern . "\n");
	    }
	    print $file "\n" . $key . "\n";
	    foreach my $pattern (sort by_pattern split('\n', %$hashref{$key})) {
		print $file ($pattern . "\n");
	    }
	}
    }

sub trim {
    my $s = shift;
    $s =~ s/\s+$//;
    $s =~ s/^\s+//;
    return $s;
    close($file);
}

sub file_input {
    my ($hashref, $filename) = (@_);

    my $lastline = "";
    my $case = " ";
    $hash{$case} = "";
    $$hashref{$case} = "";

    open(my $file, '<', "$filename") or die "$P: $filename: open failed - $!\n";

    while (<>) {
    while (<$file>) {
        my $line = $_;

        # Pattern line?
        if ($line =~ m/^([A-Z]):\s*(.*)/) {
            $line = $1 . ":\t" . trim($2) . "\n";
            if ($lastline eq "") {
                $hash{$case} = $hash{$case} . $line;
                $$hashref{$case} = $$hashref{$case} . $line;
                next;
            }
            $case = trim($lastline);
            exists $hash{$case} and die "Header '$case' already exists";
            $hash{$case} = $line;
            exists $$hashref{$case} and die "Header '$case' already exists";
            $$hashref{$case} = $line;
            $lastline = "";
            next;
        }

        if ($case eq " ") {
            $hash{$case} = $hash{$case} . $lastline;
            $$hashref{$case} = $$hashref{$case} . $lastline;
            $lastline = $line;
            next;
        }
        trim($lastline) eq "" or die ("Odd non-pattern line '$lastline' for '$case'");
        $lastline = $line;
    }
    $hash{$case} = $hash{$case} . $lastline;
    $$hashref{$case} = $$hashref{$case} . $lastline;
    close($file);
}

file_input();
alpha_output();
my %hash;

file_input(\%hash, "MAINTAINERS");
alpha_output(\%hash, "MAINTAINERS.new");

exit(0);