Annotation of qemu/roms/ipxe/src/util/diffsize.pl, revision 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.