chiark / gitweb /
New scheme for subcommand handling - seems to work, ish
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Jun 2020 12:58:46 +0000 (13:58 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Jun 2020 12:58:46 +0000 (13:58 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
nailing-cargo

index 58a777e75062ab91480c00b79a6741bd1ace9da0..006e02930d61c1814ad201bbae007329b4fc8e7c 100755 (executable)
@@ -38,7 +38,7 @@ our $src_absdir = getcwd() // die "$self: getcwd failed: $!\n";
 
 our $worksphere = $src_absdir;
 $worksphere =~ s{/([^/]+)$}{}
-  or die "$self: cwd \`$worksphere' unsupported!\n";e
+  or die "$self: cwd \`$worksphere' unsupported!\n";
 our $subdir = $1; # leafname
 
 our $lockfile = "../.nailing-cargo.lock";
@@ -46,15 +46,17 @@ our $lockfile = "../.nailing-cargo.lock";
 our $cargo_subcmd;
 our $command_is_cargo;
 our $alt_cargo_lock;
+our $cargo_lock_update;
+our $pass_options;
 our $online;
 
 #
-our %subcmd_props = {
-# build (default)  =>qw(                                        ),
- update            =>qw( lock-update !target                    ),
-'generate-lockfile'=>qw( lock-update !target                    ),
- fetch             =>qw(             !target online !target-dir ),
-                   };
+our %subcmd_props = (
+# build (default)  =>[qw(                                        )],
+'generate-lockfile'=>[qw( lock-update !target        !target-dir )],
+ update            =>[qw( lock-update !target online             )],
+ fetch             =>[qw(                     online !target-dir )],
+                   );
 
 our @subcmd_xprops = qw(!manifest-path !offline !locked);
 
@@ -81,6 +83,12 @@ sub stat_exists ($$) {
   return 0;
 }
 
+sub subcmd_p ($) {
+  print STDERR " subcmd_p ".(join ' ', keys %$cargo_subcmd)."   | @_\n"
+    if $dump;
+  $cargo_subcmd->{$_[0]}
+}
+
 sub toml_or_enoent ($$) {
   my ($f,$what) = @_;
   my $toml = read_or_enoent($f) // return;
@@ -367,7 +375,7 @@ sub addargs () {
     push @add, qw(--locked) unless subcmd_p('!locked');
     if (defined($oot_dir) && !subcmd_p('!manifest-path')) {
       push @ARGV, "--manifest-path=${src_absdir}/Cargo.toml" if $pass_options;
-      push @add, qw(--target-dir=target) unless subcmd_p('!target');
+      push @add, qw(--target-dir=target) unless subcmd_p('!target-dir');
     }
   }
 
@@ -717,7 +725,7 @@ sub parse_args () {
       my @props = split /\,/, $_;
       our %subcmd_prop_ok;
       if (!%subcmd_prop_ok) {
-       for $v in (\@subcmd_xprops, values %subcmd_props) {
+       foreach my $v (\@subcmd_xprops, values %subcmd_props) {
          $subcmd_prop_ok{$_}=1 foreach @$v;
        };
       }
@@ -752,8 +760,14 @@ sub parse_args () {
   }
 
   if (!ref($cargo_subcmd)) {
+    print STDERR " cargo_subcmd lookup $cargo_subcmd\n" if $dump;
     $cargo_subcmd = $subcmd_props{$cargo_subcmd} // [ ];
   }
+
+  print STDERR " cargo_subcmd props @$cargo_subcmd\n" if $dump;
+  my %cargo_subcmd;
+  $cargo_subcmd{$_} = 1 foreach @$cargo_subcmd;
+  $cargo_subcmd = \%cargo_subcmd;
 }
 
 parse_args();