X-Git-Url: https://git.ladys.computer/Gitweb/blobdiff_plain/20b7839f0cd45d4c205e8d6934370c8354078153e2b2c86430ae163434edeb61..ff1f840d039d8a7bf6c6e82c167723ddbbe694b7296c52fbaf4a365e87e98b21:/gitweb.perl
diff --git a/gitweb.perl b/gitweb.perl
index aa17a89..78e04e4 100755
--- a/gitweb.perl
+++ b/gitweb.perl
@@ -134,6 +134,12 @@ our $default_projects_order = "project";
# (only effective if this variable evaluates to true)
our $export_ok = "++GITWEB_EXPORT_OK++";
+# don't generate age column on the projects list page
+our $omit_age_column = 0;
+
+# don't generate information about owners of repositories
+our $omit_owner=0;
+
# show repository only if this subroutine returns true
# when given the path to the project, for example:
# sub { return -e "$_[0]/git-daemon-export-ok"; }
@@ -3013,9 +3019,11 @@ sub git_get_projects_list {
}
if (check_export_ok("$projectroot/$path")) {
my $pr = {
- path => $path,
- owner => to_utf8($owner),
+ path => $path
};
+ if ($owner) {
+ $pr->{'owner'} = to_utf8($owner);
+ }
push @list, $pr;
}
}
@@ -4477,30 +4485,33 @@ sub git_print_log {
}
# print log
- my $signoff = 0;
- my $empty = 0;
+ my $skip_blank_line = 0;
foreach my $line (@$log) {
- if ($line =~ m/^ *(signed[ \-]off[ \-]by[ :]|acked[ \-]by[ :]|cc[ :])/i) {
- $signoff = 1;
- $empty = 0;
+ if ($line =~ m/^\s*([A-Z][-A-Za-z]*-[Bb]y|C[Cc]): /) {
if (! $opts{'-remove_signoff'}) {
print "" . esc_html($line) . "
\n";
- next;
- } else {
- # remove signoff lines
- next;
+ $skip_blank_line = 1;
}
- } else {
- $signoff = 0;
+ next;
+ }
+
+ if ($line =~ m,\s*([a-z]*link): (https?://\S+),i) {
+ if (! $opts{'-remove_signoff'}) {
+ print "" . esc_html($1) . ": " .
+ "" . esc_html($2) . "" .
+ "
\n";
+ $skip_blank_line = 1;
+ }
+ next;
}
# print only one empty line
# do not print empty line after signoff
if ($line eq "") {
- next if ($empty || $signoff);
- $empty = 1;
+ next if ($skip_blank_line);
+ $skip_blank_line = 1;
} else {
- $empty = 0;
+ $skip_blank_line = 0;
}
print format_log_line_html($line) . "
\n";
@@ -4508,7 +4519,7 @@ sub git_print_log {
if ($opts{'-final_empty_line'}) {
# end with single empty line
- print "
\n" unless $empty;
+ print "
\n" unless $skip_blank_line;
}
}
@@ -5066,7 +5077,7 @@ sub print_inline_diff_lines {
# Format removed and added line, mark changed part and HTML-format them.
# Implementation is based on contrib/diff-highlight
sub format_rem_add_lines_pair {
- my ($rem, $add) = @_;
+ my ($rem, $add, $num_parents) = @_;
# We need to untabify lines before split()'ing them;
# otherwise offsets would be invalid.
@@ -5078,8 +5089,8 @@ sub format_rem_add_lines_pair {
my @rem = split(//, $rem);
my @add = split(//, $add);
my ($esc_rem, $esc_add);
- # Ignore +/- character, thus $prefix_len is set to 1.
- my ($prefix_len, $suffix_len) = (1, 0);
+ # Ignore leading +/- characters for each parent.
+ my ($prefix_len, $suffix_len) = ($num_parents, 0);
my ($prefix_has_nonspace, $suffix_has_nonspace);
my $shorter = (@rem < @add) ? @rem : @add;
@@ -5117,15 +5128,43 @@ sub format_rem_add_lines_pair {
# HTML-format diff context, removed and added lines.
sub format_ctx_rem_add_lines {
- my ($ctx, $rem, $add, $is_combined) = @_;
+ my ($ctx, $rem, $add, $num_parents) = @_;
my (@new_ctx, @new_rem, @new_add);
+ my $can_highlight = 0;
+ my $is_combined = ($num_parents > 1);
# Highlight if every removed line has a corresponding added line.
- # Combined diffs are not supported at this moment.
- if (!$is_combined && @$add > 0 && @$add == @$rem) {
+ if (@$add > 0 && @$add == @$rem) {
+ $can_highlight = 1;
+
+ # Highlight lines in combined diff only if the chunk contains
+ # diff between the same version, e.g.
+ #
+ # - a
+ # - b
+ # + c
+ # + d
+ #
+ # Otherwise the highlightling would be confusing.
+ if ($is_combined) {
+ for (my $i = 0; $i < @$add; $i++) {
+ my $prefix_rem = substr($rem->[$i], 0, $num_parents);
+ my $prefix_add = substr($add->[$i], 0, $num_parents);
+
+ $prefix_rem =~ s/-/+/g;
+
+ if ($prefix_rem ne $prefix_add) {
+ $can_highlight = 0;
+ last;
+ }
+ }
+ }
+ }
+
+ if ($can_highlight) {
for (my $i = 0; $i < @$add; $i++) {
my ($line_rem, $line_add) = format_rem_add_lines_pair(
- $rem->[$i], $add->[$i]);
+ $rem->[$i], $add->[$i], $num_parents);
push @new_rem, $line_rem;
push @new_add, $line_add;
}
@@ -5141,10 +5180,11 @@ sub format_ctx_rem_add_lines {
# Print context lines and then rem/add lines.
sub print_diff_lines {
- my ($ctx, $rem, $add, $diff_style, $is_combined) = @_;
+ my ($ctx, $rem, $add, $diff_style, $num_parents) = @_;
+ my $is_combined = $num_parents > 1;
($ctx, $rem, $add) = format_ctx_rem_add_lines($ctx, $rem, $add,
- $is_combined);
+ $num_parents);
if ($diff_style eq 'sidebyside' && !$is_combined) {
print_sidebyside_diff_lines($ctx, $rem, $add);
@@ -5155,7 +5195,7 @@ sub print_diff_lines {
}
sub print_diff_chunk {
- my ($diff_style, $is_combined, $from, $to, @chunk) = @_;
+ my ($diff_style, $num_parents, $from, $to, @chunk) = @_;
my (@ctx, @rem, @add);
# The class of the previous line.
@@ -5190,7 +5230,7 @@ sub print_diff_chunk {
if (!$class || ((@rem || @add) && $class eq 'ctx') ||
(@rem && @add && $class ne $prev_class)) {
print_diff_lines(\@ctx, \@rem, \@add,
- $diff_style, $is_combined);
+ $diff_style, $num_parents);
@ctx = @rem = @add = ();
}
@@ -5333,7 +5373,7 @@ sub git_patchset_body {
my $class = diff_line_class($patch_line, \%from, \%to);
if ($class eq 'chunk_header') {
- print_diff_chunk($diff_style, $is_combined, \%from, \%to, @chunk);
+ print_diff_chunk($diff_style, scalar @hash_parents, \%from, \%to, @chunk);
@chunk = ();
}
@@ -5342,7 +5382,7 @@ sub git_patchset_body {
} continue {
if (@chunk) {
- print_diff_chunk($diff_style, $is_combined, \%from, \%to, @chunk);
+ print_diff_chunk($diff_style, scalar @hash_parents, \%from, \%to, @chunk);
@chunk = ();
}
print "\n"; # class="patch"
@@ -5582,11 +5622,15 @@ sub git_project_list_rows {
? esc_html_match_hl_chopped($pr->{'descr_long'},
$pr->{'descr'}, $search_regexp)
: esc_html($pr->{'descr'})) .
- "\n" .
- "
| description | " . esc_html($descr) . " |
| owner | " . esc_html($owner) . " |
| description | " . esc_html($descr) . " |
| owner | " . esc_html($owner) . " |
| last change | " . "".format_timestamp_html(\%cd)." |