On 10/15/2013 05:58 PM, Andrew Shadura wrote: > Same link works for tags: > https://gitorious.org/osm-c-tools/osmctools/0.1.tar.gz
That's nice to know, but it only works when you add 'archive/' before the 0.1.tar.gz. > So the only real problem is to find the right tag. Those are listed in the refs JSON. I've wipped up a Q&D Gitorious watch service, you can see it working for osm-c-tools at: http://linuxminded.nl/tmp/gitorious-watch/?project=osm-c-tools&repo=osmctools The code in question comes down to the gitorious-watch.pl as attached, that's a CLI tool and just a proof-of-concept. The online code just formats the output as HTML. I could make this into a CGI to run on Alioth where previous watch file redirect services were also hosted IIRC. Regards, Bas -- GnuPG: 0xE88D4AF1 (new) / 0x77A975AD (old)
#!/usr/bin/perl -w use strict; use File::Basename; use Getopt::Long qw(:config bundling no_ignore_case); use HTTP::Request::Common; use LWP::UserAgent; use URI::Escape; use JSON; my %cfg = ( project => '', repo => '', verbose => 0, help => 0, ); my $result = GetOptions( 'p|project=s' => \$cfg{project}, 'r|repo=s' => \$cfg{repo}, 'v|verbose' => \$cfg{verbose}, 'h|help' => \$cfg{help}, ); if(!$result || $cfg{help}) { print STDERR "\n" if(!$result); print "Usage: ". basename($0) ." -p <PROJECT> -r <REPO> [OPTIONS]\n\n"; print "Options:\n"; print "-p, --project <NAME> Project name on Gitorious\n"; print "-r, --repo <NAME> Repository name on Gitorious\n"; print "-v, --verbose Enable verbose output\n"; print "-h, --help Display this usage information\n"; exit 1; } my $ua = LWP::UserAgent->new(agent => 'gitorious-redirect'); if($cfg{project} && $cfg{repo}) { my $base_url = 'https://gitorious.org/'; $base_url .= URI::Escape::uri_escape($cfg{project}).'/'; $base_url .= URI::Escape::uri_escape($cfg{repo}); my $url = $base_url.'/refs'; print "Retrieving URL: $url ... " if($cfg{verbose}); my $req = HTTP::Request->new(GET => $url); my $res = $ua->request($req); if($res->is_success) { print "Success\n" if($cfg{verbose}); my $json = $res->content; my $data = JSON::decode_json($json); if($data->{tags} && @{$data->{tags}}) { print "Tag | URL\n"; foreach my $tag (@{$data->{tags}}) { my ($name, $hash) = @{$tag}; my $url = $base_url.'/archive/'; $url .= URI::Escape::uri_escape($hash).'.tar.gz'; print "$name | $url\n"; } } else { print "Error: No tags found in Gitorious repo!\n"; exit 1; } } else { print "Failed!\n" if($cfg{verbose}); print "Error: Failed to retrieve URL! ($url)\n"; print "HTTP Status: ".$res->code." ".$res->message."\n"; exit 1; } } else { print "No project and/or repo specified, cannot query Gitorious without them.\n"; exit 1; }