[PATCH 1/2] gitweb: add patch view

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <git@...>
Cc: Jakub Narebski <jnareb@...>, Petr Baudis <pasky@...>, Junio C Hamano <gitster@...>, Giuseppe Bilotta <giuseppe.bilotta@...>
Date: Saturday, November 29, 2008 - 9:41 am

Trying to use 'commitdiff_plain' output as input to git am results in
some annoying results such as doubled subject lines. We thus offer a new
'patch' view that exposes format-patch output directly. This makes it
easier to offer patches by linking to gitweb repositories.
---
 gitweb/gitweb.perl |   25 ++++++++++++++++++++++++-
 1 files changed, 24 insertions(+), 1 deletions(-)

diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 933e137..befe6b6 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -485,6 +485,7 @@ our %actions = (
 	"heads" => \&git_heads,
 	"history" => \&git_history,
 	"log" => \&git_log,
+	"patch" => \&git_patch,
 	"rss" => \&git_rss,
 	"atom" => \&git_atom,
 	"search" => \&git_search,
@@ -5465,7 +5466,11 @@ sub git_commitdiff {
 		open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts,
 			'-p', $hash_parent_param, $hash, "--"
 			or die_error(500, "Open git-diff-tree failed");
-
+	} elsif ($format eq 'patch') {
+		open $fd, "-|", git_cmd(), "format-patch", '--stdout',
+			$hash_parent ? "$hash_parent..$hash" :
+			('--root', '-1', $hash)
+			or die_error(500, "Open git-format-patch failed");
 	} else {
 		die_error(400, "Unknown commitdiff format");
 	}
@@ -5514,6 +5519,14 @@ sub git_commitdiff {
 			print to_utf8($line) . "\n";
 		}
 		print "---\n\n";
+	} elsif ($format eq 'patch') {
+		my $filename = basename($project) . "-$hash.patch";
+
+		print $cgi->header(
+			-type => 'text/plain',
+			-charset => 'utf-8',
+			-expires => $expires,
+			-content_disposition => 'inline; filename="' . "$filename" . '"');
 	}
 
 	# write patch
@@ -5535,6 +5548,11 @@ sub git_commitdiff {
 		print <$fd>;
 		close $fd
 			or print "Reading git-diff-tree failed\n";
+	} elsif ($format eq 'patch') {
+		local $/ = undef;
+		print <$fd>;
+		close $fd
+			or print "Reading git-format-patch failed\n";
 	}
 }
 
@@ -5542,6 +5560,11 @@ sub git_commitdiff_plain {
 	git_commitdiff('plain');
 }
 
+# format-patch-style patches
+sub git_patch {
+	git_commitdiff('patch');
+}
+
 sub git_history {
 	if (!defined $hash_base) {
 		$hash_base = git_get_head_hash($project);
-- 
1.5.6.5

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/2] gitweb: patch view, Giuseppe Bilotta, (Sat Nov 29, 9:41 am)
Re: [PATCH 0/2] gitweb: patch view, Jakub Narebski, (Sat Nov 29, 9:06 pm)
Re: [PATCH 0/2] gitweb: patch view, Giuseppe Bilotta, (Sat Nov 29, 9:44 pm)
Re: [PATCH 0/2] gitweb: patch view, Jakub Narebski, (Sun Nov 30, 8:45 pm)
Re: [PATCH 0/2] gitweb: patch view, Giuseppe Bilotta, (Sun Nov 30, 9:10 pm)
Re: [PATCH 0/2] gitweb: patch view, Jakub Narebski, (Mon Dec 1, 7:02 am)
Re: [PATCH 0/2] gitweb: patch view, Giuseppe Bilotta, (Wed Dec 3, 5:25 am)
[PATCH 1/2] gitweb: add patch view, Giuseppe Bilotta, (Sat Nov 29, 9:41 am)
Re: [PATCH 1/2] gitweb: add patch view, Sverre Rabbelier, (Sat Nov 29, 11:43 am)
Re: [PATCH 1/2] gitweb: add patch view, Jakub Narebski, (Sat Nov 29, 12:10 pm)
Re: [PATCH 1/2] gitweb: add patch view, Giuseppe Bilotta, (Sat Nov 29, 12:48 pm)
Re: [PATCH 1/2] gitweb: add patch view, Sverre Rabbelier, (Sat Nov 29, 12:50 pm)