Annotation of qemu/roms/ipxe/src/util/diffsize.pl, revision 1.1.1.1

1.1       root        1: #!/usr/bin/perl -w
                      2: # usage:
                      3: # [somebody@somewhere ~/ipxe/src]$ ./util/diffsize.pl [<old rev> [<new rev>]]
                      4: # by default <old rev> is HEAD and <new rev> is the working tree
                      5: 
                      6: use strict;
                      7: 
                      8: -d "bin" or die "Please run me in the iPXE src directory\n";
                      9: mkdir ".sizes";
                     10: 
                     11: my($oldrev, $newrev);
                     12: my($oldname, $newname);
                     13: 
                     14: if (@ARGV) {
                     15:   $oldname = shift;
                     16: } else {
                     17:   $oldname = "HEAD";
                     18: }
                     19: 
                     20: if (@ARGV) {
                     21:   $newname = shift;
                     22: } else {
                     23:   $newrev = "tree" . time();
                     24: }
                     25: 
                     26: $oldrev = `git rev-parse $oldname`;
                     27: chomp $oldrev;
                     28: 
                     29: unless (defined $newrev) {
                     30:   $newrev = `git rev-parse $newname`;
                     31:   chomp $newrev;
                     32: }
                     33: 
                     34: sub calc_sizes($$) {
                     35:   my($name, $rev) = @_;
                     36:   my $output;
                     37:   my $lastrev;
                     38:   my $stashed = 0;
                     39:   my $res = 0;
                     40: 
                     41:   return if -e ".sizes/$rev.sizes";
                     42: 
                     43:   if (defined $name) {
                     44:     $output = `git stash`;
                     45:     $stashed = 1 unless $output =~ /No local changes to save/;
                     46:     $lastrev = `git name-rev --name-only HEAD`;
                     47:     system("git checkout $name >/dev/null"); $res ||= $?;
                     48:   }
                     49: 
                     50:   system("make -j4 bin/ipxe.lkrn >/dev/null"); $res ||= $?;
                     51:   system("make bin/ipxe.lkrn.sizes > .sizes/$rev.sizes"); $res ||= $?;
                     52: 
                     53:   if (defined $name) {
                     54:     system("git checkout $lastrev >/dev/null"); $res ||= $?;
                     55:     system("git stash pop >/dev/null") if $stashed; $res ||= $?;
                     56:   }
                     57: 
                     58:   if ($res) {
                     59:     unlink(".sizes/$rev.sizes");
                     60:     die "Error making sizes file\n";
                     61:   }
                     62: }
                     63: 
                     64: our %Sizes;
                     65: 
                     66: sub save_sizes($$) {
                     67:   my($id, $rev) = @_;
                     68:   my $file = ".sizes/$rev.sizes";
                     69: 
                     70:   open SIZES, $file or die "opening $file: $!\n";
                     71:   while (<SIZES>) {
                     72:     my($text, $data, $bss, $total, $hex, $name) = split;
                     73:     $name =~ s|bin/||; $name =~ s|\.o$||;
                     74: 
                     75:     # Skip the header and totals lines
                     76:     next if $total =~ /[a-z]/ or $name =~ /TOTALS/;
                     77: 
                     78:     # Skip files named with dash, due to old Makefile bug
                     79:     next if $name =~ /-/;
                     80: 
                     81:     $Sizes{$name} = {old => 0, new => 0} unless exists $Sizes{$name};
                     82:     $Sizes{$name}{$id} = $total;
                     83:   }
                     84: }
                     85: 
                     86: calc_sizes($oldname, $oldrev);
                     87: calc_sizes($newname, $newrev);
                     88: 
                     89: save_sizes('old', $oldrev);
                     90: save_sizes('new', $newrev);
                     91: 
                     92: my $total = 0;
                     93: 
                     94: for (sort keys %Sizes) {
                     95:   my $diff = $Sizes{$_}{new} - $Sizes{$_}{old};
                     96:   if (abs($diff) >= 16) {
                     97:     printf "%12s %+d\n", substr($_, 0, 12), $Sizes{$_}{new} - $Sizes{$_}{old};
                     98:   }
                     99:   $total += $diff;
                    100: }
                    101: printf "      TOTAL: %+d\n", $total;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.