mirror of https://github.com/digint/btrbk
btrbk: get_best_parent(): add clone_src argument
parent
7cf1bfb354
commit
f38c69316f
17
btrbk
17
btrbk
|
@ -3084,6 +3084,7 @@ sub get_best_parent($$$;@)
|
||||||
my $droot = shift || die;
|
my $droot = shift || die;
|
||||||
my %opts = @_;
|
my %opts = @_;
|
||||||
my $fallback_btrbk_basename = $opts{fallback_btrbk_basename} // 1; # default true, see below
|
my $fallback_btrbk_basename = $opts{fallback_btrbk_basename} // 1; # default true, see below
|
||||||
|
my $clone_src = $opts{clone_src};
|
||||||
|
|
||||||
# honor incremental_resolve option
|
# honor incremental_resolve option
|
||||||
my $source_incremental_resolve = config_key($svol, "incremental_resolve");
|
my $source_incremental_resolve = config_key($svol, "incremental_resolve");
|
||||||
|
@ -3140,8 +3141,7 @@ sub get_best_parent($$$;@)
|
||||||
}
|
}
|
||||||
|
|
||||||
# get correlated receive targets of candidates, return first matching within $resolve_droot
|
# get correlated receive targets of candidates, return first matching within $resolve_droot
|
||||||
my $parent;
|
my @resolved;
|
||||||
my $target_node;
|
|
||||||
my @filtered_nodes;
|
my @filtered_nodes;
|
||||||
my %uniq;
|
my %uniq;
|
||||||
foreach my $cand (@candidate) {
|
foreach my $cand (@candidate) {
|
||||||
|
@ -3149,9 +3149,8 @@ sub get_best_parent($$$;@)
|
||||||
my $correlated_target = get_best_correlated_target($resolve_droot, $cand, push_filtered_nodes => \@filtered_nodes, fallback_all_mountpoints => $target_fallback_all_mountpoints);
|
my $correlated_target = get_best_correlated_target($resolve_droot, $cand, push_filtered_nodes => \@filtered_nodes, fallback_all_mountpoints => $target_fallback_all_mountpoints);
|
||||||
if($correlated_target) {
|
if($correlated_target) {
|
||||||
TRACE "get_best_parent: common related from root=\"$resolve_droot->{PRINT}\": \"$cand->{PRINT}\", \"$correlated_target->{PRINT}\"";
|
TRACE "get_best_parent: common related from root=\"$resolve_droot->{PRINT}\": \"$cand->{PRINT}\", \"$correlated_target->{PRINT}\"";
|
||||||
$parent = $cand;
|
push @resolved, [ $cand, $correlated_target ];
|
||||||
$target_node = $correlated_target->{node};
|
last unless($clone_src);
|
||||||
last;
|
|
||||||
}
|
}
|
||||||
$uniq{$cand->{node}{id}} = 1;
|
$uniq{$cand->{node}{id}} = 1;
|
||||||
}
|
}
|
||||||
|
@ -3159,9 +3158,11 @@ sub get_best_parent($$$;@)
|
||||||
WARN "Best common parent for \"$svol->{PRINT}\" is not accessible within target $target_incremental_resolve \"$resolve_droot->{PRINT}\", ignoring: " . join(", ", map('"' . _fs_path($_) . '"',@filtered_nodes));
|
WARN "Best common parent for \"$svol->{PRINT}\" is not accessible within target $target_incremental_resolve \"$resolve_droot->{PRINT}\", ignoring: " . join(", ", map('"' . _fs_path($_) . '"',@filtered_nodes));
|
||||||
}
|
}
|
||||||
|
|
||||||
if($parent) {
|
if(scalar @resolved) {
|
||||||
DEBUG "Resolved best common parent: " . $parent->{PRINT};
|
DEBUG "Resolved best common parent (" . (scalar @resolved) . " total): " . $resolved[0][0]->{PRINT};
|
||||||
return ($parent, $target_node);
|
my $parent = shift @resolved;
|
||||||
|
$$clone_src = \@resolved if($clone_src);
|
||||||
|
return ($parent->[0], $parent->[1]->{node});
|
||||||
} else {
|
} else {
|
||||||
DEBUG("No common parents of \"$svol->{PRINT}\" found in src=\"$resolve_sroot->{PRINT}/\", target=\"$resolve_droot->{PRINT}/\"");
|
DEBUG("No common parents of \"$svol->{PRINT}\" found in src=\"$resolve_sroot->{PRINT}/\", target=\"$resolve_droot->{PRINT}/\"");
|
||||||
return undef;
|
return undef;
|
||||||
|
|
Loading…
Reference in New Issue