On 2021/03/17 12:53, Josh Rickmar wrote:
> This portgen(1) patch allows for an optional @version suffix to a
> ported Go module to specify a tag or branch to port.  The implied
> default is @latest, which is the latest semver tag known by the proxy
> server.  This is the same syntax used to refer to module versions in
> Go's own tooling.
> 
> I've inlined two patches here for both the src and ports trees since
> the portgen manpage is in src.

Works for me, I've wanted to do this a few times before and know that
others have too so definitely useful.

> +     elsif ($at_version =~ /^v\d+\.\d+\.\d+/) {

Is this vx.y.z format fixed with go, or just a convention?


> diff 5dfe4c7116fefdfa88d0ee0df89758e96e280278 /usr/src
> blob - 22ccaf2e01cffbb10cf1fb4b7fc0ade89fa16b48
> file + share/man/man1/portgen.1
> --- share/man/man1/portgen.1
> +++ share/man/man1/portgen.1
> @@ -58,6 +58,15 @@ for Ruby gems.
>  for Go modules.
>  .El
>  .Pp
> +A
> +.Cm go
> +module may be used with an
> +.Ar @version
> +suffix to specify a tag or branch to port.
> +The default suffix is
> +.Ar @latest ,
> +which is interpreted as the latest stable release.
> +.Pp
>  The following packages must be installed prior to the invocation of
>  .Nm :
>  .Pp
> 
> diff 6eaf30816f4def2f40cb2b765a3aa33ae11ae4a8 /usr/ports
> blob - 40be89f09438e34ea14cb0d116e20663a949ea4b
> file + infrastructure/lib/OpenBSD/PortGen/Port/Go.pm
> --- infrastructure/lib/OpenBSD/PortGen/Port/Go.pm
> +++ infrastructure/lib/OpenBSD/PortGen/Port/Go.pm
> @@ -69,14 +69,13 @@ sub _go_determine_name
>       my ( $self, $module ) = @_;
>  
>       my $json = $self->get_ver_info($module);
> +     $module = $json->{Module};
>       if ($module =~ m/v\d$/) {
>               $json->{Name}   = ( split '/', $module )[-2];
>       } else {
>               $json->{Name}   = ( split '/', $module )[-1];
>       }
>  
> -     $json->{Module} = $module;
> -
>       return $json;
>  }
>  
> @@ -87,7 +86,7 @@ sub get_dist_info
>       my $json = $self->_go_determine_name($module);
>  
>       my ($dist, $mods) = $self->_go_mod_info($json);
> -     $json->{License} = $self->_go_lic_info($module);
> +     $json->{License} = $self->_go_lic_info($json->{Module});
>  
>       $json->{Dist} = $dist if @$dist > 0;
>       $json->{Mods} = $mods if @$mods > 0;
> @@ -218,6 +217,13 @@ sub get_ver_info
>       my $version_list = do { local $@; eval { local $SIG{__DIE__};
>           $self->get( $module . '/@v/list' ) } };
>  
> +     # Versions can be specified on the command line with a
> +     # '@<version>' suffix, which defaults to '@latest':
> +     my $at_version = 'latest';
> +     if ($module =~ /@/) {
> +             ($module, $at_version) = split(/@/, $module);
> +     }
> +
>       my $version_info;
>       if ($version_list) {
>               my %v = ( o => 
> OpenBSD::PackageName::version->from_string("v0.0.0") );
> @@ -234,8 +240,17 @@ sub get_ver_info
>                       croak "Unable to determine version for $module!";
>               }
>       }
> +     elsif ($at_version =~ /^v\d+\.\d+\.\d+/) {
> +             $version_info->{Module} = $module;
> +             $version_info->{Version} = $at_version;
> +     }
>       else {
> -             $version_info = $self->get_json( 
> $self->_go_mod_normalize($module) . '/@latest' );
> +             my $endpoint = '/@latest';
> +             if ($at_version ne 'latest') {
> +                     $endpoint = '/@v/' . "${at_version}.info";
> +             }
> +             $version_info = $self->get_json( 
> $self->_go_mod_normalize($module) . $endpoint );
> +             $version_info->{Module} = $module;
>       }
>  
>       return $self->{version_info} = $version_info;
> 

Reply via email to