MODGO_MODULES generator helper.

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

MODGO_MODULES generator helper.

Paco Esteban-2
Hi ports@,

I had the idea of having a make target to help with MODGO_MODULES and
MODGO_MODFILES generation just like devel/cargo does with its
modcargo-gen-crates.

It may be a bit crude but it works and it could be quite useful when
updating ports that use this.

I discussed it a bit with abieber@ (as it's based on his portgen go work).
He liked the general idea, and we agreed to continue on the list.

Not sure if I should use ${REPORT_PROBLEM} instead of that `exit 1`.
Of course this should be

Comments appreciated.

Attached 2 diffs, one against ports for the helper and make target and
one against src for the man page changes.

Cheers,

--
Paco Esteban.
0x5818130B8A6DBC03

modgo-gen-modules.diff (2K) Download Attachment
port-modules.diff (720 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: MODGO_MODULES generator helper.

Aaron Bieber-2

Paco Esteban writes:

> Hi ports@,
>
> I had the idea of having a make target to help with MODGO_MODULES and
> MODGO_MODFILES generation just like devel/cargo does with its
> modcargo-gen-crates.
>
> It may be a bit crude but it works and it could be quite useful when
> updating ports that use this.
>
> I discussed it a bit with abieber@ (as it's based on his portgen go work).
> He liked the general idea, and we agreed to continue on the list.
IMO this will be a nice addition. I am not sure if adding it to
infrastructure/bin is correct, but it seems logical to me!

>
> Not sure if I should use ${REPORT_PROBLEM} instead of that `exit 1`.
> Of course this should be
>
> Comments appreciated.
>
> Attached 2 diffs, one against ports for the helper and make target and
> one against src for the man page changes.

Assuming the bin location is appropriate, OK abieber@!

>
> Cheers,

Expanding on this a bit, here is a diff to Go.pm that allows one to
specify the version (non-versioned will grab what ever the latest is
still):

  portgen go suah.dev/ogvt@v1.0.2
  - or -
  portgen go suah.dev/ogvt@v1.0.3

This will let existing ports spit out the proper MOGGO_MOD*
values. Without this the portgen logic will assume you want the latest
version of whatever app you are using which might not align with the
current version of a given port.

Alternatively we could output MODGO_VERSION var alongside the MODGO_MOD*
stuff.


diff --git a/infrastructure/lib/OpenBSD/PortGen/Port/Go.pm b/infrastructure/lib/OpenBSD/PortGen/Port/Go.pm
index ffee13013e7..27e84cb1263 100644
--- a/infrastructure/lib/OpenBSD/PortGen/Port/Go.pm
+++ b/infrastructure/lib/OpenBSD/PortGen/Port/Go.pm
@@ -65,16 +65,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 {
@@ -166,7 +181,6 @@ sub _go_mod_info
  my @mods;
 
  foreach my $mod (@raw_mods) {
- carp Dumper $mod if ($mod =~ m/markbates/);
  foreach my $m (split(/ /, $mod)) {
  $m =~ s/@/ /;
  $m = $self->_go_mod_normalize($m);
@@ -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;


--
PGP: 0x1F81112D62A9ADCE / 3586 3350 BFEA C101 DB1A  4AF0 1F81 112D 62A9 ADCE