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;
