+sub command_restore {
+ my $self = shift;
+
+ my $level = $self->{level}[0];
+ my $device = $self->{device};
+ $device = $self->{directory} if defined $self->{directory};
+ $device =~ s,^/,,;
+ my $current_snapshot = $self->zfs_build_snapshotname($device);
+ $self->{'snapshot'} = $self->zfs_build_snapshotname($device, $level);
+
+ my @cmd = ();
+
+ if ($self->{pfexec_cmd}) {
+ push @cmd, $self->{pfexec_cmd};
+ }
+ push @cmd, $self->{zfs_path};
+ push @cmd, "recv";
+ push @cmd, $device;
+
+ debug("cmd:" . join(" ", @cmd));
+ system @cmd;
+
+ @cmd = ();
+ if ($self->{pfexec_cmd}) {
+ push @cmd, $self->{pfexec_cmd};
+ }
+ push @cmd, $self->{zfs_path};
+ push @cmd, "rename";
+ push @cmd, "$device\@$current_snapshot";
+ push @cmd, "$device\@$self->{'snapshot'}";
+
+ debug("cmd:" . join(" ", @cmd));
+ system @cmd;
+}