App-SimpleBackuper

 view release on metacpan or  search on metacpan

lib/App/SimpleBackuper/Info.pm  view on Meta::CPAN

package App::SimpleBackuper;

use strict;
use warnings;
use Time::HiRes qw(time);
use App::SimpleBackuper::_print_table;
use App::SimpleBackuper::_format;

sub Info {
	my($options, $state) = @_;
	
	my($backups, $files, $uids_gids) = @{ $state->{db} }{qw(backups files uids_gids)};
	
	my $parent_file;
	my @path = split(/\//, $options->{path} // '/', -1);
	pop @path if @path and $path[-1] eq '';
	
	my $file_id = 0;
	$state->{profile}->{walk2path} -= time;
	foreach my $path_node (@path) {
		my $file = $files->find_by_parent_id_name($file_id, $path_node);
		return {error => 'NOT_FOUND'} if ! $file;
		$file_id = $file->{id};
		$parent_file = $file;
	}
	$state->{profile}->{walk2path} += time;
	
	my @versions;
	foreach my $version (@{ $parent_file->{versions} }) {
		my @backups = map {$backups->find_row({id => $_})} $version->{backup_id_min} .. $version->{backup_id_max};
		@backups = map {$_->{name}} @backups;
		my $user = $uids_gids->find_row({id => $version->{uid}});
		$user = $user->{name};
		my $group = $uids_gids->find_row({id => $version->{gid}});
		$group = $group->{name};
		push @versions, {
			backups	=> \@backups,
			user	=> $user,
			group	=> $group,
			size	=> fmt_weight($version->{size}),
			mode	=> $version->{mode},
			mtime	=> fmt_datetime($version->{mtime}),
		};
	}
	
	my @files = map {@$_} $files->find_all({ parent_id => $parent_file->{id} });
	@files = sort {$a->{name} cmp $b->{name}} @files;
	my @subfiles;
	foreach my $file (@files) {
		my $oldest_backup = $backups->find_row({id => $file->{versions}->[-1]->{backup_id_max} });
		$oldest_backup = $oldest_backup->{name};
		my $newest_backup = $backups->find_row({id => $file->{versions}->[0]->{backup_id_max} });
		$newest_backup = $newest_backup->{name};
		push @subfiles, {
			name			=> ($file->{name} eq '' ? '/' : $file->{name}),
			oldest_backup	=> $oldest_backup // '-',
			newest_backup	=> $newest_backup // '-',
		};
	}
	
	return {versions => \@versions, subfiles => \@subfiles};
}

1;



( run in 0.810 second using v1.01-cache-2.11-cpan-39bf76dae61 )