work on pointing error messages to source files
authorBen Pfaff <blp@gnu.org>
Thu, 18 Feb 2010 05:33:35 +0000 (21:33 -0800)
committerBen Pfaff <blp@gnu.org>
Thu, 18 Feb 2010 05:33:35 +0000 (21:33 -0800)
build-pspp
git-import-tar
results2html

index d8e4a794cb59d755f1dde8d0e2f4670413585233..6d13ccbf48ad0220e97e19799b9d9d314a914bc7 100755 (executable)
@@ -252,6 +252,10 @@ EOF
     my $tarname = "pspp-$version.tar.gz";
     $tarball = save_result ("source distribution", "pspp$build_number/_build/$tarname", 1);
 
+    # Save distributed files in Git.
+    start_step ("Save distributed files in Git");
+    run ("GIT_DIR=$topdir/.git $topdir/git-import-tar $resultsdir/$tarname refs/builds/$build_number/dist", "git-dist");
+
     # Build user manual
     start_step ("Build user manual");
     run ("cd pspp$build_number && cp _build/doc/*.texi doc/");
index 30cd9fa3b17f699b03a133ca567d00cc9f081ab4..13d70b1aa4e8aa07858f3c73aa8a60c1c4597fec 100755 (executable)
@@ -55,11 +55,8 @@ if (! -e $tarball) {
       or die "$0: failed to open \"$tarball\": $!\n";
 }
 
-my $commit_user = `git config --get user.name`;
-chomp $commit_user;
-my $commit_email = `git config --get user.email`;
-chomp $commit_email;
-my $committer = "$commit_user <$commit_email>";
+my $committer_ident = `git var GIT_COMMITTER_IDENT`;
+chomp $committer_ident;
 
 open (GFI, "|-", "git fast-import --date-format=raw --quiet")
   or die "$0: \"git fast-import\" failed to start: $!\n";
@@ -114,7 +111,7 @@ for (;;) {
 my $commit = $mark++;
 print GFI "commit $branch\n";
 print GFI "mark :$commit\n";
-print GFI "committer $committer ", time(), " +0000\n";
+print GFI "committer $committer_ident\n";
 print GFI "data ", length($message), "\n";
 print GFI $message, "\n";
 print GFI "merge $branch^0\n" if !$new_branch;
index abc520d3db5033cad7701e7725f29a09c7113adf..4bf398d35c49b9734d92578e3abdc4a6c71f37d2 100755 (executable)
@@ -3,6 +3,7 @@
 use strict;
 use warnings;
 
+use File::Spec;
 use HTML::Entities;
 
 open (LOG, '<', "LOG");
@@ -36,16 +37,24 @@ my (@products);
 my (@steps);
 my ($new_page) = 0;
 my ($result) = "failure";
+my @dirstack;
 while (<LOG>) {
     my $ln = $.;
     chomp;
 
     if (/^\f$/) {
        $new_page = 1;
+       @dirstack = ();
        print LOG_HTML "</pre><hr><pre>\n";
        next;
     }
 
+    if (/Entering directory `(.*)'$/) {
+        push (@dirstack, $1);
+    } elsif (/Leaving directory `(.*)'$/) {
+        pop (@dirstack);
+    }
+
     my $log_class;
     if ($new_page) {
        $new_page = 0;
@@ -74,6 +83,21 @@ while (<LOG>) {
            $d{DIAGNOSTIC} = lc ($diagnostic);
            $d{MESSAGE} = $_;
            $d{LN} = $ln;
+
+           if (@dirstack && (my ($file, $line) = /^([^\s:]+):(\d+):\s/)) {
+               $file = File::Spec->rel2abs ($file, $dirstack[$#dirstack]);
+               my (@path) = grep ($_ ne '' && $_ ne '.', split ('/', $file));
+               for (my $i = 0; $i < $#path; ) {
+                   if ($path[$i + 1] eq '..') {
+                       splice (@path, $i, 2);
+                   } else {
+                       $i++;
+                   }
+               }
+
+               $d{LINE} = $line;
+               $d{FILE} = join ('/', @path);
+           }
            push (@{$steps[$#steps]{CHILDREN}}, \%d);
 
            $log_class = "$diagnostic";
@@ -136,7 +160,11 @@ foreach my $s (@steps) {
            print INDEX "<p class=\"$c->{DIAGNOSTIC}\">";
            print INDEX "<a href=\"log.html#$c->{LN}\">";
            print INDEX encode_entities ($c->{MESSAGE});
-           print INDEX "</a></p>\n";
+           print INDEX "</a>";
+           if (exists $c->{FILE}) {
+               print INDEX " in $c->{FILE}";
+           }
+           print INDEX "</p>\n";
        } else {
            print INDEX "<p>&rarr; <a href=\"", encode_entities ($c->{HREF}), "\">";
            print INDEX encode_entities ($c->{PRODUCT});