diff --git a/bin/stow.in b/bin/stow.in index ecc3c3f..343cd32 100755 --- a/bin/stow.in +++ b/bin/stow.in @@ -131,20 +131,7 @@ C<-D>). =item --no Do not perform any operations that modify the filesystem; merely show -what would happen. Since no actual operations are performed, C could report conflicts when none would actually take place (see -"Conflicts" in the info manual); but it won't fail to report -conflicts that B take place. - -=item -c - -=item --conflicts - -Do not exit immediately when a conflict is encountered. This option -implies C<-n>, and is used to search for all conflicts that might -arise from an actual Stow operation. As with C<-n>, however, false -conflicts might be reported (see the "Conflicts" section in the info -manual). +what would happen. =item -d DIR @@ -429,16 +416,19 @@ sub main { # --verbose: tell me what you are planning to do # --simulate: don't execute planned operations - # --conflicts: just list any detected conflicts if (scalar @conflicts) { - warn "WARNING: conflicts detected.\n"; - if ($options->{conflicts}) { - warn $_ foreach @conflicts; - } + warn "WARNING: conflicts detected:\n"; + warn $_ foreach @conflicts; warn "WARNING: all operations aborted.\n"; + exit 1; } else { + if ($options->{simulate}) { + warn "WARNING: in simulation mode so not modifying filesystem.\n"; + return; + } + $stow->process_tasks(); } } @@ -464,7 +454,7 @@ sub process_options { Getopt::Long::config('no_ignore_case', 'bundling', 'permute'); GetOptions( \%options, - 'verbose|v:+', 'help|h', 'simulate|n|no', 'conflicts|c', + 'verbose|v:+', 'help|h', 'simulate|n|no', 'version|V', 'compat|p', 'dir|d=s', 'target|t=s', # clean and pre-compile any regex's at parse time @@ -608,7 +598,6 @@ SYNOPSIS: OPTIONS: -n, --no Do not actually make any filesystem changes - -c, --conflicts Scan for and print any conflicts, implies -n -d DIR, --dir=DIR Set stow dir to DIR (default is current dir) -t DIR, --target=DIR Set target to DIR (default is parent of stow dir) -v, --verbose[=N] Increase verbosity (levels are 0,1,2,3; diff --git a/doc/stow.texi b/doc/stow.texi index 668cb27..257b685 100644 --- a/doc/stow.texi +++ b/doc/stow.texi @@ -107,7 +107,6 @@ the installation of software packages. * Installing Packages:: Using Stow to install. * Deleting Packages:: Using Stow to uninstall. * Conflicts:: When Stow can't stow. -* Deferred Operation:: Using two passes to stow. * Mixing Operations:: Multiple actions per invocation. * Multiple Stow Directories:: Further segregating software. * Target Maintenance:: Cleaning up mistakes. @@ -417,18 +416,6 @@ directory. The following options are deprecated: @end table -The following options are deprecated as of Stow version 2: -@table @samp -@item -c -@itemx --conflicts -Print any conflicts that are encountered. This option -implies @samp{-n}, and is used to search for all conflicts that might -arise from an actual Stow operation. - -This option is deprecated as conflicts are now printed by default and no -operations will be performed if any conflicts are detected. -@end table - @xref{Resource Files}, for a way to set default values for any of these options. @@ -699,7 +686,7 @@ package. @c =========================================================================== -@node Conflicts, Deferred Operation, Deleting Packages, Top +@node Conflicts, Mixing Operations, Deleting Packages, Top @chapter Conflicts If, during installation, a file or symlink exists in the target tree and @@ -711,37 +698,28 @@ other hand, if the existing name is merely a symlink that already points where Stow needs it to, then no conflict has occurred. (Thus it is harmless to install a package that has already been installed.) -A conflict causes Stow to exit immediately and print a warning -(unless @samp{-c} is given), even if that means aborting an installation -in mid-package. +For complex packages, scanning the stow and target trees in tandem, +and deciding whether to make directories or links, split-open or fold +directories, can actually take a long time (a number of seconds). +Moreover, an accurate analysis of potential conflicts requires us to +take into account all of these operations. -@cindex false conflict -When running Stow with the @samp{-n} or @samp{-c} options, no actual -filesystem-modifying operations take place. Thus if a folded tree would -have been split open, but instead was left in place because @samp{-n} or -@samp{-c} was used, then Stow will report a @dfn{false conflict}, since -the directory that Stow was expecting to populate has remained an -un-populatable symlink. +@anchor{Deferred Operation} +@section Deferred Operation + +Since version 2.0, Stow now adopts a two-phase algorithm, first +scanning for any potential conflicts before any stowing or unstowing +operations are performed. If any conflicts are found, they are +displayed and then Stow terminates without making any modifications to +the filesystem. This means that there is much less risk of a package +being partially stowed or unstowed due to conflicts. + +Prior to version 2.0, if a conflict was discovered, the stow or unstow +operation could be aborted mid-flow, leaving the target tree in an +inconsistent state. @c =========================================================================== -@node Deferred Operation, Mixing Operations, Conflicts, Top -@chapter Deferred Operation - -For complex packages, scanning the stow and target trees in tandem, and -deciding whether to make directories or links, split-open or fold directories, -can actually take a long time (a number of seconds). Moreover, an accurate -analysis of potential conflicts requires us to take into account all of -these operations. - -Since version 2.0, Stow now adopts a two-phase algorithm, first scanning -for any potential conflicts before any stowing or unstowing operations -are performed. This means that there is much less risk of a package -being partially stowed or unstowed due to conflicts. Prior to version -2.0, if a conflict was discovered, the stow or unstow operation could be -aborted mid-flow, leaving the target tree in an inconsistent state. - -@c =========================================================================== -@node Mixing Operations, Multiple Stow Directories, Deferred Operation, Top +@node Mixing Operations, Multiple Stow Directories, Conflicts, Top @chapter Mixing Operations Since version 2.0, multiple distinct actions can be specified in a single diff --git a/lib/Stow.pm.in b/lib/Stow.pm.in index 6aff678..88623f3 100755 --- a/lib/Stow.pm.in +++ b/lib/Stow.pm.in @@ -1323,11 +1323,6 @@ sub process_tasks { debug(2, "Processing tasks..."); - if ($self->{simulate}) { - warn "WARNING: simulating so all operations are deferred.\n"; - return; - } - # Strip out all tasks with a skip action $self->{tasks} = [ grep { $_->{action} ne 'skip' } @{ $self->{tasks} } ];