mirror of https://github.com/digint/btrbk
btrbk: bugfix: raw targets: correctly handle multiple backups in same target directory
parent
eabdba482e
commit
7326b9816c
|
@ -1,5 +1,7 @@
|
||||||
btrbk-current
|
btrbk-current
|
||||||
|
|
||||||
|
* Bugfix: raw targets: correctly handle multiple backups in same
|
||||||
|
target directory (close: #87).
|
||||||
* Use relative instead of absolute binary calls in btrbk-mail.
|
* Use relative instead of absolute binary calls in btrbk-mail.
|
||||||
|
|
||||||
btrbk-0.23.1
|
btrbk-0.23.1
|
||||||
|
|
19
btrbk
19
btrbk
|
@ -46,7 +46,7 @@ use Carp qw(confess);
|
||||||
use Getopt::Long qw(GetOptions);
|
use Getopt::Long qw(GetOptions);
|
||||||
use Time::Local qw( timelocal timegm timegm_nocheck );
|
use Time::Local qw( timelocal timegm timegm_nocheck );
|
||||||
|
|
||||||
our $VERSION = '0.23.1';
|
our $VERSION = '0.23.2-dev';
|
||||||
our $AUTHOR = 'Axel Burri <axel@tty0.ch>';
|
our $AUTHOR = 'Axel Burri <axel@tty0.ch>';
|
||||||
our $PROJECT_HOME = '<http://digint.ch/btrbk/>';
|
our $PROJECT_HOME = '<http://digint.ch/btrbk/>';
|
||||||
|
|
||||||
|
@ -4219,6 +4219,7 @@ MAIN:
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $snapshot_basename = config_key($svol, "snapshot_name") // die;
|
||||||
my %child_uuid_list;
|
my %child_uuid_list;
|
||||||
foreach (split("\n", $ret))
|
foreach (split("\n", $ret))
|
||||||
{
|
{
|
||||||
|
@ -4231,20 +4232,28 @@ MAIN:
|
||||||
ABORTED($droot, "Unexpected result from 'find': file \"$file\" is not under \"$droot->{PATH}\"");
|
ABORTED($droot, "Unexpected result from 'find': file \"$file\" is not under \"$droot->{PATH}\"");
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
my $snapshot_basename = config_key($svol, "snapshot_name") // die;
|
|
||||||
|
|
||||||
# Set btrfs subvolume information (received_uuid, parent_uuid) from filename info.
|
# Set btrfs subvolume information (received_uuid, parent_uuid) from filename info.
|
||||||
#
|
#
|
||||||
# NOTE: remote_parent_uuid in BTRBK_RAW is the "parent of the source subvolume", NOT the
|
# NOTE: remote_parent_uuid in BTRBK_RAW is the "parent of the source subvolume", NOT the
|
||||||
# "parent of the received subvolume".
|
# "parent of the received subvolume".
|
||||||
my $subvol = vinfo_child($droot, $file);
|
my $subvol = vinfo_child($droot, $file);
|
||||||
unless(vinfo_inject_child($droot, $subvol, { TARGET_TYPE => 'raw' }) &&
|
unless(vinfo_inject_child($droot, $subvol, { TARGET_TYPE => 'raw' }))
|
||||||
defined($subvol->{node}{BTRBK_RAW}) &&
|
|
||||||
($snapshot_basename eq $subvol->{node}{BTRBK_BASENAME}))
|
|
||||||
{
|
{
|
||||||
DEBUG "Skipping file (filename scheme mismatch): \"$file\"";
|
DEBUG "Skipping file (filename scheme mismatch): \"$file\"";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
unless(defined($subvol->{node}{BTRBK_RAW}) &&
|
||||||
|
($snapshot_basename eq $subvol->{node}{BTRBK_BASENAME}))
|
||||||
|
{
|
||||||
|
# vinfo_inject_child() pushes all "valid" subvols to $droot->{SUBVOL_LIST},
|
||||||
|
# remove the non-matching ones again.
|
||||||
|
# If we don't remove them from the list, they will also
|
||||||
|
# be taken into account for incremental backups!
|
||||||
|
pop @{$droot->{SUBVOL_LIST}};
|
||||||
|
DEBUG "Skipping file (base name != \"$snapshot_basename\"): \"$file\"";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
# incomplete raw fakes get same semantics as real subvolumes (readonly=0, received_uuid='-')
|
# incomplete raw fakes get same semantics as real subvolumes (readonly=0, received_uuid='-')
|
||||||
$subvol->{node}{received_uuid} = ($subvol->{node}{BTRBK_RAW}->{incomplete} ? '-' : $subvol->{node}{BTRBK_RAW}->{received_uuid});
|
$subvol->{node}{received_uuid} = ($subvol->{node}{BTRBK_RAW}->{incomplete} ? '-' : $subvol->{node}{BTRBK_RAW}->{received_uuid});
|
||||||
|
|
Loading…
Reference in New Issue