summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/App/BorgRestore.pm13
-rwxr-xr-xscript/borg-restore.pl5
-rw-r--r--t/07_cache_contains_data.t22
3 files changed, 40 insertions, 0 deletions
diff --git a/lib/App/BorgRestore.pm b/lib/App/BorgRestore.pm
index edc009c..d96b957 100644
--- a/lib/App/BorgRestore.pm
+++ b/lib/App/BorgRestore.pm
@@ -235,6 +235,19 @@ method get_all_archives() {
return \@ret;
}
+=head3 cache_contains_data
+
+ if ($app->cache_contains_data()) { ... }
+
+Returns 1 if the cache contains any archive data, 0 otherwise.
+
+=cut
+
+method cache_contains_data() {
+ my $existing_archives = $self->{db}->get_archive_names();
+ return @{$existing_archives}+0 > 0 ? 1 : 0;
+}
+
=head3 select_archive_timespec
my $archive = $app->select_archive_timespec($archives, $timespec);
diff --git a/script/borg-restore.pl b/script/borg-restore.pl
index d6e97e5..f58ba33 100755
--- a/script/borg-restore.pl
+++ b/script/borg-restore.pl
@@ -235,6 +235,11 @@ sub main {
return 0;
}
+ if (!$app->cache_contains_data()) {
+ $opts{"adhoc"} = 1;
+ $log->warning("Cache is empty. --adhoc has been enabled for you automatically");
+ }
+
my @paths = @ARGV;
my $path;
diff --git a/t/07_cache_contains_data.t b/t/07_cache_contains_data.t
new file mode 100644
index 0000000..2187ab0
--- /dev/null
+++ b/t/07_cache_contains_data.t
@@ -0,0 +1,22 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Test::MockObject;
+use Test::Differences;
+
+use App::BorgRestore;
+
+my $db = Test::MockObject->new();
+my $app = App::BorgRestore->new_no_defaults({db => $db});
+
+$db->mock('get_archive_names', sub {return [qw(a b c)];});
+is($app->cache_contains_data(), 1);
+
+$db->mock('get_archive_names', sub {return [];});
+is($app->cache_contains_data(), 0);
+
+$db->mock('get_archive_names', sub {return [qw(a)];});
+is($app->cache_contains_data(), 1);
+
+done_testing;