{"thread":{"id":"121","subject":"GIT Web Interface","startedAt":"2005-04-19T00:44:15Z","lastAt":"2005-04-19T17:41:19Z","messageCount":7,"participants":["Kay Sievers","Petr Baudis","Greg KH","Stéphane Fillod"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"742","messageId":"20050419004415.GA10628@vrfy.org","threadId":"121","inReplyTo":null,"subject":"GIT Web Interface","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-04-19T00:44:15Z","receivedAt":"2005-04-19T00:44:15Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"I'm hacking on a simple web interface, cause I missed the bkweb too much.\nIt can't do much more than browse through the source tree and show the\nlog now, but that should change... :)\n  http://ehlo.org/~kay/gitweb.pl?project=linux-2.6\n\nHow can I get the files touched with a changeset and the corresponding\ndiffs belonging to it?\n\nThanks,\nKay\n\n\n-- \n#!/usr/bin/perl\n\n# This file is licensed under the GPL v2, or a later version\n# (C) 2005, Kay Sievers <kay.sievers@vrfy.org>\n\n\nuse strict;\nuse warnings;\nuse CGI;\nuse CGI::Carp qw(fatalsToBrowser);\n\nmy $query = new CGI;\nmy $gitbin = \"/home/kay/bin\";\nmy $gitroot = \"/home/kay/public_html\";\n\nmy $project = $query->param(\"project\") || \"\";\nmy $action = $query->param(\"action\") || \"\";\nmy $hash = $query->param(\"hash\") || \"\";\nmy $projectroot = \"$gitroot/$project\";\n$ENV{'SHA1_FILE_DIRECTORY'} = \"$projectroot/.git/objects\";\n\nsub header {\n\tprint $query->header();\n\tprint $query->start_html(\"gitweb\");\n\tprint $query->h1($project);\n}\n\nsub footer {\n\tprint $query->end_html();\n}\n\nif ($project eq \"\") {\n\topen my $fd, \"-|\", \"ls\", \"-1\", $gitroot;\n\tmy (@path) = map { chomp; $_ } <$fd>;\n\tclose $fd;\n\theader();\n\tprint \"projects:<br/>\\n\";\n\tforeach my $line (@path) {\n\t\tif (-e \"$gitroot/$line/.git/HEAD\") {\n\t\t\tprint $query->a({-href => \"gitweb.pl?project=$line\"}, $line) . \"<br/>\\n\";\n\t\t}\n\t}\n\tfooter();\n\texit;\n}\n\nif ($action eq \"\") {\n\tprint $query->redirect(\"gitweb.pl?project=$project&action=show_log\");\n\texit;\n}\n\nif ($action eq \"show_file\") {\n\theader();\n\tprint \"<pre>\\n\";\n\topen my $fd, \"-|\", \"$gitbin/cat-file\", \"blob\", $hash;\n\tmy $nr;\n\twhile (my $line = <$fd>) {\n\t\t$nr++;\n\t\tprint \"$nr\\t$line\";\n\t}\n\tclose $fd;\n\tprint \"</pre>\\n\";\n\tfooter();\n} elsif ($action eq \"show_tree\") {\n\tif ($hash eq \"\") {\n\t\topen my $fd, \"$projectroot/.git/HEAD\";\n\t\tmy $head = <$fd>;\n\t\tchomp $head;\n\t\tclose $fd;\n\n\t\topen $fd, \"-|\", \"$gitbin/cat-file\", \"commit\", $head;\n\t\tmy $tree = <$fd>;\n\t\tchomp $tree;\n\t\t$tree =~ s/tree //;\n\t\tclose $fd;\n\t\t$hash = $tree;\n\t}\n\topen my $fd, \"-|\", \"$gitbin/ls-tree\", $hash;\n\tmy (@entries) = map { chomp; $_ } <$fd>;\n\tclose $fd;\n\theader();\n\tforeach my $line (@entries) {\n\t\t$line =~ m/^([0-9]+)\\t(.*)\\t(.*)\\t(.*)$/;\n\t\tmy $t_type = $2;\n\t\tmy $t_hash = $3;\n\t\tmy $t_name = $4;\n\t\tif ($t_type eq \"blob\") {\n\t\t\tprint \"B\\t\" . $query->a({-href => \"gitweb.pl?project=$project&action=show_file&hash=$3\"}, $4) . \"<br/>\\n\";\n\t\t} elsif ($t_type eq \"tree\") {\n\t\t\tprint \"T\\t\" . $query->a({-href => \"gitweb.pl?project=$project&action=show_tree&hash=$3\"}, $4) . \"<br/>\\n\";\n\t\t}\n\t}\n\tfooter();\n} elsif ($action eq \"show_log\") {\n\topen my $fd, \"$projectroot/.git/HEAD\";\n\tmy $head = <$fd>;\n\tchomp $head;\n\tclose $fd;\n\n\topen my $fd, \"-|\", \"$gitbin/rev-tree\", $head;\n\tmy (@revtree) = map { chomp; $_ } <$fd>;\n\tclose $fd;\n\n\theader();\n\tforeach my $rev (reverse sort @revtree) {\n\t\t$rev =~ m/^([0-9]+) ([0-9a-fA-F]+)/;\n\t\tmy $time = $1;\n\t\tmy $commit = $2;\n\n\t\topen my $fd, \"-|\", \"$gitbin/cat-file\", \"commit\", $commit;\n\t\tprint \"commit $commit<br/>\\n\";\n\t\twhile (my $line = <$fd>) {\n\t\t\tif ($line =~ m/^tree (.*)$/) {\n\t\t\t\tprint $query->a({-href => \"gitweb.pl?project=$project&action=show_tree&hash=$1\"}, $line) . \"<br/>\\n\";\n\t\t\t} elsif ($line =~ m/^(author|committer) (.*)/) {\n\t\t\t\t$line =~ m/^(.*) (.*>) ([0-9]+) (.*)$/;\n\t\t\t\tmy $type = $1;\n\t\t\t\tmy $name = $2;\n\t\t\t\tmy $time = $3;\n\t\t\t\tmy $timezone = $4;\n\t\t\t\t$name =~ s/</&lt;/;\n\t\t\t\t$name =~ s/>/&gt;/;\n\t\t\t\t$time = gmtime($time);\n\t\t\t\tprint \"$type $name $time $timezone<br/>\\n\";\n\t\t\t} else {\n\t\t\t\t$line =~ s/</&lt;/;\n\t\t\t\t$line =~ s/>/&gt;/;\n\t\t\t\tprint \"$line<br/>\\n\";\n\t\t\t}\n\t\t}\n\t\tclose $fd;\n\t\tprint \"====================================<br/><br/>\\n\";\n\t}\n\tfooter();\n} else {\n\theader();\n\tprint \"unknown action\\n\";\n\tfooter();\n}\n\n"},{"id":"745","messageId":"20050419005244.GR5554@pasky.ji.cz","threadId":"121","inReplyTo":"20050419004415.GA10628@vrfy.org","subject":"Re: GIT Web Interface","fromName":"Petr Baudis","fromEmail":"pasky@ucw.cz","sentAt":"2005-04-19T00:52:45Z","receivedAt":"2005-04-19T00:52:45Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Tue, Apr 19, 2005 at 02:44:15AM CEST, I got a letter\nwhere Kay Sievers <kay.sievers@vrfy.org> told me that...\n> I'm hacking on a simple web interface, cause I missed the bkweb too much.\n> It can't do much more than browse through the source tree and show the\n> log now, but that should change... :)\n>   http://ehlo.org/~kay/gitweb.pl?project=linux-2.6\n\nHmm, looks nice for a start. (But you have obsolete git-pasky tree there! ;-)\n\n> How can I get the files touched with a changeset and the corresponding\n> diffs belonging to it?\n\ndiff-tree to get the list of files, you can do the corresponding diffs\ne.g. by doing git diff -r tree1:tree2. Preferably make a patch for it\nfirst to make it possible to diff individual files this way.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nC++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor\n"},{"id":"829","messageId":"1113926385.29953.7.camel@localhost.localdomain","threadId":"121","inReplyTo":"20050419005244.GR5554@pasky.ji.cz","subject":"Re: GIT Web Interface","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-04-19T15:59:45Z","receivedAt":"2005-04-19T15:59:45Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Tue, 2005-04-19 at 02:52 +0200, Petr Baudis wrote:\n> Dear diary, on Tue, Apr 19, 2005 at 02:44:15AM CEST, I got a letter\n> where Kay Sievers <kay.sievers@vrfy.org> told me that...\n> > I'm hacking on a simple web interface, cause I missed the bkweb too much.\n> > It can't do much more than browse through the source tree and show the\n> > log now, but that should change... :)\n> >   http://ehlo.org/~kay/gitweb.pl?project=linux-2.6\n> \n> Hmm, looks nice for a start. (But you have obsolete git-pasky tree there! ;-)\n\nYeah, it's fresh now. :)\n\n> > How can I get the files touched with a changeset and the corresponding\n> > diffs belonging to it?\n> \n> diff-tree to get the list of files, you can do the corresponding diffs\n> e.g. by doing git diff -r tree1:tree2. Preferably make a patch for it\n> first to make it possible to diff individual files this way.\n\nAh, nice! Got it working.\n\nThanks,\nKay\n\n"},{"id":"834","messageId":"20050419165247.GB32259@kroah.com","threadId":"121","inReplyTo":"1113926385.29953.7.camel@localhost.localdomain","subject":"Re: GIT Web Interface","fromName":"Greg KH","fromEmail":"greg@kroah.com","sentAt":"2005-04-19T16:52:48Z","receivedAt":"2005-04-19T16:52:48Z","isPatch":false,"sender":{"key":"greg@kroah.com","avatar":"https://gravatar.com/avatar/5bb5aa0cc2e01c00ec899d11130c07796bc186e465bae57bc34873b13b72c7c8?d=mp&s=160"},"body":"On Tue, Apr 19, 2005 at 05:59:45PM +0200, Kay Sievers wrote:\n> On Tue, 2005-04-19 at 02:52 +0200, Petr Baudis wrote:\n> > Dear diary, on Tue, Apr 19, 2005 at 02:44:15AM CEST, I got a letter\n> > where Kay Sievers <kay.sievers@vrfy.org> told me that...\n> > > I'm hacking on a simple web interface, cause I missed the bkweb too much.\n> > > It can't do much more than browse through the source tree and show the\n> > > log now, but that should change... :)\n> > >   http://ehlo.org/~kay/gitweb.pl?project=linux-2.6\n> > \n> > Hmm, looks nice for a start. (But you have obsolete git-pasky tree there! ;-)\n> \n> Yeah, it's fresh now. :)\n> \n> > > How can I get the files touched with a changeset and the corresponding\n> > > diffs belonging to it?\n> > \n> > diff-tree to get the list of files, you can do the corresponding diffs\n> > e.g. by doing git diff -r tree1:tree2. Preferably make a patch for it\n> > first to make it possible to diff individual files this way.\n> \n> Ah, nice! Got it working.\n\nLooks good, care to post the updated version?\n\nthanks,\n\ngreg k-h\n"},{"id":"843","messageId":"loom.20050419T185910-762@post.gmane.org","threadId":"121","inReplyTo":"20050419165247.GB32259@kroah.com","subject":"Re: GIT Web Interface","fromName":"Stéphane Fillod","fromEmail":"fillods@gmail.com","sentAt":"2005-04-19T17:19:05Z","receivedAt":"2005-04-19T17:19:05Z","isPatch":false,"sender":{"key":"fillods@gmail.com","avatar":null},"body":"Greg KH <greg <at> kroah.com> writes:\n[...]\n> Looks good, care to post the updated version?\n\n  http://ehlo.org/~kay/\n\nWhat about a git repo of gitweb?\n\ngitweb2.pl is nice with the browse function. BTW, but there's a '1' artefact\nright after the browse link in action=show_tree :-)\n\nKay, your script is really nice, good job!\n\nHere are some random ideas:\n* make *any* hash clickable instead of the (show xx) links.\n  Applicable in show_log, show_diff\n* in show_diff, keep a back link to cset\n* provide a download link in show_file (as well as show_cset/show_diff ?)\n* obfuscate against spam the mail adresses in show_log?\n* use of colors in show_log (commiter, author, ..)\n* perhaps borrow some ideas from other SCM web interfaces besides BK\n* kindly ask kernel.org to host your script one day?\n\n\nAll the best,\n-- \nStephane\n\n"},{"id":"840","messageId":"20050419173242.GA32478@vrfy.org","threadId":"121","inReplyTo":"20050419165247.GB32259@kroah.com","subject":"Re: GIT Web Interface","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-04-19T17:32:42Z","receivedAt":"2005-04-19T17:32:42Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Tue, Apr 19, 2005 at 09:52:48AM -0700, Greg KH wrote:\n> On Tue, Apr 19, 2005 at 05:59:45PM +0200, Kay Sievers wrote:\n> > On Tue, 2005-04-19 at 02:52 +0200, Petr Baudis wrote:\n> > > Dear diary, on Tue, Apr 19, 2005 at 02:44:15AM CEST, I got a letter\n> > > where Kay Sievers <kay.sievers@vrfy.org> told me that...\n> > > > I'm hacking on a simple web interface, cause I missed the bkweb too much.\n> > > > It can't do much more than browse through the source tree and show the\n> > > > log now, but that should change... :)\n> > > >   http://ehlo.org/~kay/gitweb.pl?project=linux-2.6\n> > > \n> > > Hmm, looks nice for a start. (But you have obsolete git-pasky tree there! ;-)\n> > \n> > Yeah, it's fresh now. :)\n> > \n> > > > How can I get the files touched with a changeset and the corresponding\n> > > > diffs belonging to it?\n> > > \n> > > diff-tree to get the list of files, you can do the corresponding diffs\n> > > e.g. by doing git diff -r tree1:tree2. Preferably make a patch for it\n> > > first to make it possible to diff individual files this way.\n> > \n> > Ah, nice! Got it working.\n> \n> Looks good, care to post the updated version?\n\nSure, but expect it to change dramatically tonight. :)\n\nThanks,\nKay\n\n-- \n#!/usr/bin/perl\n\n# This file is licensed under the GPL v2, or a later version\n# (C) 2005, Kay Sievers <kay.sievers@vrfy.org>\n\n\nuse strict;\nuse warnings;\nuse CGI;\nuse CGI::Carp qw(fatalsToBrowser);\n\nmy $query = new CGI;\nmy $myself = \"gitweb.pl\";\nmy $gitbin = \"/home/kay/bin\";\nmy $gitroot = \"/home/kay/public_html\";\nmy $gittmp = \"/tmp\";\n\nmy $project = $query->param(\"project\") || \"\";\nmy $action = $query->param(\"action\") || \"\";\nmy $hash = $query->param(\"hash\") || \"\";\nmy $parent = $query->param(\"parent\") || \"\";\nmy $projectroot = \"$gitroot/$project\";\n$ENV{'SHA1_FILE_DIRECTORY'} = \"$projectroot/.git/objects\";\n\n$hash =~ s/[^0-9a-fA-F]//g;\n$parent =~ s/[^0-9a-fA-F]//g;\n\nsub header {\n\tprint $query->header();\n\tprint $query->start_html(\"gitweb\");\n\tif ($project ne \"\") {\n\t\tprint $query->h1($project);\n\t\tprint $query->a({-href => \"$myself?project=$project&action=show_tree\"}, \"Browse Project\") . \"<br/>\\n\";\n\t\tprint $query->a({-href => \"$myself?project=$project&action=show_log\"}, \"Show Log\") . \"<br/>\\n\";\n\t\tprint \"<br/><br/>\\n\";\n\t}\n}\n\nsub footer {\n\tprint $query->end_html();\n}\n\nif ($project eq \"\") {\n\topen my $fd, \"-|\", \"ls\", \"-1\", $gitroot;\n\tmy (@path) = map { chomp; $_ } <$fd>;\n\tclose $fd;\n\theader();\n\tprint \"Projects:<br/><br/>\\n\";\n\tforeach my $line (@path) {\n\t\tif (-e \"$gitroot/$line/.git/HEAD\") {\n\t\t\tprint $query->a({-href => \"$myself?project=$line\"}, $line) . \"<br/>\\n\";\n\t\t}\n\t}\n\tfooter();\n\texit;\n}\n\nif ($action eq \"\") {\n\tprint $query->redirect(\"$myself?project=$project&action=show_log\");\n\texit;\n}\n\nif ($action eq \"show_file\") {\n\theader();\n\tprint \"<pre>\\n\";\n\topen my $fd, \"-|\", \"$gitbin/cat-file\", \"blob\", $hash;\n\tmy $nr;\n\twhile (my $line = <$fd>) {\n\t\t$nr++;\n\t\tprint \"$nr\\t$line\";\n\t}\n\tclose $fd;\n\tprint \"</pre>\\n\";\n\tfooter();\n} elsif ($action eq \"show_tree\") {\n\tif ($hash eq \"\") {\n\t\topen my $fd, \"$projectroot/.git/HEAD\";\n\t\tmy $head = <$fd>;\n\t\tchomp $head;\n\t\tclose $fd;\n\n\t\topen $fd, \"-|\", \"$gitbin/cat-file\", \"commit\", $head;\n\t\tmy $tree = <$fd>;\n\t\tchomp $tree;\n\t\t$tree =~ s/tree //;\n\t\tclose $fd;\n\t\t$hash = $tree;\n\t}\n\topen my $fd, \"-|\", \"$gitbin/ls-tree\", $hash;\n\tmy (@entries) = map { chomp; $_ } <$fd>;\n\tclose $fd;\n\theader();\n\tprint \"<pre>\\n\";\n\tforeach my $line (@entries) {\n\t\t$line =~ m/^([0-9]+)\\t(.*)\\t(.*)\\t(.*)$/;\n\t\tmy $t_type = $2;\n\t\tmy $t_hash = $3;\n\t\tmy $t_name = $4;\n\t\tif ($t_type eq \"blob\") {\n\t\t\tprint \"FILE\\t\" . $query->a({-href => \"$myself?project=$project&action=show_file&hash=$3\"}, $4) . \"\\n\";\n\t\t} elsif ($t_type eq \"tree\") {\n\t\t\tprint \"DIR\\t\" . $query->a({-href => \"$myself?project=$project&action=show_tree&hash=$3\"}, $4) . \"\\n\";\n\t\t}\n\t}\n\tprint \"</pre>\\n\";\n\tfooter();\n} elsif ($action eq \"show_log\") {\n\topen my $fd, \"$projectroot/.git/HEAD\";\n\tmy $head = <$fd>;\n\tchomp $head;\n\tclose $fd;\n\n\topen my $fd, \"-|\", \"$gitbin/rev-tree\", $head;\n\tmy (@revtree) = map { chomp; $_ } <$fd>;\n\tclose $fd;\n\n\theader();\n\tforeach my $rev (reverse sort @revtree) {\n\t\t$rev =~ m/^([0-9]+) ([0-9a-fA-F]+).* ([0-9a-fA-F]+)/;\n\t\tmy $time = $1;\n\t\tmy $commit = $2;\n\t\tmy $parent = $3;\n\n\t\topen my $fd, \"-|\", \"$gitbin/cat-file\", \"commit\", $commit;\n\t\tprint \"commit $commit \" . $query->a({-href => \"$myself?project=$project&action=show_cset&hash=$commit&parent=$parent\"}, \"(show cset)\") . \"<br/>\\n\";\n\t\twhile (my $line = <$fd>) {\n\t\t\tif ($line =~ m/^tree (.*)$/) {\n\t\t\t\tprint \"$line \" . $query->a({-href => \"$myself?project=$project&action=show_tree&hash=$1\"}, \"(show tree)\") . \"<br/>\\n\";\n\t\t\t} elsif ($line =~ m/^(author|committer) (.*)/) {\n\t\t\t\t$line =~ m/^(.*) (.*>) ([0-9]+) (.*)$/;\n\t\t\t\tmy $type = $1;\n\t\t\t\tmy $name = $2;\n\t\t\t\tmy $time = $3;\n\t\t\t\tmy $timezone = $4;\n\t\t\t\t$name =~ s/</&lt;/;\n\t\t\t\t$name =~ s/>/&gt;/;\n\t\t\t\t$time = gmtime($time);\n\t\t\t\tprint \"$type $name $time $timezone<br/>\\n\";\n\t\t\t} else {\n\t\t\t\t$line =~ s/</&lt;/;\n\t\t\t\t$line =~ s/>/&gt;/;\n\t\t\t\tprint \"$line<br/>\\n\";\n\t\t\t}\n\t\t}\n\t\tclose $fd;\n\t\tprint \"====================================<br/><br/>\\n\";\n\t}\n\tfooter();\n} elsif ($action eq \"show_cset\") {\n\topen my $fd, \"-|\", \"$gitbin/cat-file\", \"commit\", $hash;\n\tmy $tree = <$fd>;\n\tchomp $tree;\n\t$tree =~ s/tree //;\n\tclose $fd;\n\n\topen my $fd, \"-|\", \"$gitbin/cat-file\", \"commit\", $parent;\n\tmy $parent_tree = <$fd>;\n\tchomp $parent_tree;\n\t$parent_tree =~ s/tree //;\n\tclose $fd;\n\n\topen my $fd, \"-|\", \"$gitbin/diff-tree\", \"-r\", $parent_tree, $tree;\n\tmy (@difftree) = map { chomp; $_ } <$fd>;\n\tclose $fd;\n\n\theader();\n\tprint \"<pre>\\n\";\n\tforeach my $line (@difftree) {\n\t\t$line =~ m/^(.)(.*)\\t(.*)\\t(.*)\\t(.*)$/;\n\t\tmy $op = $1;\n\t\tmy $mode = $2;\n\t\tmy $type = $3;\n\t\tmy $id = $4;\n\t\tmy $file = $5;\n\t\tif ($type eq \"blob\") {\n\t\t\tif ($op eq \"+\") {\n\t\t\t\tprint \"NEW\\t\" . $query->a({-href => \"$myself?project=$project&action=show_file&hash=$id\"}, $file) . \"\\n\";\n\t\t\t} elsif ($op eq \"-\") {\n\t\t\t\tprint \"DEL\\t\" . $query->a({-href => \"$myself?project=$project&action=show_file&hash=$id\"}, $file) . \"\\n\";\n\t\t\t} elsif ($op eq \"*\") {\n\t\t\t\t$id =~ m/([0-9a-fA-F]+)->([0-9a-fA-F]+)/;\n\t\t\t\tmy $old = $1;\n\t\t\t\tmy $new = $2;\n\t\t\t\tprint \"DIFF\\t\" . $query->a({-href => \"$myself?project=$project&action=show_diff&hash=$old&parent=$new\"}, $file) . \"\\n\";\n\t\t\t}\n\t\t}\n\t}\n\tprint \"</pre>\\n\";\n\tfooter();\n} elsif ($action eq \"show_diff\") {\n\topen my $fd2, \"> $gittmp/$hash\";\n\topen my $fd, \"-|\", \"$gitbin/cat-file\", \"blob\", $hash;\n\twhile (my $line = <$fd>) {\n\t\tprint $fd2 $line;\n\t}\n\tclose $fd2;\n\tclose $fd;\n\n\topen my $fd2, \"> $gittmp/$parent\";\n\topen my $fd, \"-|\", \"$gitbin/cat-file\", \"blob\", $parent;\n\twhile (my $line = <$fd>) {\n\t\tprint $fd2 $line;\n\t}\n\tclose $fd2;\n\tclose $fd;\n\n\theader();\n\tprint \"<pre>\\n\";\n\topen my $fd, \"-|\", \"/usr/bin/diff\", \"-L\", \"$hash\", \"-L\", \"$parent\", \"-u\", \"-p\", \"$gittmp/$hash\", \"$gittmp/$parent\";\n\twhile (my $line = <$fd>) {\n\t\t$line =~ s/</&lt;/;\n\t\t$line =~ s/>/&gt;/;\n\t\tprint $line;\n\t}\n\tclose $fd;\n\tunlink(\"$gittmp/$hash\");\n\tunlink(\"$gittmp/$parent\");\n\tprint \"</pre>\\n\";\n\tfooter();\n} else {\n\theader();\n\tprint \"unknown action\\n\";\n\tfooter();\n}\n\n"},{"id":"845","messageId":"20050419174119.GA22145@kroah.com","threadId":"121","inReplyTo":"20050419173242.GA32478@vrfy.org","subject":"Re: GIT Web Interface","fromName":"Greg KH","fromEmail":"greg@kroah.com","sentAt":"2005-04-19T17:41:19Z","receivedAt":"2005-04-19T17:41:19Z","isPatch":false,"sender":{"key":"greg@kroah.com","avatar":"https://gravatar.com/avatar/5bb5aa0cc2e01c00ec899d11130c07796bc186e465bae57bc34873b13b72c7c8?d=mp&s=160"},"body":"On Tue, Apr 19, 2005 at 07:32:42PM +0200, Kay Sievers wrote:\n> On Tue, Apr 19, 2005 at 09:52:48AM -0700, Greg KH wrote:\n> > On Tue, Apr 19, 2005 at 05:59:45PM +0200, Kay Sievers wrote:\n> > > On Tue, 2005-04-19 at 02:52 +0200, Petr Baudis wrote:\n> > > > Dear diary, on Tue, Apr 19, 2005 at 02:44:15AM CEST, I got a letter\n> > > > where Kay Sievers <kay.sievers@vrfy.org> told me that...\n> > > > > I'm hacking on a simple web interface, cause I missed the bkweb too much.\n> > > > > It can't do much more than browse through the source tree and show the\n> > > > > log now, but that should change... :)\n> > > > >   http://ehlo.org/~kay/gitweb.pl?project=linux-2.6\n> > > > \n> > > > Hmm, looks nice for a start. (But you have obsolete git-pasky tree there! ;-)\n> > > \n> > > Yeah, it's fresh now. :)\n> > > \n> > > > > How can I get the files touched with a changeset and the corresponding\n> > > > > diffs belonging to it?\n> > > > \n> > > > diff-tree to get the list of files, you can do the corresponding diffs\n> > > > e.g. by doing git diff -r tree1:tree2. Preferably make a patch for it\n> > > > first to make it possible to diff individual files this way.\n> > > \n> > > Ah, nice! Got it working.\n> > \n> > Looks good, care to post the updated version?\n> \n> Sure, but expect it to change dramatically tonight. :)\n\nOk, how about putting a link to it somewhere then, so you don't have to\nbe bothered with people like me asking for the latest copy? :)\n\nthanks,\n\ngreg k-h\n"}]}