#!/usr/bin/perl

use strict;
use warnings;

use 5.10.0;

my $package_url = shift;
my $package;
chomp $package_url;
given ($package_url) {
  when (undef) {
    die "Usage: umegaya-guess-url Vcs-URL\n";
  }
  when (/^svn/) {
    # Debian Med
    if (m|debian-med/trunk/packages|) {
        if (m|svn://svn.debian.org/debian-med/trunk/packages.*/([a-z0-9\+\-\.]+)/trunk| ) {
            $package = $1;
        } else {
            die <<"ERROR_MESSAGE"
Could not parse « $package_url ».
The package is located in Debian Med’s Subversion repository according to its
VCS URL, but it does not point at a trunk directory as it should. See the
following page for more information.
http://debian-med.alioth.debian.org/docs/policy.html#svn-repository-structure
ERROR_MESSAGE
        }
    }
    # Debichem
    elsif (m|svn://svn.debian.org/s?v?n?/?debichem/unstable/([a-z0-9\+\-\.]+)/|) {
      $package = $1;
    }
    elsif (m|svn://svn.debian.org/s?v?n?/?debichem/experimental/([a-z0-9\+\-\.]+)/|) {
      $package = $1;
    }
    elsif (m|svn://svn.debian.org/s?v?n?/?debichem/wnpp/([a-z0-9\+\-\.]+)/|) {
      $package = $1;
    }
    # Debian Science
    elsif (m|svn://svn.debian.org/s?v?n?/?debian-science/packages/R/([a-z0-9\+\-\.]+)/| ) {
      $package = $1;
    }
    elsif (m|svn://svn.debian.org/s?v?n?/?debian-science/packages/([a-z0-9\+\-\.]+)/| ) {
      $package = $1;
    }
    # Other repositories
    elsif (m|svn://svn.debian.org/.*/([a-z0-9\+\-\.]+)/trunk| ) {
      $package = $1;
    }
    else {
      die "Could not detect package name for $package_url\n";
    }
    $package_url .= "debian/upstream";
  }
  when (/^git/) {
    if    (m|git://git.debian.org/.+/([a-z0-9\+\-\.]+).git|) {
      $package = $1;
      $package_url =~ s|^git://git.debian.org/g?i?t?/?(.*)|http://git.debian.org/?p=$1;a=blob_plain;f=debian/upstream;hb=HEAD|;
    }
    # GitHub (master branch only)
    elsif (m|git://github.com/([A-Za-z0-9\+\-\.]+)/([a-z0-9\+\-\.]+).git$|) {
       $package = $2;
       $package_url = "https://raw.github.com/$1/$package/master/debian/upstream"
    }
    else {
      die "Could not detect package name for $package_url\n";
    }
  }
  default {
    die "Only Subversion and Git URLs are supported"
  }
}

say "$package\t$package_url";
