Merge branch 'jn/gitweb-no-logo' into maint
authorJunio C Hamano <gitster@pobox.com>
Wed, 19 Jan 2011 16:26:47 +0000 (08:26 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 19 Jan 2011 16:26:47 +0000 (08:26 -0800)
* jn/gitweb-no-logo:
gitweb: make logo optional

1  2 
gitweb/gitweb.perl
diff --combined gitweb/gitweb.perl
index fda9d30f37ce40b6da55b9558eee8848b20ebef9,10cf97e66fea37475b880badabc613f41da76df2..aad93099d271df4be10b35edd5e623cf5d7fcdac
@@@ -1186,7 -1186,7 +1186,7 @@@ sub href 
                $href =~ s,/$,,;
  
                # Then add the project name, if present
 -              $href .= "/".esc_url($params{'project'});
 +              $href .= "/".esc_path_info($params{'project'});
                delete $params{'project'};
  
                # since we destructively absorb parameters, we keep this
                # Summary just uses the project path URL, any other action is
                # added to the URL
                if (defined $params{'action'}) {
 -                      $href .= "/".esc_url($params{'action'}) unless $params{'action'} eq 'summary';
 +                      $href .= "/".esc_path_info($params{'action'})
 +                              unless $params{'action'} eq 'summary';
                        delete $params{'action'};
                }
  
                        || $params{'hash_parent'} || $params{'hash'});
                if (defined $params{'hash_base'}) {
                        if (defined $params{'hash_parent_base'}) {
 -                              $href .= esc_url($params{'hash_parent_base'});
 +                              $href .= esc_path_info($params{'hash_parent_base'});
                                # skip the file_parent if it's the same as the file_name
                                if (defined $params{'file_parent'}) {
                                        if (defined $params{'file_name'} && $params{'file_parent'} eq $params{'file_name'}) {
                                                delete $params{'file_parent'};
                                        } elsif ($params{'file_parent'} !~ /\.\./) {
 -                                              $href .= ":/".esc_url($params{'file_parent'});
 +                                              $href .= ":/".esc_path_info($params{'file_parent'});
                                                delete $params{'file_parent'};
                                        }
                                }
                                delete $params{'hash_parent'};
                                delete $params{'hash_parent_base'};
                        } elsif (defined $params{'hash_parent'}) {
 -                              $href .= esc_url($params{'hash_parent'}). "..";
 +                              $href .= esc_path_info($params{'hash_parent'}). "..";
                                delete $params{'hash_parent'};
                        }
  
 -                      $href .= esc_url($params{'hash_base'});
 +                      $href .= esc_path_info($params{'hash_base'});
                        if (defined $params{'file_name'} && $params{'file_name'} !~ /\.\./) {
 -                              $href .= ":/".esc_url($params{'file_name'});
 +                              $href .= ":/".esc_path_info($params{'file_name'});
                                delete $params{'file_name'};
                        }
                        delete $params{'hash'};
                        delete $params{'hash_base'};
                } elsif (defined $params{'hash'}) {
 -                      $href .= esc_url($params{'hash'});
 +                      $href .= esc_path_info($params{'hash'});
                        delete $params{'hash'};
                }
  
        }
        $href .= "?" . join(';', @result) if scalar @result;
  
 +      # final transformation: trailing spaces must be escaped (URI-encoded)
 +      $href =~ s/(\s+)$/CGI::escape($1)/e;
 +
        return $href;
  }
  
@@@ -1351,17 -1347,6 +1351,17 @@@ sub esc_param 
        return $str;
  }
  
 +# the quoting rules for path_info fragment are slightly different
 +sub esc_path_info {
 +      my $str = shift;
 +      return undef unless defined $str;
 +
 +      # path_info doesn't treat '+' as space (specially), but '?' must be escaped
 +      $str =~ s/([^A-Za-z0-9\-_.~();\/;:@&= +]+)/CGI::escape($1)/eg;
 +
 +      return $str;
 +}
 +
  # quote unsafe chars in whole URL, so some characters cannot be quoted
  sub esc_url {
        my $str = shift;
                insert_file($site_header);
        }
  
-       print "<div class=\"page_header\">\n" .
-             $cgi->a({-href => esc_url($logo_url),
-                      -title => $logo_label},
-                     qq(<img src=").esc_url($logo).qq(" width="72" height="27" alt="git" class="logo"/>));
+       print "<div class=\"page_header\">\n";
+       if (defined $logo) {
+               print $cgi->a({-href => esc_url($logo_url),
+                              -title => $logo_label},
+                             $cgi->img({-src => esc_url($logo),
+                                        -width => 72, -height => 27,
+                                        -alt => "git",
+                                        -class => "logo"}));
+       }
        print $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / ";
        if (defined $project) {
                print $cgi->a({-href => href(action=>"summary")}, esc_html($project));