chiark / gitweb /
New --force, and make lack of -E fail by default
[nailing-cargo.git] / nailing-cargo
index 220222abcf04c5abbf71c72d544e7f37a6d17525..240a5a058b8c176e79a8591c5c330d93ce465b1f 100755 (executable)
@@ -28,6 +28,7 @@ options:
   --doc --man --manual            Display complete manual (in w3m)
   --leave-nailed                  Leave the nailed Cargo.toml in place
   -E | --edits-sources            Allow source edits (repeat: file creation)
+  -f | --force                    Override some warnings
   --linkfarm[=no|shallow|git|full]        (default varies, usually "no")
   --just-linkfarm | --clean-linkfarm | --keep-linkfarm (default is keep)
   --[no-]preclean-build[=no|src|full]               (default is no)
@@ -121,6 +122,8 @@ our @subcmd_xprops = qw(!manifest-path);
 
 our @configs;
 our $verbose=1;
+our $force=0;
+our $forced=0;
 our ($noact,$dump);
 our $target;
 
@@ -136,6 +139,17 @@ sub show_manual () {
   die "$self: exec sh failed: $!";
 }
 
+sub forceable_warning ($) {
+  my ($m) = @_;
+  print STDERR "$self: *WARNING*: $m\n";
+  if ($force) {
+    print STDERR "$self: continuing because of --force...\n" unless $forced++;
+    return;
+  } else {
+    die "$self: Stopping due to warning (override with -f | --force)\n";
+  }
+}
+
 sub read_or_enoent ($) {
   my ($fn) = @_;
   if (!open R, '<', $fn) {
@@ -581,8 +595,8 @@ sub addargs () {
   if ($linkfarm_depth eq 'copy-edit-all') {
     $oot_preclean //= 'src';
     if ($oot_preclean !~ m/^(?:src|full)$/) {
-      print STDERR
- "$self: *WARNING*: -EE specified, but also --preclean=no; will probably leave your source tree full of junk\n";
+      forceable_warning
+ "-EE specified, but also --preclean=no; will probably leave your source tree full of junk";
     }
   }
 
@@ -623,11 +637,11 @@ sub addargs () {
   push @add, "--offline" unless $online || subcmd_p('!offline');
 
   if (subcmd_p('creates') && $linkfarm_depth !~ m/^copy-edit-all/) {
-    print STDERR
- "$self: *WARNING*: this subcommand expects to create new source files; you probably want to specify --edits-sources twice aka -EE (which is not the default even now, for safety reasons)\n";
+    forceable_warning
+ "this subcommand expects to create new source files; you probably want to specify --edits-sources twice aka -EE (which is not the default even now, for safety reasons)";
   } elsif (subcmd_p('edits') && $linkfarm_depth !~ m/^copy-edit/) {
-    print STDERR
- "$self: *WARNING*: this subcommand expects to edit the source code; you probably want to specify --edits-sources aka -E (which is not the default even now, for safety reasons)\n";
+    forceable_warning
+ "this subcommand expects to edit the source code; you probably want to specify --edits-sources aka -E (which is not the default even now, for safety reasons)";
   }
 
   push @args_preface, @add if $pass_options;
@@ -1047,6 +1061,8 @@ sub parse_args () {
          $verbose=0;
        } elsif (s{^-n}{-}) {
          $noact++;
+       } elsif (s{^-f}{-}) {
+         $force++;
        } elsif (s{^-s(.+)}{-}s) {
          $cargo_subcmd = $1;
        } elsif (s{^-([uU])}{-}) {
@@ -1082,6 +1098,8 @@ sub parse_args () {
       $linkfarm_depth = $1 || 'git';
     } elsif (m{^--edits?-sources?$}) {
       $edits_sources->();
+    } elsif (m{^--force$}) {
+      $force++;
     } elsif (m{^--just-run$}) {
       $do_nail = $do_cargo_lock = $do_lock = 0;
     } elsif (m{^--(clean|keep)-linkfarm$}) {
@@ -1173,7 +1191,9 @@ if ($dump) {
                           oot_absdir => $oot_absdir,
                           build_absdir => $build_absdir,
                           linkfarm_depth => $linkfarm_depth,
-                          oot_preclean => $oot_preclean, });
+                          oot_preclean => $oot_preclean,
+                          force => $force,,
+                          forced => $forced,});
   ' or die $@;
 }