Andrew Hewus Fresh writes:

> On Thu, Sep 10, 2020 at 04:23:03PM -0600, Aaron Bieber wrote:
>> 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/[email protected]
>> 
>> 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/) {
>
> Why don't you just "get_json" if it has a version already, not looking
> for @latest?   It seems like that would do a bit of validation that the
> version you tried exists and such.
>

Because the next thing grabbed is not json, it's the actual .mod file
for a given package:

  https://proxy.golang.org/github.com/ipfs/go-ipfs/@v/v0.7.0-rc2.mod

>               $json = $self->get_json($module);
>         $module =~ s/@.*//;
>
>> +            my @parts = split("@", $module);
>
> I might name these `my ($m, $v) = split /@/, $module, 2;` because I
> think that's easier to follow than $parts[1].
>

Good call.

>> +            $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];
>
> Should we store these things in $self out of $json if we got them?  What
> does grabbing all the versions do if we've already gotten one?

It returns early from get_ver_info if the self vars are set. Since
get_ver_info is called by the portgen stuff, I am not sure what the best
approach to not calling it is.

>
>
>> +    } 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;
>> 

New version:

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,30 @@ 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 ($m, $v) = split("@", $module);
+               $json->{Module} = $m;
+               $json->{Version} = $v;
+
+               # This is used in get_ver_info when we have already determined
+               # the version to use.
+               $self->{ModName} = $m;
+               $self->{ModVersion} = $v;
+       } 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 +226,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