Brackup
view release on metacpan or search on metacpan
lib/Brackup/Restore.pm view on Meta::CPAN
$it->{Mode} ||= ($type eq 'd' ? $meta->{DefaultDirMode} : $meta->{DefaultFileMode});
$it->{UID} ||= $meta->{DefaultUID};
$it->{GID} ||= $meta->{DefaultGID};
warn " * restoring $path_escaped to $full_escaped\n" if $self->{verbose};
$self->_restore_link ($full, $it) if $type eq "l";
$self->_restore_directory($full, $it) if $type eq "d";
$self->_restore_fifo ($full, $it) if $type eq "p";
$self->_restore_file ($full, $it) if $type eq "f";
$self->_chown($full, $it, $type, $meta) if $it->{UID} || $it->{GID};
}
# clear chunk cached by _restore_file
delete $self->{_cached_dig};
delete $self->{_cached_dataref};
if ($restore_count) {
warn " * fixing stat info\n" if $self->{verbose};
$self->_exec_statinfo_updates;
warn " * done\n" if $self->{verbose};
lib/Brackup/Restore.pm view on Meta::CPAN
if (my $remote_group = $self->{_remote_group_map}->{$remote_gid}) {
my $local_gid = getgrnam($remote_group);
return $self->{_local_gid_map}->{$remote_gid} = $local_gid
if defined $local_gid;
}
# if remote group missing locally, fallback to $remote_gid
return $self->{_local_gid_map}->{$remote_gid} = $remote_gid;
}
sub _chown {
my ($self, $full, $it, $type, $meta) = @_;
my $uid = $self->_lookup_remote_uid($it->{UID}, $meta) if $it->{UID};
my $gid = $self->_lookup_remote_gid($it->{GID}, $meta) if $it->{GID};
if ($type eq 'l') {
if (! defined $self->{_lchown}) {
no strict 'subs';
$self->{_lchown} = eval { require Lchown } && Lchown::LCHOWN_AVAILABLE;
}
if ($self->{_lchown}) {
Lchown::lchown($uid, -1, $full) if defined $uid;
Lchown::lchown(-1, $gid, $full) if defined $gid;
}
} else {
# ignore errors, but change uid and gid separately to sidestep unprivileged failures
chown $uid, -1, $full if defined $uid;
chown -1, $gid, $full if defined $gid;
}
}
sub _update_statinfo {
my ($self, $full, $it) = @_;
push @{ $self->{_stats_to_run} }, sub {
if (defined $it->{Mode}) {
chmod(oct $it->{Mode}, $full) or
die "Failed to change mode of $full: $!";
( run in 1.756 second using v1.01-cache-2.11-cpan-71847e10f99 )