X-Git-Url: http://git.subgeniuskitty.com/gitweb-sgk/.git/blobdiff_plain/3224ce5b1c78e8af19e3cd63534d0be3e08c4fe1..HEAD:/gitweb.cgi diff --git a/gitweb.cgi b/gitweb.cgi index 6ee17d5..93d9600 100755 --- a/gitweb.cgi +++ b/gitweb.cgi @@ -118,10 +118,8 @@ our $favicon = "static/git-favicon.png"; our $javascript = "static/gitweb.js"; # URI and label (title) of GIT logo link -#our $logo_url = "http://www.kernel.org/pub/software/scm/git/docs/"; -#our $logo_label = "git documentation"; -our $logo_url = "http://git-scm.com/"; -our $logo_label = "git homepage"; +our $logo_url = "http://subgeniuskitty.com/"; +our $logo_label = "SGK Homepage"; # source of projects list our $projects_list = ""; @@ -277,7 +275,7 @@ our %highlight_basename = ( our %highlight_ext = ( # main extensions, defining name of syntax; # see files in /usr/share/highlight/langDefs/ directory - (map { $_ => $_ } qw(py rb java css js tex bib xml awk bat ini spec tcl sql)), + (map { $_ => $_ } qw(py rb java css js tex bib xml awk bat ini spec tcl sql go)), # alternate extensions, see /etc/highlight/filetypes.conf (map { $_ => 'c' } qw(c h)), (map { $_ => 'sh' } qw(sh bash zsh ksh)), @@ -3846,6 +3844,37 @@ sub insert_file { close $fd; } +sub insert_html_file { + my $file_name = shift; + insert_file($file_name); +} + +sub insert_text_file { + my $file_name = shift; + + open my $fd, $file_name or die_error(500, "Couldn't open $file_name"); + + print "
";
+	while (my $line = <$fd>) {
+		print to_utf8($line);
+	}
+	print "
"; +} + +sub insert_markdown_file { + my $file_name = shift; + + # TODO: Make this a config option? + my $markdown_cmd = "/usr/bin/markdown"; + + open my $fd, quote_command($markdown_cmd, $file_name)." |" + or die_error(500, "Couldn't open $file_name"); + + while (my $line = <$fd>) { + print to_utf8($line); + } +} + ## ...................................................................... ## mimetype related functions @@ -6382,9 +6411,9 @@ sub git_search_files { $ltext = esc_html($ltext, -nbsp=>1); } print "
" . - $cgi->a({-href => $file_href.'#l'.$lno, - -class => "linenr"}, sprintf('%4i', $lno)) . - ' ' . $ltext . "
\n"; + "" . + "" . $ltext . "\n"; } } if ($lastfile) { @@ -6554,33 +6583,52 @@ sub git_summary { my @forklist; my $check_forks = gitweb_check_feature('forks'); - if ($check_forks) { - # find forks of a project - my $filter = $project; - $filter =~ s/\.git$//; - @forklist = git_get_projects_list($filter); - # filter out forks of forks - @forklist = filter_forks_from_projects_list(\@forklist) - if (@forklist); + + if (!defined $hash_base) { + $hash_base = "HEAD"; + } + if (!defined $hash) { + if (defined $file_name) { + $hash = git_get_hash_by_path($hash_base, $file_name, "tree"); + } else { + $hash = $hash_base; + } + } + die_error(404, "No such tree") unless defined($hash); + + my $show_sizes = gitweb_check_feature('show-sizes'); + my $have_blame = gitweb_check_feature('blame'); + + my @entries = (); + { + local $/ = "\0"; + open my $fd, "-|", git_cmd(), "ls-tree", '-z', + ($show_sizes ? '-l' : ()), @extra_options, $hash + or die_error(500, "Open git-ls-tree failed"); + @entries = map { chomp; $_ } <$fd>; + close $fd + or die_error(404, "Reading tree failed"); } + my $refs = git_get_references(); + my $ref = format_ref_marker($refs, $hash_base); git_header_html(); git_print_page_nav('summary','', $head); + my $basedir = ''; - print "
 
\n"; print "\n" . - "\n"; + "\n"; if ($owner and not $omit_owner) { - print "\n"; + print "\n"; } if (defined $cd{'rfc2822'}) { - print "" . + print "" . "\n"; } # use per project git URL list in $projectroot/$project/cloneurl # or make project git URL from git base URL and project name - my $url_tag = "clone URL"; + my $url_tag = "Clone URL"; my @url_list = git_get_project_url_list($project); @url_list = map { "$_/$project" } @git_base_url_list unless @url_list; foreach my $git_url (@url_list) { @@ -6606,50 +6654,73 @@ sub git_summary { print "
description" . esc_html($descr) . "
Description" . esc_html($descr) . "
owner" . esc_html($owner) . "
Owner" . esc_html($owner) . "
last change
Last Change".format_timestamp_html(\%cd)."
\n"; - # If XSS prevention is on, we don't include README.html. - # TODO: Allow a readme in some safe format. - if (!$prevent_xss && -s "$projectroot/$project/README.html") { - print "
readme
\n" . - "
\n"; - insert_file("$projectroot/$project/README.html"); - print "\n
\n"; # class="readme" - } + print "
\n"; + print "\n"; + my $alternate = 1; + # '..' (top directory) link if possible + if (defined $hash_base && + defined $file_name && $file_name =~ m![^/]+$!) { + if ($alternate) { + print "\n"; + } else { + print "\n"; + } + $alternate ^= 1; - # we need to request one more than 16 (0..15) to check if - # those 16 are all - my @commitlist = $head ? parse_commits($head, 17) : (); - if (@commitlist) { - git_print_header_div('shortlog'); - git_shortlog_body(\@commitlist, 0, 15, $refs, - $#commitlist <= 15 ? undef : - $cgi->a({-href => href(action=>"shortlog")}, "...")); - } + my $up = $file_name; + $up =~ s!/?[^/]+$!!; + undef $up unless $up; + # based on git_print_tree_entry + print '\n"; + print ''."\n" if $show_sizes; + print '\n"; + print "\n"; - if (@taglist) { - git_print_header_div('tags'); - git_tags_body(\@taglist, 0, 15, - $#taglist <= 15 ? undef : - $cgi->a({-href => href(action=>"tags")}, "...")); + print "\n"; } + foreach my $line (@entries) { + my %t = parse_ls_tree_line($line, -z => 1, -l => $show_sizes); - if (@headlist) { - git_print_header_div('heads'); - git_heads_body(\@headlist, $head, 0, 15, - $#headlist <= 15 ? undef : - $cgi->a({-href => href(action=>"heads")}, "...")); - } + if ($alternate) { + print "\n"; + } else { + print "\n"; + } + $alternate ^= 1; + + git_print_tree_entry(\%t, $basedir, $hash_base, $have_blame); - if (%remotedata) { - git_print_header_div('remotes'); - git_remotes_body(\%remotedata, 15, $head); + print "\n"; } + print "
' . mode_str('040000') . " '; + print $cgi->a({-href => href(action=>"tree", + hash_base=>$hash_base, + file_name=>$up)}, + ".."); + print "
\n" . + "
"; - if (@forklist) { - git_print_header_div('forks'); - git_project_list_body(\@forklist, 'age', 0, 15, - $#forklist <= 15 ? undef : - $cgi->a({-href => href(action=>"forks")}, "..."), - 'no_header'); + # If present, print one of the following, in order: + # README.md, README.txt, README, README.html. + my $cwd_path = "$projectroot/$project"; + $cwd_path =~ s/\.git$//; + $cwd_path = $cwd_path . $basedir; + if (!$prevent_xss && -s $cwd_path . "README.md") { + print "
\n"; + insert_markdown_file($cwd_path . "README.md"); + print "\n
\n"; # class="readme" + } elsif (!$prevent_xss && -s $cwd_path . "README.txt") { + print "
\n"; + insert_text_file($cwd_path . "README.txt"); + print "\n
\n"; # class="readme" + } elsif (!$prevent_xss && -s $cwd_path . "README") { + print "
\n"; + insert_text_file($cwd_path . "README"); + print "\n
\n"; # class="readme" + } elsif (!$prevent_xss && -s $cwd_path . "README.html") { + print "
\n"; + insert_html_file($cwd_path . "README.html"); + print "\n
\n"; # class="readme" } git_footer_html(); @@ -7131,13 +7202,20 @@ sub git_blob { href(action=>"blob_plain", hash=>$hash, hash_base=>$hash_base, file_name=>$file_name) . qq!" />\n!; + } elsif ($file_name =~ /\.md$/) { + my $absolute_file_name = "$projectroot/$project"; + $absolute_file_name =~ s/\.git$//; + $absolute_file_name = $absolute_file_name . $file_name; + print "
"; + insert_markdown_file($absolute_file_name); + print "
"; } else { my $nr; while (my $line = <$fd>) { chomp $line; $nr++; $line = untabify($line); - printf qq!
%4i %s
\n!, + printf qq!
%s
\n!, $nr, esc_attr(href(-replay => 1)), $nr, $nr, $highlight ? sanitize($line) : esc_html($line, -nbsp=>1); } @@ -7196,7 +7274,7 @@ sub git_tree { } git_print_page_nav('tree','', $hash_base, undef, undef, join(' | ', @views_nav)); - git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base); + #git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base); } else { undef $hash_base; print "
\n"; @@ -7255,6 +7333,30 @@ sub git_tree { } print "\n" . "
"; + + # If present, print one of the following, in order: + # README.md, README.txt, README, README.html. + my $cwd_path = "$projectroot/$project"; + $cwd_path =~ s/\.git$//; + $cwd_path = $cwd_path . $basedir; + if (!$prevent_xss && -s $cwd_path . "README.md") { + print "
\n"; + insert_markdown_file($cwd_path . "README.md"); + print "\n
\n"; # class="readme" + } elsif (!$prevent_xss && -s $cwd_path . "README.txt") { + print "
\n"; + insert_text_file($cwd_path . "README.txt"); + print "\n
\n"; # class="readme" + } elsif (!$prevent_xss && -s $cwd_path . "README") { + print "
\n"; + insert_text_file($cwd_path . "README"); + print "\n
\n"; # class="readme" + } elsif (!$prevent_xss && -s $cwd_path . "README.html") { + print "
\n"; + insert_html_file($cwd_path . "README.html"); + print "\n
\n"; # class="readme" + } + git_footer_html(); } @@ -7636,7 +7738,7 @@ sub git_object { sub git_blobdiff { my $format = shift || 'html'; - my $diff_style = $input_params{'diff_style'} || 'inline'; + my $diff_style = $input_params{'diff_style'} || 'sidebyside'; my $fd; my @difftree; @@ -7797,7 +7899,7 @@ sub diff_style_nav { sub git_commitdiff { my %params = @_; my $format = $params{-format} || 'html'; - my $diff_style = $input_params{'diff_style'} || 'inline'; + my $diff_style = $input_params{'diff_style'} || 'sidebyside'; my ($patch_max) = gitweb_get_feature('patches'); if ($format eq 'patch') {