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 die if -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";
120 die $0.' [-r <rpmqafile>] [-a] {""|.dt.rpm|.dt5.rpm} {""|.dt.rpm|.dt5.rpm}' if @ARGV!=2;
122 #my $allpkgs=readfile "dnf -C --disablerepo='*' --enablerepo=rawhide-source repoquery -a --arch src 2>/dev/null|";
123 my $allpkgs=readfile "all";
124 my %allpkgs=map(("build/$_.src.rpm"=>1),grep /./,(split /\n/,$allpkgs));
126 for my $srcrpmdone (glob "build/*.src.rpm.done") {
127 (my $srcrpm=$srcrpmdone)=~s{\Q.done\E$}{} or die $srcrpmdone;
129 $srcrpm=~m{^build/(.*)-[^-]*-[^-]*$} or die;
132 if (!$allpkgs{$srcrpm}) {
133 warn "extra: $srcrpm\n";
141 for my $srcrpm (keys(%allpkgs)) {
142 next if $allpkgs{$srcrpm}>1;
143 warn "unbuilt: $srcrpm\n";
147 die if length($allpkgs)!=keys(%allpkgs);
148 $allpkgs=keys(%allpkgs);
149 die if $allpkgs!=$done+$mockfail+$extbmockfail+$unbuilt;
150 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";
151 print "${exta}winbyfile=$extawinbyfile"." ${extb}winbyfile=$extbwinbyfile"." equalbyfile=$equalbyfile"." emptybyfile=$emptybyfile"."\n";
152 print "${exta}winbyrpm =$extawinbyrpm" ." ${extb}winbyrpm =$extbwinbyrpm" ." equalbyrpm =$equalbyrpm" ." emptybyrpm =$emptybyrpm" ."\n";
153 print "${exta}filesizetot=$extafilesizetot"." ${extb}filesizetot=$extbfilesizetot"." = ".($extafilesizetot/$extbfilesizetot*100)."%\n";
154 print " ${exta}rpmsizetot=$extarpmsizetot" ." ${extb}rpmsizetot=$extbrpmsizetot" ." = ".( $extarpmsizetot/ $extbrpmsizetot*100)."%\n";
155 #print "equal: $_\n" for @{$filestat{1}};
156 my @sorted=map @{$filestat{$_}},sort {$a<=>$b;} keys(%filestat);
159 print($sorted[$ix]."\n");
162 out $_ for 0..$#sorted;
166 out $_ for @sorted-$p..$#sorted;
168 print "debuginfod download size: ";
171 for my $srcrpm (@srcrpms) {
172 my $rpmsizes="$srcrpm.rpmsizes";
173 -e $rpmsizes or (system "./debuginfosize $srcrpm" and die $srcrpm);
174 -e $rpmsizes or die $srcrpm;
175 my $f=readfile $rpmsizes;
176 $f=~/^(\d+) (\d+)\n$/s;
179 $extasizetot+=$extasize;
180 $extbsizetot+=$extbsize;
182 print "${exta}sizetot=$extasizetot ${extb}sizetot=$extbsizetot = ".sprintf("%.2f",$extasizetot/$extbsizetot*100)."%\n";
183 print "build time: ";
186 for my $srcrpm (@srcrpms) {
189 my $mocklogtime="$mocklog.time";
190 return 0+readfile $mocklogtime if -e $mocklogtime;
191 my $f=readfile($mocklog);
192 # INFO: Done(firefox-78.0-2.fc33.src.rpm) Config(fedora-rawhide-x86_64) 288 minutes 35 seconds
194 $t=$1*60+$2 while $f=~/\nINFO: Done[(][^\n]*[)] (\d+) minutes (\d+) seconds\n/g;
195 defined $t or die $mocklog;
196 writefile $mocklogtime,"$t\n";
199 $extatime+=onemocklog "$srcrpm$exta.mocklog";
200 $extbtime+=onemocklog "$srcrpm$extb.mocklog";
202 print "${exta}time=$extatime ${extb}time=$extbtime = ".sprintf("%.2f",$extatime/$extbtime*100)."%\n";