# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1431522502 -7200 # Node ID 2e92e720cc2d488c96750b80eca0bb2a4c2653ee # Parent 91b6adaef325d0c5588dd14696f2c5cec2829245# Parent 4ad052c5c41ea934c69ca8d71a669c3a9cc24eb5 [merge] diff -r 4ad052c5c41e -r 2e92e720cc2d Build.PL --- a/Build.PL Mon Jun 18 14:02:40 2012 +0200 +++ b/Build.PL Wed May 13 15:08:22 2015 +0200 @@ -13,5 +13,6 @@ "Fuse" => "0.09", "IO::Uncompress::Gunzip" => 0, "IO::Compress::Gzip" => 0, + "BlockDev" => 0, } )->create_build_script; diff -r 4ad052c5c41e -r 2e92e720cc2d bin/imager.save --- a/bin/imager.save Mon Jun 18 14:02:40 2012 +0200 +++ b/bin/imager.save Wed May 13 15:08:22 2015 +0200 @@ -6,7 +6,6 @@ use POSIX qw(strftime); use autodie qw(:all); use Digest::MD5 qw(md5_hex); -use File::Path qw(mkpath); use File::Basename; use File::Temp; use Sys::Hostname; @@ -14,6 +13,7 @@ use Hash::Util qw(lock_keys); use Getopt::Long; use Pod::Usage; +use Fops; use constant KiB => 1024; use constant MiB => 1024 * KiB; @@ -39,6 +39,7 @@ lock_keys(%o); my $NOW = time(); +my $FOPS; MAIN: { GetOptions( @@ -69,6 +70,8 @@ or pod2usage; my $dst = pop @ARGV; + $FOPS = Fops->new(native => $dst); + foreach my $src (@ARGV) { if (my $pid = fork()) { next; @@ -86,20 +89,21 @@ sub save { my ($src, $dst) = @_; - my $idx = "{DIR}/idx/{HOSTNAME}/{DEVICE}/"; - my $data = "{DIR}/data"; - my $info = "{DIR}/data/info"; + my $idx = "/idx/{HOSTNAME}/{DEVICE}/"; + my $data = "/data"; + my $info = "/data/info"; my $size; foreach ($idx, $data, $info) { - s/{DIR}/$dst/g; s/{HOSTNAME}/hostname/eg; s/{DEVICE}/get_devname($src)/eg; } $size = get_devsize($src); - -d $dst or die "$0: $dst: $!\n"; - mkpath([$data, $idx, $info]); + #-d $dst or die "$0: $dst: $!\n"; + $FOPS->stat("/") or die "$0: $dst: $!\n"; + $FOPS->is_dir("/") or die "$0: $dst: $!\n"; + $FOPS->mkpath($data, $idx, $info); my %index; $index{META} = { @@ -152,15 +156,15 @@ push @{ $index{BLOCKS} }, sprintf "%12d %s %s" => ($. - 1), $cs, $file; - if ( - not( -e "$data/$file" - or -e "$data/$file.gz" - or -e "$data/$file.x" - or -e "$data/$file.gz.x" - or -e "$data/$file.x.gz") + if (not( + $Fops->is_file("$data/$file"), + or $Fops->is_file("$data/$file.gz"), + or $Fops->is_file("$data/$file.x"), + or $Fops->is_file("$data/$file.gz.x"), + or $Fops->is_file("$data/$file.x.gz")) ) { - mkpath dirname("$data/$file"); + $FOPS->mkpath(dirname("$data/$file")); my $out = File::Temp->new( TEMPLATE => "tmp-XXXXXXX", DIR => dirname("$data/$file")