diff options
author | Kay Sievers <kay.sievers@suse.de> | 2005-08-07 20:16:07 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@suse.de> | 2005-08-07 20:16:07 +0200 |
commit | d51e902a09f96029b01141b41e297ec7774f55c0 (patch) | |
tree | 862ab902c8e74c63fcb251e5a94f316772c7a211 /gitweb.cgi | |
parent | 061cc7cdcfda9527f5afb986e0396e393ed0c9f5 (diff) | |
download | git-d51e902a09f96029b01141b41e297ec7774f55c0.tar.gz git-d51e902a09f96029b01141b41e297ec7774f55c0.tar.xz |
v057
Diffstat (limited to 'gitweb.cgi')
-rwxr-xr-x | gitweb.cgi | 54 |
1 files changed, 45 insertions, 9 deletions
diff --git a/gitweb.cgi b/gitweb.cgi index c702c9a2e..89c3df736 100755 --- a/gitweb.cgi +++ b/gitweb.cgi @@ -14,7 +14,7 @@ use CGI::Carp qw(fatalsToBrowser); my $cgi = new CGI; -my $version = "056"; +my $version = "057"; my $projectroot = "/home/kay/public_html/pub/scm"; my $defaultprojects = "linux/kernel/git"; my $gitbin = "/home/kay/bin/git"; @@ -26,6 +26,7 @@ my $project = $cgi->param('p'); my $action = $cgi->param('a'); my $hash = $cgi->param('h'); my $hash_parent = $cgi->param('hp'); +my $file_name = $cgi->param('f'); my $time_back = $cgi->param('t'); $ENV{'SHA1_FILE_DIRECTORY'} = "$projectroot/$project/objects"; @@ -33,6 +34,9 @@ $ENV{'SHA1_FILE_DIRECTORY'} = "$projectroot/$project/objects"; if (defined($project) && $project =~ /(^|\/)(|\.|\.\.)($|\/)/) { die_error("", "Invalid project parameter."); } +if (defined($file_name) && $file_name =~ /(^|\/)(|\.|\.\.)($|\/)/) { + die_error("", "Invalid file parameter."); +} if (defined($action) && !$action =~ m/^[0-9a-zA-Z\.\-]+$/) { die_error("", "Invalid action parameter."); } @@ -44,8 +48,6 @@ if (defined($hash_parent) && !($hash_parent =~ m/^[0-9a-fA-F]{40}$/)) { } if (defined($time_back) && !($time_back =~ m/^[0-9]+$/)) { die_error("", "Invalid time parameter."); -} else { - $time_back = 1; } sub git_header_html { @@ -339,10 +341,14 @@ if ($project eq "") { exit; } -if ($action eq "") { +if (!defined($action)) { $action = "log"; } +if (!defined($time_back)) { + $time_back = 1; +} + if ($action eq "blob") { git_header_html(); print "<div class=\"page_body\"><pre><br/><br/>\n"; @@ -384,7 +390,7 @@ if ($action eq "blob") { git_footer_html(); } elsif ($action eq "log" || $action eq "rss") { open my $fd, "-|", "$gitbin/rev-list " . git_head($project); - my (@revtree) = map { chomp; $_ } <$fd>; + my (@revlist) = map { chomp; $_ } <$fd>; close $fd; if ($action eq "log") { @@ -409,8 +415,8 @@ if ($action eq "blob") { "<language>en</language>\n"; } - for (my $i = 0; $i <= $#revtree; $i++) { - my $commit = $revtree[$i]; + for (my $i = 0; $i <= $#revlist; $i++) { + my $commit = $revlist[$i]; my %co = git_commit($commit); my %ad = date_str($co{'author_epoch'}); my $age = time - $co{'committer_epoch'}; @@ -466,7 +472,7 @@ if ($action eq "blob") { last if ($i >= 20); print "<item>\n" . "\t<title>" . sprintf("%d %s %02d:%02d", $ad{'mday'}, $ad{'month'}, $ad{'hour'}, $ad{'min'}) . " - " . escapeHTML($co{'title'}) . "</title>\n" . - "\t<link> " . $my_url . "?p=$project;a==commit;h=$commit</link>\n" . + "\t<link> " . $my_url . "?p=$project;a=commit;h=$commit</link>\n" . "\t<description>"; my $comment = $co{'comment'}; foreach my $line (@$comment) { @@ -544,7 +550,8 @@ if ($action eq "blob") { $id =~ m/([0-9a-fA-F]+)->([0-9a-fA-F]+)/; my $from = $1; my $to = $2; - print "$modestr " . $cgi->a({-href => "$my_uri?p=$project;a=blobdiff;h=$to;hp=$from"}, $file) . "\n"; + print "$modestr " . $cgi->a({-href => "$my_uri?p=$project;a=blobdiff;h=$to;hp=$from"}, $file) . " (" . + $cgi->a({-href => "$my_uri?p=$project;a=filerevision;h=$hash;f=$file"}, "history") . ")\n"; } } } @@ -595,6 +602,35 @@ if ($action eq "blob") { print "<br/></pre>\n"; print "</div>"; git_footer_html(); +} elsif ($action eq "filerevision") { + open my $fd, "-|", "$gitbin/rev-list $hash"; + my (@revlist) = map { chomp; $_ } <$fd>; + close $fd; + + git_header_html(); + print "<div class=\"page_body\">\n" . + "<pre>\n"; + foreach my $rev (@revlist) { + my %co = git_commit($rev); + my $parents = $co{'parents'}; + foreach my $parent (@$parents) { + open $fd, "-|", "$gitbin/diff-tree -r $parent $rev $file_name"; + my (@difftree) = map { chomp; $_ } <$fd>; + close $fd; + + foreach my $line (@difftree) { + $line =~ m/^(.)(.*)\t(.*)\t(.*)\t(.*)$/; + my $file = $5; + if ($file eq $file_name) { + print $cgi->a({-href => "$my_uri?p=$project;a=commit;h=$rev"}, $rev) . " (" . $co{'title'} .")\n"; + last; + } + } + } + } + print "<br/></pre>\n"; + print "</div>"; + git_footer_html(); } else { die_error("", "unknown action"); } |