Compare commits

...

3 Commits

Author SHA1 Message Date
Stéphane Lesimple
0264500d22 fix: bad indent when --indent was != 3 (fixes #19) 2024-04-14 12:43:03 +02:00
Stéphane Lesimple
99a6cfdfd1 chore: perltidy 2024-04-14 12:36:34 +02:00
Stéphane Lesimple
f379aeb42f fix: support names with spaces (fixes #20) 2024-04-14 12:36:34 +02:00

View File

@ -213,7 +213,7 @@ sub link2real {
sub pretty_print {
my ($raw, $mode) = @_;
=cut
=comment
debug("pretty_print(@_);");
my @c = caller(0);
debug(Dumper(\@c));
@ -285,20 +285,20 @@ sub compute_allocatable_for_profile {
if ($profile eq 'raid1') {
last if ($devBytes{$sk[1]} <= $sliceSize); # out of space
$unallocFree += $sliceSize;
$unallocFree += $sliceSize;
$devBytes{$sk[0]} -= $sliceSize;
$devBytes{$sk[1]} -= $sliceSize;
} ## end if ($profile eq 'raid1')
elsif ($profile eq 'raid1c3') {
last if ($devBytes{$sk[2]} <= $sliceSize); # out of space
$unallocFree += $sliceSize;
$unallocFree += $sliceSize;
$devBytes{$sk[0]} -= $sliceSize;
$devBytes{$sk[1]} -= $sliceSize;
$devBytes{$sk[2]} -= $sliceSize;
} ## end elsif ($profile eq 'raid1c3')
elsif ($profile eq 'raid1c4') {
last if ($devBytes{$sk[3]} <= $sliceSize); # out of space
$unallocFree += $sliceSize;
$unallocFree += $sliceSize;
$devBytes{$sk[0]} -= $sliceSize;
$devBytes{$sk[1]} -= $sliceSize;
$devBytes{$sk[2]} -= $sliceSize;
@ -306,7 +306,7 @@ sub compute_allocatable_for_profile {
} ## end elsif ($profile eq 'raid1c4')
elsif ($profile eq 'raid10') {
last if ($devBytes{$sk[3]} <= $sliceSize); # out of space
$unallocFree += $sliceSize * 2;
$unallocFree += $sliceSize * 2;
$devBytes{$sk[0]} -= $sliceSize;
$devBytes{$sk[1]} -= $sliceSize;
$devBytes{$sk[2]} -= $sliceSize;
@ -394,7 +394,7 @@ if (defined $opt_snap_max_used) {
if ($opt_color eq 'never' || ($opt_color eq 'auto' && !-t 1)) { ## no critic(InputOutput::ProhibitInteractiveTest)
$ENV{'ANSI_COLORS_DISABLED'} = 1;
}
if (!$opt_wide && !-t 1) { ## no critic(InputOutput::ProhibitInteractiveTest)
if (!$opt_wide && !-t 1) { ## no critic(InputOutput::ProhibitInteractiveTest)
# wide if STDOUT is NOT a term
$opt_wide = 1;
@ -413,7 +413,7 @@ if ($opt_max_name_len > 0 && $opt_max_name_len < 4) {
$opt_max_name_len = 4;
}
$opt_indent //= 4;
$opt_indent //= 3;
if (defined $opt_profile && $opt_profile !~ /^(raid([0156]|1c[34]|10)|single|dup)$/) {
print STDERR "FATAL: invalid argument for --profile\n";
@ -505,7 +505,7 @@ foreach my $mp (@mountPoints) {
# get filesystems list
=cut
=comment
# btrfs filesystem show
Label: 'beurre' uuid: 010705d8-430f-4f5b-9315-12df40677e97
Total devices 4 FS bytes used 18.23MiB
@ -607,14 +607,14 @@ my %vol;
foreach my $fuuid (keys %filesystems) {
my $mp = $filesystems{$fuuid}{'mountpoint'};
defined $mp or next;
-d $mp or next;
-d $mp or next;
$cmd = run_cmd(silent_stderr => 1, cmd => [qw{ btrfs filesystem usage --raw }, $mp]);
if (!@{$cmd->{stdout}} || $cmd->{status}) {
$cmd = run_cmd(fatal => 1, cmd => [qw{ btrfs filesystem usage }, $mp]);
}
my ($seenUnallocated, %devFree, $profile, $mprofile);
my ($total, $fssize, $used, $freeEstimated) = (0, 0, 0, 0);
my ($total, $fssize, $used, $freeEstimated) = (0, 0, 0, 0);
foreach (@{$cmd->{stdout}}) {
if (/Device\s+size:\s*(\S+)/) {
$fssize = human2raw($1);
@ -718,8 +718,8 @@ foreach my $fuuid (keys %filesystems) {
next;
}
# ID 257 gen 17 cgen 11 parent 5 top level 5 parent_uuid - received_uuid - uuid 9bc4..fd75 path sub1
$vol{$fuuid}{$vuuid}{puuid} = PARENT_UUID_NONE; # old btrfsprogs don't have puuid, set a sane default
# ID 257 gen 17 cgen 11 parent 5 top level 5 parent_uuid - received_uuid - uuid 9bc4..fd75 path sub1 with spaces
$vol{$fuuid}{$vuuid}{puuid} = PARENT_UUID_NONE; # old btrfsprogs don't have puuid, set a sane default
/(\s|^)ID (\d+)/ and $vol{$fuuid}{$vuuid}{id} = $2;
/(\s|^)gen (\d+)/ and $vol{$fuuid}{$vuuid}{gen} = $2;
/(\s|^)cgen (\d+)/ and $vol{$fuuid}{$vuuid}{cgen} = $2;
@ -727,24 +727,24 @@ foreach my $fuuid (keys %filesystems) {
/(\s|^)top level (\d+)/ and $vol{$fuuid}{$vuuid}{top} = $2;
/(\s|^)parent_uuid (\S+)/ and $vol{$fuuid}{$vuuid}{puuid} = $2;
/(\s|^)received_uuid (\S+)/ and $vol{$fuuid}{$vuuid}{ruuid} = $2;
/(\s|^)path (\S+)/ and $vol{$fuuid}{$vuuid}{path} = $2;
/(\s|^)path (.+)/ and $vol{$fuuid}{$vuuid}{path} = $2;
$vol{$fuuid}{$vuuid}{path} =~ s/^<FS_TREE>\///;
$vol{$fuuid}{$vuuid}{type} = 'subvol'; # by default, will be overriden below if applicable
$vol{$fuuid}{$vuuid}{mode} = 'rw'; # by default, will be overriden below if applicable
$vol{$fuuid}{$vuuid}{type} = 'subvol'; # by default, will be overriden below if applicable
$vol{$fuuid}{$vuuid}{mode} = 'rw'; # by default, will be overriden below if applicable
$vol{$fuuid}{$vuuid}{rfer} = 0;
$vol{$fuuid}{$vuuid}{excl} = 0;
$vol{$fuuid}{$vuuid}{mp} = $filesystems{$fuuid}{volmp}{$vol{$fuuid}{$vuuid}{id}};
$vol{$fuuid}{$vuuid}{mp} = $filesystems{$fuuid}{volmp}{$vol{$fuuid}{$vuuid}{id}};
} ## end foreach (@{$cmd->{stdout}})
# now, list only snapshots, we also get their otime for free
$cmd = run_cmd(cmd => [qw{ btrfs subvolume list -us }, $mp]);
# ID 694 gen 30002591 cgen 30002589 top level 5 otime 2022-01-02 14:37:14 path test-backup2
# ID 694 gen 30002591 cgen 30002589 top level 5 otime 2022-01-02 14:37:14 path test backup2 with spaces
foreach (@{$cmd->{stdout}}) {
my ($found, $otime);
/(\s|^)uuid ([0-9a-f-]+)/ and exists $vol{$fuuid}{$2} and $found = $2;
/(\s|^)ID ([0-9]+)/ and exists $vol{$fuuid}{$2} and $found = $2;
/(\s|^)otime (\S+ \S+)/ and $otime = $2;
/(\s|^)otime (\S+ \S+)/ and $otime = $2;
if (defined $found) {
if ($opt_hide_snapshots) {
delete $vol{$fuuid}{$found};
@ -769,7 +769,7 @@ foreach my $fuuid (keys %filesystems) {
# v3.18 (no --raw)
=cut
=comment
WARNING: Qgroup data inconsistent, rescan recommended
qgroupid rfer excl max_rfer max_excl parent child
-------- ---- ---- -------- -------- ------ -----
@ -779,7 +779,7 @@ qgroupid rfer excl max_rfer max_excl parent child
# v3.19+ has --raw, and additionally, since v4.1, we get 'none' instead of 0:
=cut
=comment
qgroupid rfer excl max_rfer max_excl parent child
-------- ---- ---- -------- -------- ------ -----
0/5 9848498 8015121 none none --- ---
@ -789,7 +789,7 @@ qgroupid rfer excl max_rfer max_excl parent child
foreach my $fuuid (keys %filesystems) {
my $mp = $filesystems{$fuuid}{'mountpoint'};
defined $mp or next;
-d $mp or next;
-d $mp or next;
next if $opt_free_space;
$cmd = run_cmd(silent_stderr => 1, cmd => [qw{ btrfs quota rescan -s }, $mp]);
@ -931,7 +931,7 @@ foreach my $fuuid (sort keys %filesystems) {
foreach my $orphan (sort @orphans) {
my $no_known_parent = 1;
foreach my $potential_parent (@orphans) {
next if $orphan eq $potential_parent; # skip myself
next if $orphan eq $potential_parent; # skip myself
$no_known_parent = 0 if ($potential_parent eq $vol{$fuuid}{$orphan}{puuid});
}
debug(">>> orphan loop on $orphan, no known parent: $no_known_parent");
@ -1002,7 +1002,7 @@ sub longest {
# loop through all the items
foreach my $item (@orderedAll) {
my $len = ($useDepth ? (($item->{depth} || 0) * 3) : 0);
my $len = ($useDepth ? (($item->{depth} || 0) * $opt_indent) : 0);
$len += length($item->{$key} || '');
$longest = $len if $len > $longest;
}