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