Giuseppe Bilotta <giuseppe.bilotta@xxxxxxxxx> writes: > The manually-built email format in commitdiff_plain output is not > appropriate for feeding git-am, because of two limitations: > * when a range of commits is specified, commitdiff_plain publishes a > single patch with the message from the first commit, instead of a > patchset, > * in either case, the patch summary is replicated both as email subject > and as first line of the email itself, resulting in a doubled summary > if the output is fed to git-am. > > We thus create a new view that can be fed to git-am directly by exposing > the output of git format-patch directly. This allows patch exchange and > submission via gitweb. > > A configurable limit is imposed on the number of commits which will be > included in a patchset, to prevent DoS attacks on the server. Setting > the limit to 0 will disable the patch view, setting it to a negative > number will remove the limit. > > Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@xxxxxxxxx> > --- > gitweb/gitweb.perl | 41 ++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 40 insertions(+), 1 deletions(-) > > diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl > index 2738643..c9abfcf 100755 > --- a/gitweb/gitweb.perl > +++ b/gitweb/gitweb.perl > @@ -329,6 +329,13 @@ our %feature = ( > 'ctags' => { > 'override' => 0, > 'default' => [0]}, > + > + # The maximum number of patches in a patchset generated in patch > + # view. Set this to 0 or undef to disable patch view, or to a > + # negative number to remove any limit. > + 'patches' => { > + 'override' => 1, > + 'default' => [16]}, > ); Looking at the existing entries in the %feature hash, it seems that it is our tradition that a new feature starts as disabled and not overridable (see 'ctags' in the context above). > sub git_commitdiff { > my $format = shift || 'html'; > + > + my $patch_max = gitweb_check_feature('patches'); > + if ($format eq 'patch') { > + die_error(403, "Patch view not allowed") unless $patch_max; > + } > + Should you have to pay overhead for the check-feature call even when the $format is not "patch"? > @@ -5396,6 +5410,7 @@ sub git_commitdiff { > } > # we need to prepare $formats_nav before almost any parameter munging > my $formats_nav; > + Noise. > @@ -5532,6 +5552,15 @@ 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" . '"'); > + # TODO add X-Git-Tag/X-Git-Url headers in a sensible way A stupid question. Are you talking about sending these X-Foo as extra HTTP headers? What good would they do (iow what will they be used for by the receiving browser/wget)? Other than that the patch seems quite straightforward and was a pleasant read. Thanks. -- 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