Ditch obsolete --conflicts option and update misleading documentation.
This commit is contained in:
parent
00d4e68445
commit
55d3f05cf2
3 changed files with 30 additions and 68 deletions
31
bin/stow.in
31
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<stow
|
||||
-n> 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<would> 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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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} } ];
|
||||
|
||||
|
|
Loading…
Reference in a new issue