git/list[1] front-page[2] threads[3] people[4] search[5] about
 

gitweb / cg-export

From
TWToby White <tow21@cam.ac.uk>
Date
Aug 16, 2006, 00:16 UTC
Message-ID
<44E263DD.6030305@cam.ac.uk>

I was wondering if a feature like the following would be of use to anyone except me: I'd like to be able to download the full source of a given tree from gitweb.

Use cases:

a) I'm browsing history through gitweb, find the tree I'm interested in & want to download the whole tree without cutting and pasting hashes.

b) I want to be able to quickly let people grab my latest revision who don't have git installed, without faffing about creating tarballs & emailing them; I'd like to be able to paste a URL straight into my IM client.

I've quickly hacked gitweb to do this for me - patch below.

It adds an extra link to the 'commit' page. Next to the link that would lead you to 'tree', there is 'tar.gz' which simply returns the tar.gz of the same tree.

The patch is against the version of gitweb currently in Debian, which is, erm, '264-1', apparently, because that's what I had to hand.

Anyway. I'm no git expert so perhaps this is a really bad idea, but I find it useful.

Toby White

--- gitweb.cgi.orig 2006-08-16 01:00:03.000000000 +0100 +++ gitweb.cgi 2006-08-16 00:58:38.000000000 +0100

@@ -180,6 +180,9 @@
 } elsif ($action eq "tree") {
        git_tree();
+       exit;
 } elsif ($action eq "rss") {
        git_rss();
        exit;
@@ -1523,6 +1526,21 @@
        git_footer_html();
 }

+sub git_export {
+       if (!defined $hash) {
+               $hash = git_read_head($project);
+               if (defined $file_name) {
+                       my $base = $hash_base || $hash;
+                       $hash = git_get_hash_by_path($base, $file_name, "tree");
+               }
+               if (!defined $hash_base) {
+                       $hash_base = $hash;
+               }
+       }
+       print $cgi->header(-type=>'application/x-tar',  -Content-Encoding=>'x-gzip', -status=> '200 OK');
+       exec "$gitbin/git-tar-tree $hash $project | gzip -c9" or die_error(undef, "Execute git-tar-tree failed.");
+}
+
 sub git_rss {
        # http://www.notestips.com/80256B3A007F2692/1/NAMO5P9UPQ
        open my $fd, "-|", "$gitbin/git-rev-list --max-count=150 " . git_read_head($project) or die_error(undef, "Open failed.");
@@ -1779,6 +1797,7 @@
              $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tree;h=$co{'tree'};hb=$hash"), class => "list"}, $co{'tree'})
.
              "</td>" .
              "<td class=\"link\">" . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tree;h=$co{'tree'};hb=$hash")}, "tree"
) .
+              "|" . $cgi->a({-href => "$my_uri/$project.tar.gz?" . esc_param("p=$project;a=export;h=$co{'tree'};hb=$hash")}, "tar.
gz") .
              "</td>" .
              "</tr>\n";
        my $parents  = $co{'parents'};
Next: Toby White
Message 1 of 13 in “gitweb / cg-export”
  1. Toby WhiteAug 16, 2006
  2. Toby WhiteAug 16, 2006
  3. Jakub NarebskiAug 16, 2006
  4. Aneesh Kumar K.VAug 16, 2006
  5. Aneesh Kumar K.VAug 16, 2006
  6. Fredrik KuivinenAug 16, 2006
  7. Junio C HamanoAug 16, 2006
  8. gitweb: Support for snapshots in gitwebAneesh Kumar K.V, Aug 17, 2006
  9. Junio C HamanoAug 17, 2006
  10. Aneesh KumarAug 17, 2006
  11. Jakub NarebskiAug 17, 2006
  12. Martin WaitzAug 16, 2006
  13. Kay SieversAug 16, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.