From 7a4648df321be70bb009a8dc56e0162c3f13c18c Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Fri, 2 May 2008 22:04:53 +0000 Subject: [PATCH] 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 --- Driver/HTMLDiagnostics.cpp | 11 +++--- utils/scan-build | 79 +++++++++++++++++++++++++++++++++++++- 2 files changed, 84 insertions(+), 6 deletions(-) diff --git a/Driver/HTMLDiagnostics.cpp b/Driver/HTMLDiagnostics.cpp index cb333b978c..22e2538482 100644 --- a/Driver/HTMLDiagnostics.cpp +++ b/Driver/HTMLDiagnostics.cpp @@ -160,16 +160,17 @@ void HTMLDiagnostics::ReportDiag(const PathDiagnostic& D) { // Get the full directory name of the analyzed file. const FileEntry* Entry = SMgr.getFileEntryForID(FileID); - std::string DirName(Entry->getDir()->getName()); // This is a cludge; basically we want to append either the full // working directory if we have no directory information. This is // a work in progress. - if (DirName == ".") - DirName = llvm::sys::Path::GetCurrentDirectory().toString(); - else if (llvm::sys::Path(Entry->getName()).isAbsolute()) - DirName = ""; + std::string DirName = ""; + + if (!llvm::sys::Path(Entry->getName()).isAbsolute()) { + llvm::sys::Path P = llvm::sys::Path::GetCurrentDirectory(); + DirName = P.toString() + "/"; + } // Add the name of the file as an

tag. diff --git a/utils/scan-build b/utils/scan-build index 0024c8ec36..e35bc2f4a0 100755 --- a/utils/scan-build +++ b/utils/scan-build @@ -17,6 +17,7 @@ use warnings; 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"; @@ -139,6 +140,58 @@ sub ComputeDigest { return $Result; } +##----------------------------------------------------------------------------## +# 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 () { + 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 @@ sub ScanFile { } elsif (/$/) { $BugFile = $1; + UpdatePrefix($BugFile); } elsif (/$/) { $BugPathLength = $1; @@ -351,6 +405,16 @@ print OUT < ENDTEXT + my $prefix = GetPrefix(); + my $regex; + my $InFileRegex; + my $InFilePrefix = "File:"; + + 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 @@ ENDTEXT print OUT lc($row->[1]); print OUT "\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 "$fname\n"; + + # Print the rest of the columns. + + for my $j ( 3 .. $#{$row} ) { print OUT "$row->[$j]\n" } -- 2.50.1