|
|
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;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.