9 open F,"$fname" or die $fname;
11 defined(my $r=<F>) or die $fname;
12 close F or die $fname;
16 my($fname,$content)=@_;
18 open F,">$fname" or die $fname;
19 print F $content or die $fname;
20 close F or die $fname;
43 if (-e "$srcrpm.mockfail") {
44 die if -e "$srcrpm.dt.rpm.mockfail";
45 warn "mockfail: $srcrpm";
49 if (-e "$srcrpm.bsmockfail"
50 ||-e "$srcrpm.bsmockefail"
51 ||-e "$srcrpm.dt.rpm.bsmockfail"
52 ||-e "$srcrpm.dt.rpm.bsmockefail"
54 warn "bsmock(|e)fail: $srcrpm";
58 if (-e "$srcrpm.dt.rpm.mockfail") {
59 warn "dtmockfail: $srcrpm";
63 my $dwzfilesize=0+readfile "$srcrpm.filesize";
64 my $dwzrpmsize=0+readfile "$srcrpm.rpmsize";
65 my $dtfilesize=0+readfile "$srcrpm.dt.rpm.filesize";
66 my $dtrpmsize=0+readfile "$srcrpm.dt.rpm.rpmsize";
67 $dwzfilesizetot+=$dwzfilesize;
68 $dtfilesizetot+=$dtfilesize;
69 $dwzrpmsizetot+=$dwzrpmsize;
70 $dtrpmsizetot+=$dtrpmsize;
71 if (($dwzfilesize>=$dtfilesize)!=($dwzrpmsize>=$dtrpmsize)) {
72 #warn "file vs. rpm size do not match (dwzfilesize=$dwzfilesize dtfilesize=$dtfilesize dwzrpmsize=$dwzrpmsize dtrpmsize=$dtrpmsize: $srcrpm";
74 if ($dwzfilesize==0&&$dtfilesize==0) {
76 } elsif ($dwzfilesize<$dtfilesize) {
77 #warn "dwz dwzfilesize $dwzfilesize < dtfilesize $dtfilesize: $srcrpm";
79 } elsif ($dwzfilesize>$dtfilesize) {
84 push @{$filestat{$dwzfilesize-$dtfilesize}},sprintf("%.2f",100*$dwzfilesize/$dtfilesize).": $srcrpm dwzfilesize=$dwzfilesize dtfilesize=$dtfilesize" if $dtfilesize;
85 if ($dwzrpmsize==0&&$dtrpmsize==0) {
87 } elsif ($dwzrpmsize<$dtrpmsize) {
89 } elsif ($dwzrpmsize>$dtrpmsize) {
95 push @srcrpms,$srcrpm;
98 if (($ARGV[0]||"") eq "-r") {
101 for (split /\n/,readfile($ARGV[0] eq "-"?"rpm -qa '*-debuginfo'|":$ARGV[0])) {
103 /^(.*)-debuginfo-[^-]*-[^-]*$/ or die;
108 #my $allpkgs=readfile "dnf -C --disablerepo='*' --enablerepo=rawhide-source repoquery -a --arch src 2>/dev/null|";
109 my $allpkgs=readfile "all";
110 my %allpkgs=map(("build/$_.src.rpm"=>1),grep /./,(split /\n/,$allpkgs));
112 for my $srcrpmdone (glob "build/*.src.rpm.done") {
113 (my $srcrpm=$srcrpmdone)=~s{\Q.done\E$}{} or die $srcrpmdone;
115 $srcrpm=~m{^build/(.*)-[^-]*-[^-]*$} or die;
118 if (!$allpkgs{$srcrpm}) {
119 warn "extra: $srcrpm\n";
127 for my $srcrpm (keys(%allpkgs)) {
128 next if $allpkgs{$srcrpm}>1;
129 warn "unbuilt: $srcrpm\n";
133 die if length($allpkgs)!=keys(%allpkgs);
134 $allpkgs=keys(%allpkgs);
135 die if $allpkgs!=$done+$mockfail+$dtmockfail+$unbuilt;
136 print "extras=$extras; unbuilt=$unbuilt; done=$done + mockfail=$mockfail + dtmockfail=$dtmockfail = ".($done+$mockfail+$dtmockfail)." all=$allpkgs processed=".(($done+$mockfail+$dtmockfail)/$allpkgs*100)."%\n";
137 print "dwzwinbyfile=$dwzwinbyfile"." dtwinbyfile=$dtwinbyfile"." equalbyfile=$equalbyfile"." emptybyfile=$emptybyfile"."\n";
138 print "dwzwinbyrpm =$dwzwinbyrpm" ." dtwinbyrpm =$dtwinbyrpm" ." equalbyrpm =$equalbyrpm" ." emptybyrpm =$emptybyrpm" ."\n";
139 print "dwzfilesizetot=$dwzfilesizetot"." dtfilesizetot=$dtfilesizetot"." = ".($dwzfilesizetot/$dtfilesizetot*100)."%\n";
140 print " dwzrpmsizetot=$dwzrpmsizetot" ." dtrpmsizetot=$dtrpmsizetot" ." = ".( $dwzrpmsizetot/ $dtrpmsizetot*100)."%\n";
141 #print "equal: $_\n" for @{$filestat{1}};
142 my @sorted=map @{$filestat{$_}},sort {$a<=>$b;} keys(%filestat);
145 print($sorted[$ix]."\n");
148 out $_ for 0..$#sorted;
152 out $_ for @sorted-$p..$#sorted;
154 print "debuginfod download size: ";
157 for my $srcrpm (@srcrpms) {
158 my $rpmsizes="$srcrpm.rpmsizes";
159 -e $rpmsizes or (system "./debuginfosize $srcrpm" and die $srcrpm);
160 -e $rpmsizes or die $srcrpm;
161 my $f=readfile $rpmsizes;
162 $f=~/^(\d+) (\d+)\n$/s;
165 $dwzsizetot+=$dwzsize;
168 print "dwzsizetot=$dwzsizetot dtsizetot=$dtsizetot = ".sprintf("%.2f",$dwzsizetot/$dtsizetot*100)."%\n";
169 print "build time: ";
172 for my $srcrpm (@srcrpms) {
175 my $mocklogtime="$mocklog.time";
176 return 0+readfile $mocklogtime if -e $mocklogtime;
177 my $f=readfile($mocklog);
178 # INFO: Done(firefox-78.0-2.fc33.src.rpm) Config(fedora-rawhide-x86_64) 288 minutes 35 seconds
180 $t=$1*60+$2 while $f=~/\nINFO: Done[(][^\n]*[)] (\d+) minutes (\d+) seconds\n/g;
181 defined $t or die $mocklog;
182 writefile $mocklogtime,"$t\n";
185 $dwztime+=onemocklog "$srcrpm.mocklog";
186 $dttime+=onemocklog "$srcrpm.dt.rpm.mocklog";
188 print "dwztime=$dwztime dttime=$dttime = ".sprintf("%.2f",$dwztime/$dttime*100)."%\n";