gitweb: buggy 'commitdiff_plain' output

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I complained to the CIFS people about their crazy duplicated commit 
message headers: see for example

    [torvalds@nehalem linux]$ git show --stat aeaaf253c4dee7ff9af2f3f0595f3bb66964e944
    commit aeaaf253c4dee7ff9af2f3f0595f3bb66964e944
    Author: Jeff Layton <jlayton@xxxxxxxxxx>
    Date:   Thu Jul 9 01:46:39 2009 -0400
    
        cifs: remove cifsInodeInfo->inUse counter
        
        cifs: remove cifsInodeInfo->inUse counter
        
        It was purported to be a refcounter of some sort, but was never
        used that way. It never served any purpose that wasn't served equally well
        by the I_NEW flag.
        
        Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
        Reviewed-by: Christoph Hellwig <hch@xxxxxx>
        Signed-off-by: Steve French <sfrench@xxxxxxxxxx>
    
     fs/cifs/cifsfs.c   |    1 -
     fs/cifs/cifsglob.h |    1 -
     2 files changed, 0 insertions(+), 2 deletions(-)

and note the duplicated "cifs: remove cifsInodeInfo->inUse counter" line.

It turns out that that duplication is because they use gitweb as a strange 
patch distribution system (rather than emailing each other patches), and 
download the 'commitdiff_plain' version of the diff and then apply it with 
'git am -s'.

Ok, so it's a really odd way of doing things, but hey, that gitweb feature 
clearly does try to support that exact workflow, or why would that 
commitdiff_plain output try to look like an email?

But gitweb is a totally buggy piece of trash when it comes to exporting 
commits that way.

Why? Because it first has a 'Subject:' line, and then the "body" of the 
email repeats the raw commit message output. So _of_course_ you get the 
header duplicated.

Now, I asked Steve to not use gitweb (or edit the result some way), but 
this really is a gitweb bug. And since I don't do perl, I can't fix it, 
even though I can pinpoint exactly where the bug is (lines 5732 - 5752 in 
gitweb/gitweb.perl).

I totally untested patch written by a monkey who doesn't actually do perl 
is appended as a purely theoretical pointer in the right direction. But I 
really have no clue about perl, so what the heck do I know? This is like 
my tcl programming - pattern matching rather than any real understanding.

I'm sure there are smarter ways to do this with some simple mapping 
function or whatever.

		Linus

---
 gitweb/gitweb.perl |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 6a1b5b5..a809768 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -5729,6 +5729,7 @@ sub git_commitdiff {
 		}
 
 	} elsif ($format eq 'plain') {
+		my $show = false;
 		my $refs = git_get_references("tags");
 		my $tagname = git_get_rev_name_tags($hash);
 		my $filename = basename($project) . "-$hash.patch";
@@ -5747,7 +5748,11 @@ sub git_commitdiff {
 		print "X-Git-Url: " . $cgi->self_url() . "\n\n";
 
 		foreach my $line (@{$co{'comment'}}) {
-			print to_utf8($line) . "\n";
+			if ($show) {
+				print to_utf8($line) . "\n";
+			} else if ($line ne "") {
+				$show = true;
+			}
 		}
 		print "---\n\n";
 	} elsif ($format eq 'patch') {
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]