Hi,

I have been sitting on this diff for a bit. It enables portgen to take a
version. For example:

  $ portgen go github.com/ipfs/go-ipfs@v0.7.0-rc2

This is handy when our logic to pick the version number prevents you
from grabbing rc versions.

It will also enable easier upgrading of GOMOD vars (that's another diff
that paco@ has put together).

OK?

Cheers,
Aaron

diff bd5892339f98bf561050a7dfa529498b3770873d /usr/ports
blob - 16116f9b0525e89d7f4b115e7517cb913f107760
file + infrastructure/lib/OpenBSD/PortGen/Port/Go.pm
--- infrastructure/lib/OpenBSD/PortGen/Port/Go.pm
+++ infrastructure/lib/OpenBSD/PortGen/Port/Go.pm
@@ -64,16 +64,31 @@ sub _go_lic_info
 
 sub _go_determine_name
 {
-       # Some modules end in "v1" or "v2", if we find one of these, we need
-       # to set PKGNAME to something up a level
        my ( $self, $module ) = @_;
-       my $json = $self->get_json( $module . '/@latest' );
+       my $json = {};
 
+       # Versions can be specified on the command line:
+       if ($module =~ m/\@v/) {
+               my @parts = split("@", $module);
+               $module = $parts[0];
+               $json->{Module} = $parts[0];
+               $json->{Version} = $parts[1];
+
+               # This is used in get_ver_info when we have already determined
+               # the version to use.
+               $self->{ModName} = $parts[0];
+               $self->{ModVersion} = $parts[1];
+       } else {
+               $json = $self->get_json( $module . '/@latest' );
+       }
+
        if ($json->{Version} =~ m/incompatible/) {
                my $msg = "${module} $json->{Version} is incompatible with Go 
modules.";
                croak $msg;
        }
 
+       # Some modules end in "v1" or "v2", if we find one of these, we need
+       # to set PKGNAME to something up a level
        if ($module =~ m/v\d$/) {
                $json->{Name}   = ( split '/', $module )[-2];
        } else {
@@ -212,6 +227,11 @@ sub _go_mod_normalize
 sub get_ver_info
 {
        my ( $self, $module ) = @_;
+
+       if (defined $self->{ModVersion} && defined $self->{ModName}) {
+               return { Module => $self->{ModName}, Version => 
$self->{ModVersion} };
+       }
+
        my $version_list = $self->get( $module . '/@v/list' );
        my $version = "v0.0.0";
        my $ret;

Reply via email to