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;
34 my $extafilesizetot=0;
35 my $extbfilesizetot=0;
44 if (-e "$srcrpm.mockfail"
45 ||-e "$srcrpm$exta.mockfail"
46 ||-e "$srcrpm$extb.mockfail") {
47 warn "mockfail: $srcrpm";
51 if (-e "$srcrpm.bsmockfail"
52 ||-e "$srcrpm.bsmockefail"
53 ||-e "$srcrpm$exta.bsmockfail"
54 ||-e "$srcrpm$exta.bsmockefail"
55 ||-e "$srcrpm$extb.bsmockfail"
56 ||-e "$srcrpm$extb.bsmockefail"
58 warn "bsmock(|e)fail: $srcrpm";
62 if (-e "$srcrpm$exta.mockfail"
63 ||-e "$srcrpm$extb.mockfail") {
64 warn "${extb}mockfail: $srcrpm";
68 if (!-e "$srcrpm$exta.filesize"
69 ||!-e "$srcrpm$extb.filesize") {
70 warn "!filesize: $srcrpm";
74 my $extafilesize=0+readfile "$srcrpm$exta.filesize";
75 my $extarpmsize=0+readfile "$srcrpm$exta.rpmsize";
76 my $extbfilesize=0+readfile "$srcrpm$extb.filesize";
77 my $extbrpmsize=0+readfile "$srcrpm$extb.rpmsize";
78 $extafilesizetot+=$extafilesize;
79 $extbfilesizetot+=$extbfilesize;
80 $extarpmsizetot+=$extarpmsize;
81 $extbrpmsizetot+=$extbrpmsize;
82 if (($extafilesize>=$extbfilesize)!=($extarpmsize>=$extbrpmsize)) {
83 #warn "file vs. rpm size do not match (${exta}filesize=$extafilesize ${extb}filesize=$extbfilesize ${exta}rpmsize=$extarpmsize ${extb}rpmsize=$extbrpmsize: $srcrpm";
85 if ($extafilesize==0&&$extbfilesize==0) {
87 } elsif ($extafilesize<$extbfilesize) {
88 #warn "exta ${exta}filesize $extafilesize < ${extb}filesize $extbfilesize: $srcrpm";
90 } elsif ($extafilesize>$extbfilesize) {
95 push @{$filestat{$extafilesize-$extbfilesize}},sprintf("%.2f",100*$extafilesize/$extbfilesize).": $srcrpm ${exta}filesize=$extafilesize ${extb}filesize=$extbfilesize" if $extbfilesize;
96 if ($extarpmsize==0&&$extbrpmsize==0) {
98 } elsif ($extarpmsize<$extbrpmsize) {
100 } elsif ($extarpmsize>$extbrpmsize) {
106 push @srcrpms,$srcrpm;
109 if (($ARGV[0]||"") eq "-r") {
112 for (split /\n/,readfile($ARGV[0] eq "-"?"rpm -qa '*-debuginfo'|":$ARGV[0])) {
114 /^(.*)-debuginfo-[^-]*-[^-]*$/ or die;
119 my $all_sorted=shift @ARGV if ($ARGV[0]||"") eq "-a";
121 .$0.' [-r <rpmqafile>] [-a] {""|.dt.rpm|.dt5.rpm} {""|.dt.rpm|.dt5.rpm}'."\n"
122 .$0.' "" .dt.rpm;'.$0.' .dt.rpm .dt5.rpm;'.$0.' "" .dt5.rpm'."\n"
125 #my $allpkgs=readfile "dnf -C --disablerepo='*' --enablerepo=rawhide-source repoquery -a --arch src 2>/dev/null|";
126 my $allpkgs=readfile "all";
127 my %allpkgs=map(("build/$_.src.rpm"=>1),grep /./,(split /\n/,$allpkgs));
129 for my $srcrpmdone (glob "build/*.src.rpm.done") {
130 (my $srcrpm=$srcrpmdone)=~s{\Q.done\E$}{} or die $srcrpmdone;
132 $srcrpm=~m{^build/(.*)-[^-]*-[^-]*$} or die;
135 if (!$allpkgs{$srcrpm}) {
136 warn "extra: $srcrpm\n";
144 for my $srcrpm (keys(%allpkgs)) {
145 next if $allpkgs{$srcrpm}>1;
146 warn "unbuilt: $srcrpm\n";
150 die if length($allpkgs)!=keys(%allpkgs);
151 $allpkgs=keys(%allpkgs);
152 die if $allpkgs!=$done+$mockfail+$extbmockfail+$unbuilt;
153 print "extras=$extras; unbuilt=$unbuilt; done=$done + ${exta}mockfail=$mockfail + ${extb}mockfail=$extbmockfail = ".($done+$mockfail+$extbmockfail)." all=$allpkgs processed=".(($done+$mockfail+$extbmockfail)/$allpkgs*100)."%\n";
154 print "${exta}winbyfile=$extawinbyfile"." ${extb}winbyfile=$extbwinbyfile"." equalbyfile=$equalbyfile"." emptybyfile=$emptybyfile"."\n";
155 print "${exta}winbyrpm =$extawinbyrpm" ." ${extb}winbyrpm =$extbwinbyrpm" ." equalbyrpm =$equalbyrpm" ." emptybyrpm =$emptybyrpm" ."\n";
156 print "${exta}filesizetot=$extafilesizetot"." ${extb}filesizetot=$extbfilesizetot"." = ".($extafilesizetot/$extbfilesizetot*100)."%\n";
157 print " ${exta}rpmsizetot=$extarpmsizetot" ." ${extb}rpmsizetot=$extbrpmsizetot" ." = ".( $extarpmsizetot/ $extbrpmsizetot*100)."%\n";
158 #print "equal: $_\n" for @{$filestat{1}};
159 my @sorted=map @{$filestat{$_}},sort {$a<=>$b;} keys(%filestat);
162 print($sorted[$ix]."\n");
165 out $_ for 0..$#sorted;
169 out $_ for @sorted-$p..$#sorted;
171 print "debuginfod download size: ";
174 for my $srcrpm (@srcrpms) {
175 my $rpmsizes="$srcrpm.rpmsizes";
176 -e $rpmsizes or (system "./debuginfosize $srcrpm" and die $srcrpm);
177 -e $rpmsizes or die $srcrpm;
178 my $f=readfile $rpmsizes;
179 $f=~/^(\d+) (\d+)\n$/s;
182 $extasizetot+=$extasize;
183 $extbsizetot+=$extbsize;
185 print "${exta}sizetot=$extasizetot ${extb}sizetot=$extbsizetot = ".sprintf("%.2f",$extasizetot/$extbsizetot*100)."%\n";
186 print "build time: ";
189 for my $srcrpm (@srcrpms) {
192 my $mocklogtime="$mocklog.time";
193 return 0+readfile $mocklogtime if -e $mocklogtime;
194 my $f=readfile($mocklog);
195 # INFO: Done(firefox-78.0-2.fc33.src.rpm) Config(fedora-rawhide-x86_64) 288 minutes 35 seconds
197 $t=$1*60+$2 while $f=~/\nINFO: Done[(][^\n]*[)] (\d+) minutes (\d+) seconds\n/g;
198 defined $t or die $mocklog;
199 writefile $mocklogtime,"$t\n";
202 $extatime+=onemocklog "$srcrpm$exta.mocklog";
203 $extbtime+=onemocklog "$srcrpm$extb.mocklog";
205 print "${exta}time=$extatime ${extb}time=$extbtime = ".sprintf("%.2f",$extatime/$extbtime*100)."%\n";