Remove $stow_path parameter from unstow_{contents,node}{,_orig}()

Unlike with the stow_{contents,node}{,_orig}() counterpart functions,
when unstowing, it's not necessary to pass the $stow_path parameter
because it can never differ from $self->{stow_path}.

The stow_*() functions need this for the corner case of unfolding a
tree which is stowed from a different stow directory to the one being
used for the current stowing operation (see the "Multiple Stow
Directories" section of the manual).
This commit is contained in:
Adam Spiers 2024-03-09 17:49:49 +00:00
parent 4e2776224f
commit 9ce37d9575

View file

@ -278,14 +278,12 @@ sub plan_unstow {
debug(2, 0, "Planning unstow of package $package..."); debug(2, 0, "Planning unstow of package $package...");
if ($self->{compat}) { if ($self->{compat}) {
$self->unstow_contents_orig( $self->unstow_contents_orig(
$self->{stow_path},
$package, $package,
'.', '.',
); );
} }
else { else {
$self->unstow_contents( $self->unstow_contents(
$self->{stow_path},
$package, $package,
'.', '.',
); );
@ -626,9 +624,7 @@ sub marked_stow_dir {
#===== METHOD =============================================================== #===== METHOD ===============================================================
# Name : unstow_contents_orig() # Name : unstow_contents_orig()
# Purpose : unstow the contents of the given directory # Purpose : unstow the contents of the given directory
# Parameters: $stow_path => relative path from current (i.e. target) directory # Parameters: $package => the package whose contents are being unstowed
# : to the stow dir containing the package to be unstowed
# : $package => the package whose contents are being unstowed
# : $target => relative path to symlink target from the current directory # : $target => relative path to symlink target from the current directory
# Returns : n/a # Returns : n/a
# Throws : a fatal error if directory cannot be read # Throws : a fatal error if directory cannot be read
@ -637,9 +633,9 @@ sub marked_stow_dir {
#============================================================================ #============================================================================
sub unstow_contents_orig { sub unstow_contents_orig {
my $self = shift; my $self = shift;
my ($stow_path, $package, $target) = @_; my ($package, $target) = @_;
my $path = join_paths($stow_path, $package, $target); my $path = join_paths($self->{stow_path}, $package, $target);
return if $self->should_skip_target_which_is_stow_dir($target); return if $self->should_skip_target_which_is_stow_dir($target);
@ -664,17 +660,15 @@ sub unstow_contents_orig {
next NODE if $node eq '.'; next NODE if $node eq '.';
next NODE if $node eq '..'; next NODE if $node eq '..';
my $node_target = join_paths($target, $node); my $node_target = join_paths($target, $node);
next NODE if $self->ignore($stow_path, $package, $node_target); next NODE if $self->ignore($self->{stow_path}, $package, $node_target);
$self->unstow_node_orig($stow_path, $package, $node_target); $self->unstow_node_orig($package, $node_target);
} }
} }
#===== METHOD =============================================================== #===== METHOD ===============================================================
# Name : unstow_node_orig() # Name : unstow_node_orig()
# Purpose : unstow the given node # Purpose : unstow the given node
# Parameters: $stow_path => relative path from current (i.e. target) directory # Parameters: $package => the package containing the node being stowed
# : to the stow dir containing the node to be stowed
# : $package => the package containing the node being stowed
# : $target => relative path to symlink target from the current directory # : $target => relative path to symlink target from the current directory
# Returns : n/a # Returns : n/a
# Throws : fatal error if a conflict arises # Throws : fatal error if a conflict arises
@ -682,9 +676,9 @@ sub unstow_contents_orig {
#============================================================================ #============================================================================
sub unstow_node_orig { sub unstow_node_orig {
my $self = shift; my $self = shift;
my ($stow_path, $package, $target) = @_; my ($package, $target) = @_;
my $path = join_paths($stow_path, $package, $target); my $path = join_paths($self->{stow_path}, $package, $target);
debug(3, 0, "Unstowing $target (compat mode)"); debug(3, 0, "Unstowing $target (compat mode)");
debug(4, 1, "source path is $path"); debug(4, 1, "source path is $path");
@ -727,7 +721,7 @@ sub unstow_node_orig {
} }
} }
elsif (-d $target) { elsif (-d $target) {
$self->unstow_contents_orig($stow_path, $package, $target); $self->unstow_contents_orig($package, $target);
# This action may have made the parent directory foldable # This action may have made the parent directory foldable
if (my $parent = $self->foldable($target)) { if (my $parent = $self->foldable($target)) {
@ -750,9 +744,7 @@ sub unstow_node_orig {
#===== METHOD =============================================================== #===== METHOD ===============================================================
# Name : unstow_contents() # Name : unstow_contents()
# Purpose : unstow the contents of the given directory # Purpose : unstow the contents of the given directory
# Parameters: $stow_path => relative path from current (i.e. target) directory # Parameters: $package => the package whose contents are being unstowed
# : to the stow dir containing the package to be unstowed
# : $package => the package whose contents are being unstowed
# : $target => relative path to symlink target from the current directory # : $target => relative path to symlink target from the current directory
# Returns : n/a # Returns : n/a
# Throws : a fatal error if directory cannot be read # Throws : a fatal error if directory cannot be read
@ -761,9 +753,9 @@ sub unstow_node_orig {
#============================================================================ #============================================================================
sub unstow_contents { sub unstow_contents {
my $self = shift; my $self = shift;
my ($stow_path, $package, $target) = @_; my ($package, $target) = @_;
my $path = join_paths($stow_path, $package, $target); my $path = join_paths($self->{stow_path}, $package, $target);
return if $self->should_skip_target_which_is_stow_dir($target); return if $self->should_skip_target_which_is_stow_dir($target);
@ -791,7 +783,7 @@ sub unstow_contents {
next NODE if $node eq '.'; next NODE if $node eq '.';
next NODE if $node eq '..'; next NODE if $node eq '..';
my $node_target = join_paths($target, $node); my $node_target = join_paths($target, $node);
next NODE if $self->ignore($stow_path, $package, $node_target); next NODE if $self->ignore($self->{stow_path}, $package, $node_target);
if ($self->{dotfiles}) { if ($self->{dotfiles}) {
my $adj_node_target = adjust_dotfile($node_target); my $adj_node_target = adjust_dotfile($node_target);
@ -799,7 +791,7 @@ sub unstow_contents {
$node_target = $adj_node_target; $node_target = $adj_node_target;
} }
$self->unstow_node($stow_path, $package, $node_target); $self->unstow_node($package, $node_target);
} }
if (-d $target) { if (-d $target) {
$self->cleanup_invalid_links($target); $self->cleanup_invalid_links($target);
@ -809,9 +801,7 @@ sub unstow_contents {
#===== METHOD =============================================================== #===== METHOD ===============================================================
# Name : unstow_node() # Name : unstow_node()
# Purpose : unstow the given node # Purpose : unstow the given node
# Parameters: $stow_path => relative path from current (i.e. target) directory # Parameters: $package => the package containing the node being unstowed
# : to the stow dir containing the node to be stowed
# : $package => the package containing the node being unstowed
# : $target => relative path to symlink target from the current directory # : $target => relative path to symlink target from the current directory
# Returns : n/a # Returns : n/a
# Throws : fatal error if a conflict arises # Throws : fatal error if a conflict arises
@ -819,9 +809,9 @@ sub unstow_contents {
#============================================================================ #============================================================================
sub unstow_node { sub unstow_node {
my $self = shift; my $self = shift;
my ($stow_path, $package, $target) = @_; my ($package, $target) = @_;
my $path = join_paths($stow_path, $package, $target); my $path = join_paths($self->{stow_path}, $package, $target);
debug(3, 1, "Unstowing $path"); debug(3, 1, "Unstowing $path");
debug(4, 2, "target is $target"); debug(4, 2, "target is $target");
@ -893,7 +883,7 @@ sub unstow_node {
elsif (-e $target) { elsif (-e $target) {
debug(4, 2, "Evaluate existing node: $target"); debug(4, 2, "Evaluate existing node: $target");
if (-d $target) { if (-d $target) {
$self->unstow_contents($stow_path, $package, $target); $self->unstow_contents($package, $target);
# This action may have made the parent directory foldable # This action may have made the parent directory foldable
if (my $parent = $self->foldable($target)) { if (my $parent = $self->foldable($target)) {