[merge] fops
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Wed, 13 May 2015 15:08:22 +0200
branchfops
changeset 132 2e92e720cc2d
parent 123 91b6adaef325 (diff)
parent 114 4ad052c5c41e (current diff)
[merge]
--- 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;
--- 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")