Copy script from Linux added in commit 7683e9e5 (Properly alphabetize MAINTAINERS file) by Linus Torvalds. > This adds a perl script to actually parse the MAINTAINERS file, clean > up some whitespace in it, warn about errors in it, and then properly > sort the end result. > > My perl-fu is atrocious, so the script has basically been created by > randomly putting various characters in a pile, mixing them around, and > then looking it the end result does anything interesting when used as > a perl script. Change-Id: I2eb4e3f9863d0fe242fb690f1121842c80d72d6a Signed-off-by: Paul Menzel <pmenzel@molgen.mpg.de> Reviewed-on: https://review.coreboot.org/20742 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| 
 | |
| use strict;
 | |
| 
 | |
| my %map;
 | |
| 
 | |
| # sort comparison function
 | |
| sub by_category($$) {
 | |
|     my ($a, $b) = @_;
 | |
| 
 | |
|     $a = uc $a;
 | |
|     $b = uc $b;
 | |
| 
 | |
|     # This always sorts last
 | |
|     $a =~ s/THE REST/ZZZZZZ/g;
 | |
|     $b =~ s/THE REST/ZZZZZZ/g;
 | |
| 
 | |
|     $a cmp $b;
 | |
| }
 | |
| 
 | |
| sub alpha_output {
 | |
|     my $key;
 | |
|     my $sort_method = \&by_category;
 | |
|     my $sep = "";
 | |
| 
 | |
|     foreach $key (sort $sort_method keys %map) {
 | |
|         if ($key ne " ") {
 | |
|             print $sep . $key . "\n";
 | |
|             $sep = "\n";
 | |
|         }
 | |
|         print $map{$key};
 | |
|     }
 | |
| }
 | |
| 
 | |
| sub trim {
 | |
|     my $s = shift;
 | |
|     $s =~ s/\s+$//;
 | |
|     $s =~ s/^\s+//;
 | |
|     return $s;
 | |
| }
 | |
| 
 | |
| sub file_input {
 | |
|     my $lastline = "";
 | |
|     my $case = " ";
 | |
|     $map{$case} = "";
 | |
| 
 | |
|     while (<>) {
 | |
|         my $line = $_;
 | |
| 
 | |
|         # Pattern line?
 | |
|         if ($line =~ m/^([A-Z]):\s*(.*)/) {
 | |
|             $line = $1 . ":\t" . trim($2) . "\n";
 | |
|             if ($lastline eq "") {
 | |
|                 $map{$case} = $map{$case} . $line;
 | |
|                 next;
 | |
|             }
 | |
|             $case = trim($lastline);
 | |
|             exists $map{$case} and die "Header '$case' already exists";
 | |
|             $map{$case} = $line;
 | |
|             $lastline = "";
 | |
|             next;
 | |
|         }
 | |
| 
 | |
|         if ($case eq " ") {
 | |
|             $map{$case} = $map{$case} . $lastline;
 | |
|             $lastline = $line;
 | |
|             next;
 | |
|         }
 | |
|         trim($lastline) eq "" or die ("Odd non-pattern line '$lastline' for '$case'");
 | |
|         $lastline = $line;
 | |
|     }
 | |
|     $map{$case} = $map{$case} . $lastline;
 | |
| }
 | |
| 
 | |
| &file_input;
 | |
| &alpha_output;
 | |
| exit(0);
 |