Kay Sievers 20 years ago
parent
commit
823d5dc81f
  1. 63
      gitweb.pl

63
gitweb.pl

@ -2,11 +2,12 @@ @@ -2,11 +2,12 @@

# gitweb.pl - simple web interface to track changes in git repositories
#
# Version 004
# Version 005
#
# This file is licensed under the GPL v2, or a later version
# (C) 2005, Kay Sievers <kay.sievers@vrfy.org>
# (C) 2005, Christian Gierke <ch@gierke.de>
#
# This file is licensed under the GPL v2, or a later version

use strict;
use warnings;
@ -22,15 +23,15 @@ my $myself = $cgi->url(-relative => 1); @@ -22,15 +23,15 @@ my $myself = $cgi->url(-relative => 1);
my $project = $cgi->param("project") || "";
my $action = $cgi->param("action") || "";
my $hash = $cgi->param("hash") || "";
my $parent = $cgi->param("parent") || "";
my $hash_parent = $cgi->param("hash_parent") || "";
my $view_back = $cgi->param("view_back") || 60*60*24;
my $projectroot = "$gitroot/$project";
$ENV{'SHA1_FILE_DIRECTORY'} = "$projectroot/.git/objects";

$hash =~ s/[^0-9a-fA-F]//g;
$parent =~ s/[^0-9a-fA-F]//g;
$hash_parent =~ s/[^0-9a-fA-F]//g;
$project =~ s/[^0-9a-zA-Z\-\._]//g;

$ENV{'SHA1_FILE_DIRECTORY'} = "$projectroot/.git/objects";

sub git_header {
print $cgi->header(-type => 'text/html; charset: utf-8');
print <<EOF;
@ -307,12 +308,12 @@ if ($action eq "blob") { @@ -307,12 +308,12 @@ if ($action eq "blob") {
}
print "<tr>\n";
print "<td class=\"head1\">" . $age_string . "</td>\n";
print "<td class=\"head1\">" . $cgi->a({-href => "$myself?project=$project;action=commit;hash=$commit;parent=$parent"}, $shortlog) . "</td>";
print "<td class=\"head1\">" . $cgi->a({-href => "$myself?project=$project;action=commit;hash=$commit"}, $shortlog) . "</td>";
print "</tr>\n";
print "<tr>\n";
print "<td class=\"head3\">";
print $cgi->a({-href => "$myself?project=$project;action=treediff;hash=$commit;parent=$parent"}, "view diff") . "<br/>\n";
print $cgi->a({-href => "$myself?project=$project;action=commit;hash=$commit;parent=$parent"}, "view commit") . "<br/>\n";
print $cgi->a({-href => "$myself?project=$project;action=treediff;hash=$commit"}, "view diff") . "<br/>\n";
print $cgi->a({-href => "$myself?project=$project;action=commit;hash=$commit"}, "view commit") . "<br/>\n";
print $cgi->a({-href => "$myself?project=$project;action=tree;hash=$tree"}, "view tree") . "<br/>\n";
print "</td>\n";
print "<td class=\"head2\">\n";
@ -335,13 +336,27 @@ if ($action eq "blob") { @@ -335,13 +336,27 @@ if ($action eq "blob") {
print "</table>\n";
git_footer();
} elsif ($action eq "commit") {
open my $fd, "-|", "$gitbin/diff-tree", "-r", $parent, $hash;
my $parent = "";
open my $fd, "-|", "$gitbin/cat-file", "commit", $hash;
while (my $line = <$fd>) {
chomp($line);
last if $line eq "";
if ($line =~ m/^parent (.*)$/ && $parent eq "") {
$parent = $1;
}
}
my $shortlog = <$fd>;
$shortlog = escapeHTML($shortlog);
close $fd;

open $fd, "-|", "$gitbin/diff-tree", "-r", $parent, $hash;
my (@difftree) = map { chomp; $_ } <$fd>;
close $fd;

git_header();
print "<div class=\"head2\">\n";
print "view " . $cgi->a({-href => "$myself?project=$project;action=treediff;hash=$hash;parent=$parent"}, "diff") . "<br/><br/>\n";
print "<div class=\"main\">\n";
print "view " . $cgi->a({-href => "$myself?project=$project;action=treediff;hash=$hash"}, "diff") . "<br/><br/><br/>\n";
print "$shortlog<br/>\n";
print "<pre>\n";
foreach my $line (@difftree) {
# '*100644->100644 blob 9f91a116d91926df3ba936a80f020a6ab1084d2b->bb90a0c3a91eb52020d0db0e8b4f94d30e02d596 net/ipv4/route.c'
@ -361,7 +376,7 @@ if ($action eq "blob") { @@ -361,7 +376,7 @@ if ($action eq "blob") {
$id =~ m/([0-9a-fA-F]+)->([0-9a-fA-F]+)/;
my $old = $1;
my $new = $2;
print "CHANGED\t" . $cgi->a({-href => "$myself?project=$project;action=diff;hash=$old;parent=$new"}, $file) . "\n";
print "CHANGED\t" . $cgi->a({-href => "$myself?project=$project;action=diff;hash=$old;hash_parent=$new"}, $file) . "\n";
}
}
}
@ -372,18 +387,32 @@ if ($action eq "blob") { @@ -372,18 +387,32 @@ if ($action eq "blob") {
git_header();
print "<br/><br/><div class=\"main\">\n";
print "<pre>\n";
git_diff($hash, $parent, $hash, $parent);
git_diff($hash, $hash_parent, $hash, $hash_parent);
print "</pre>\n";
print "<br/></div>";
git_footer();
} elsif ($action eq "treediff") {
open my $fd, "-|", "$gitbin/diff-tree", "-r", $parent, $hash;
my $parent = "";
open my $fd, "-|", "$gitbin/cat-file", "commit", $hash;
while (my $line = <$fd>) {
chomp($line);
last if $line eq "";
if ($line =~ m/^parent (.*)$/ && $parent eq "") {
$parent = $1;
}
}
my $shortlog = <$fd>;
$shortlog = escapeHTML($shortlog);
close $fd;

open $fd, "-|", "$gitbin/diff-tree", "-r", $parent, $hash;
my (@difftree) = map { chomp; $_ } <$fd>;
close $fd;

git_header();
print "<div class=\"head2\">\n";
print "view " . $cgi->a({-href => "$myself?project=$project;action=commit;hash=$hash;parent=$parent"}, "commit") . "<br/><br/>\n";
print "<div class=\"main\">\n";
print "view " . $cgi->a({-href => "$myself?project=$project;action=commit;hash=$hash"}, "commit") . "<br/><br/><br/>\n";
print "$shortlog<br/>\n";
print "<pre>\n";
foreach my $line (@difftree) {
# '*100644->100644 blob 8e5f9bbdf4de94a1bc4b4da8cb06677ce0a57716->8da3a306d0c0c070d87048d14a033df02f40a154 Makefile'

Loading…
Cancel
Save