Output better paths to display in bug reports and compute a common
prefix for all files.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50592 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/scan-build b/utils/scan-build
index 0024c8e..e35bc2f 100755
--- a/utils/scan-build
+++ b/utils/scan-build
@@ -17,6 +17,7 @@
use File::Temp qw/ :mktemp /;
use FindBin qw($RealBin);
use Digest::MD5;
+use File::Basename;
my $Verbose = 0; # Verbose output from this script.
my $Prog = "scan-build";
@@ -140,6 +141,58 @@
}
##----------------------------------------------------------------------------##
+# UpdatePrefix - Compute the common prefix of files.
+##----------------------------------------------------------------------------##
+
+my $Prefix;
+
+sub UpdatePrefix {
+
+ my $x = shift;
+ my $y = basename($x);
+ $x =~ s/\Q$y\E$//;
+
+ # Ignore /usr, /Library, /System, /Developer
+
+ return if ( $x =~ /^\/usr/ or $x =~ /^\/Library/
+ or $x =~ /^\/System/ or $x =~ /^\/Developer/);
+
+
+ if (!defined $Prefix) {
+ $Prefix = $x;
+ return;
+ }
+
+ chop $Prefix while (!($x =~ /^$Prefix/));
+}
+
+sub GetPrefix {
+ return $Prefix;
+}
+
+##----------------------------------------------------------------------------##
+# UpdateInFilePath - Update the path in the report file.
+##----------------------------------------------------------------------------##
+
+sub UpdateInFilePath {
+ my $fname = shift;
+ my $regex = shift;
+ my $newtext = shift;
+
+ open (RIN, $fname) or die "cannot open $fname";
+ open (ROUT, ">$fname.tmp") or die "cannot open $fname.tmp";
+
+ while (<RIN>) {
+ s/$regex/$newtext/;
+ print ROUT $_;
+ }
+
+ close (ROUT);
+ close (RIN);
+ `mv $fname.tmp $fname`;
+}
+
+##----------------------------------------------------------------------------##
# ScanFile - Scan a report file for various identifying attributes.
##----------------------------------------------------------------------------##
@@ -185,6 +238,7 @@
}
elsif (/<!-- BUGFILE (.*) -->$/) {
$BugFile = $1;
+ UpdatePrefix($BugFile);
}
elsif (/<!-- BUGPATHLENGTH (.*) -->$/) {
$BugPathLength = $1;
@@ -351,6 +405,16 @@
</tr>
ENDTEXT
+ my $prefix = GetPrefix();
+ my $regex;
+ my $InFileRegex;
+ my $InFilePrefix = "File:</td><td>";
+
+ if (defined($prefix)) {
+ $regex = qr/^\Q$prefix\E/is;
+ $InFileRegex = qr/\Q$InFilePrefix$prefix\E/is;
+ }
+
for my $row ( sort { $a->[1] cmp $b->[1] } @Index ) {
my $x = lc($row->[1]);
@@ -364,7 +428,20 @@
print OUT lc($row->[1]);
print OUT "</td>\n";
- for my $j ( 2 .. $#{$row} ) {
+ # Update the file prefix.
+
+ my $fname = $row->[2];
+ if (defined($regex)) {
+ $fname =~ s/$regex//;
+ UpdateInFilePath("$Dir/$ReportFile", $InFileRegex, $InFilePrefix)
+ }
+
+ print "Prefix is '$prefix'\n";
+ print OUT "<td>$fname</td>\n";
+
+ # Print the rest of the columns.
+
+ for my $j ( 3 .. $#{$row} ) {
print OUT "<td>$row->[$j]</td>\n"
}