From 636b361a019ab4e4b4f3960d2aeca33b7be7a8cb Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Sun, 28 May 2017 20:42:57 +0200 Subject: Add --adhoc Signed-off-by: Florian Pritz --- lib/App/BorgRestore/Borg.pm | 23 +++++++++++++++++++++++ lib/App/BorgRestore/Helper.pm | 9 +++++++++ 2 files changed, 32 insertions(+) (limited to 'lib/App/BorgRestore') diff --git a/lib/App/BorgRestore/Borg.pm b/lib/App/BorgRestore/Borg.pm index c1774d7..660eb8e 100644 --- a/lib/App/BorgRestore/Borg.pm +++ b/lib/App/BorgRestore/Borg.pm @@ -3,6 +3,8 @@ use v5.10; use warnings; use strict; +use App::BorgRestore::Helper; + use Function::Parameters; use IPC::Run qw(run start new_chunker); use Log::Any qw($log); @@ -31,6 +33,27 @@ method borg_list() { return \@archives; } +method borg_list_time() { + my @archives; + + $log->debug("Getting archive list"); + run [qw(borg list), $self->{borg_repo}], '>', \my $output or die "borg list returned $?"; + + for (split/^/, $output) { + if (m/^([^\s]+)\s+(.+)$/) { + my $time = App::BorgRestore::Helper::parse_borg_time($2); + if ($time) { + push @archives, { + "archive" => $1, + "modification_time" => $time, + }; + } + } + } + + return \@archives; +} + method restore($components_to_strip, $archive_name, $path) { $log->debugf("Restoring '%s' from archive %s, stripping %d components of the path", $path, $archive_name, $components_to_strip); system(qw(borg extract -v --strip-components), $components_to_strip, $self->{borg_repo}."::".$archive_name, $path); diff --git a/lib/App/BorgRestore/Helper.pm b/lib/App/BorgRestore/Helper.pm index 976ef54..ec76926 100644 --- a/lib/App/BorgRestore/Helper.pm +++ b/lib/App/BorgRestore/Helper.pm @@ -19,6 +19,15 @@ fun format_timestamp($timestamp) { return POSIX::strftime "%a. %F %H:%M:%S %z", localtime $timestamp; } +# XXX: this also exists in BorgRestore::_handle_added_archives() +fun parse_borg_time($string) { + if ($string =~ m/^.{4} (?....)-(?..)-(?..) (?..):(?..):(?..)$/) { + my $time = POSIX::mktime($+{second},$+{minute},$+{hour},$+{day},$+{month}-1,$+{year}-1900); + return $time; + } + return; +} + 1; __END__ -- cgit v1.2.3-24-g4f1b