First draft of new diffstat-total-compare.plx script.
This commit is contained in:
		
							parent
							
								
									f407f1e8b2
								
							
						
					
					
						commit
						ba087e3285
					
				
					 1 changed files with 73 additions and 0 deletions
				
			
		
							
								
								
									
										73
									
								
								diffstat-total-compare.plx
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										73
									
								
								diffstat-total-compare.plx
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,73 @@ | |||
| #!/usr/bin/perl -w | ||||
| # diffstat-total-compare.plx                                         -*- Perl -*- | ||||
| 
 | ||||
| # Copyright (C) 2013 Bradley M. Kuhn <bkuhn@ebb.org> | ||||
| # | ||||
| # This software's license gives you freedom; you can copy, convey, | ||||
| # propogate, redistribute and/or modify this program under the terms of | ||||
| # the GNU  General Public License (GPL) as published by the Free | ||||
| # Software Foundation (FSF), either version 3 of the License, or (at your | ||||
| # option) any later version of the GPL published by the FSF. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, but | ||||
| # WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| # General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License | ||||
| # along with this program in a file in the toplevel directory called | ||||
| # "GPLv3".  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| # The problem this script is trying to solve: | ||||
| 
 | ||||
| #   You have a source release separated from the a git repository. | ||||
| #   Non-hypothetical example: a CCS release from a GPL compliance source dump | ||||
| #   from a cmopany. | ||||
| #   You want to know the git revision it's closest to. | ||||
| #   Well, the only way I've found to solve this problem is this way: | ||||
| 
 | ||||
| #   build a list of commit ids that are the candidates for the base revision | ||||
| #   for this sort release, and put them in commit-list, one per line, and run: | ||||
| 
 | ||||
| #   for i in `cat commit-list `; do | ||||
| #       echo Doing $i | ||||
| #       git checkout -q $i; diff -wB -N -x .git -ru . /path/to/source/release > /path/to/diffs/${i}.log | ||||
| #       cat /path/to/diffs/${i}.log |diffstat > /path/to/diffs//${i}.diffstat | ||||
| #       rm /path/to/diffs/${i}.log | ||||
| #       echo Done $i | ||||
| #    done | ||||
| 
 | ||||
| # Then, this script is run across that directory. | ||||
| 
 | ||||
| my %commitTotals; | ||||
| for my $file (<*.diffstat>) { | ||||
|   my $commitID = $file; | ||||
|   $commitID =~ s/\.diffstat$// or die "$file isn't ending in .diffstat, huh?"; | ||||
|   my %commit; | ||||
|   open(DIFFSTAT, "<", $file) or die "unable to open $file for reading: $!"; | ||||
|   while (my $line = <DIFFSTAT>) { | ||||
|     if ($line =~ /^\s*(\d+)files\s+changed\s*,\s+(\d+)insertions[^\d]+\s+(\d+) deletions.*$/) { | ||||
|       ($commit{files}, $commit{insertions}, $commit{deletions}) = ($1, $2, $3); | ||||
|       last; | ||||
|     } | ||||
|     die "unable to find diffstat summary line in $file" | ||||
|       unless defined $commit{files} and defined $commit{insertions}  | ||||
|         and defined $commit{deletions}; | ||||
|   } | ||||
|   close DIFFSTAT;    die "error reading $file: $!" unless ($? == 0); | ||||
|   $commitTotals{$commitID} = \%commit; | ||||
| } | ||||
| 
 | ||||
| foreach my $type (qw/files insertions deletions/) { | ||||
|   print "Sorted by $type:\n"; | ||||
|   foreach my $commitID ( | ||||
|         sort { $commitTotals{$a}{$type} <=> $commitTotals{$b}{$type} } | ||||
|                         keys %commitTotals) { | ||||
|     print "     $commitID $commitTotals{$commitID}{$type}\n"; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| # | ||||
| # Local variables: | ||||
| # compile-command: "perl -c diffstat-total-compare.plx" | ||||
| # End: | ||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Bradley M. Kuhn
						Bradley M. Kuhn