unstow_node: extract new unstow_link_node() sub
This commit is contained in:
parent
cc592bdc44
commit
42cc1d2e60
1 changed files with 39 additions and 33 deletions
|
@ -935,39 +935,7 @@ sub unstow_node {
|
||||||
|
|
||||||
# Does the target exist?
|
# Does the target exist?
|
||||||
if ($self->is_a_link($target)) {
|
if ($self->is_a_link($target)) {
|
||||||
debug(4, 2, "Evaluate existing link: $target");
|
$self->unstow_link_node($package, $target, $path);
|
||||||
|
|
||||||
# Where is the link pointing?
|
|
||||||
my $existing_source = $self->read_a_link($target);
|
|
||||||
if (not $existing_source) {
|
|
||||||
error("Could not read link: $target");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($existing_source =~ m{\A/}) {
|
|
||||||
warn "Ignoring an absolute symlink: $target => $existing_source\n";
|
|
||||||
return; # XXX #
|
|
||||||
}
|
|
||||||
|
|
||||||
# Does it point to a node under any stow directory?
|
|
||||||
my ($existing_path, $existing_stow_path, $existing_package) =
|
|
||||||
$self->find_stowed_path($target, $existing_source);
|
|
||||||
if (not $existing_path) {
|
|
||||||
$self->conflict(
|
|
||||||
'unstow',
|
|
||||||
$package,
|
|
||||||
"existing target is not owned by stow: $target => $existing_source"
|
|
||||||
);
|
|
||||||
return; # XXX #
|
|
||||||
}
|
|
||||||
|
|
||||||
# Does the existing $target actually point to anything?
|
|
||||||
if (-e $existing_path) {
|
|
||||||
$self->unstow_valid_link($path, $target, $existing_path);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
debug(2, 0, "--- removing invalid link into a stow directory: $path");
|
|
||||||
$self->do_unlink($target);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
elsif (-e $target) {
|
elsif (-e $target) {
|
||||||
debug(4, 2, "Evaluate existing node: $target");
|
debug(4, 2, "Evaluate existing node: $target");
|
||||||
|
@ -993,6 +961,44 @@ sub unstow_node {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub unstow_link_node {
|
||||||
|
my $self = shift;
|
||||||
|
my ($package, $target, $path) = @_;
|
||||||
|
debug(4, 2, "Evaluate existing link: $target");
|
||||||
|
|
||||||
|
# Where is the link pointing?
|
||||||
|
my $existing_source = $self->read_a_link($target);
|
||||||
|
if (not $existing_source) {
|
||||||
|
error("Could not read link: $target");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($existing_source =~ m{\A/}) {
|
||||||
|
warn "Ignoring an absolute symlink: $target => $existing_source\n";
|
||||||
|
return; # XXX #
|
||||||
|
}
|
||||||
|
|
||||||
|
# Does it point to a node under any stow directory?
|
||||||
|
my ($existing_path, $existing_stow_path, $existing_package) =
|
||||||
|
$self->find_stowed_path($target, $existing_source);
|
||||||
|
if (not $existing_path) {
|
||||||
|
$self->conflict(
|
||||||
|
'unstow',
|
||||||
|
$package,
|
||||||
|
"existing target is not owned by stow: $target => $existing_source"
|
||||||
|
);
|
||||||
|
return; # XXX #
|
||||||
|
}
|
||||||
|
|
||||||
|
# Does the existing $target actually point to anything?
|
||||||
|
if (-e $existing_path) {
|
||||||
|
$self->unstow_valid_link($path, $target, $existing_path);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
debug(2, 0, "--- removing invalid link into a stow directory: $path");
|
||||||
|
$self->do_unlink($target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub unstow_valid_link {
|
sub unstow_valid_link {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($path, $target, $existing_path) = @_;
|
my ($path, $target, $existing_path) = @_;
|
||||||
|
|
Loading…
Reference in a new issue