Bugfix in size estimates for filtered tarfile outputs.
[cumulus.git] / restore.pl
index e7bb5ff..53b48dc 100755 (executable)
@@ -166,7 +166,7 @@ sub iterate_objects {
         next if $obj eq "";
         if ($obj =~ /^@(\S+)$/) {
             my $indirect = load_ref($1);
-            iterate_objects($callback, $arg, $1, $recursion_level + 1);
+            iterate_objects($callback, $arg, $indirect, $recursion_level + 1);
         } else {
             &$callback($arg, $obj);
         }
@@ -266,13 +266,20 @@ sub process_file {
     # Restore mode, ownership, and any other metadata for the file.  This is
     # split out from the code above since the code is the same regardless of
     # file type.
-    my $atime = $info{atime} || time();
     my $mtime = $info{mtime} || time();
-    utime $atime, $mtime, $dest
-        or warn "Unable to update atime/mtime for $dest";
-
-    my $uid = $info{user} || -1;
-    my $gid = $info{group} || -1;
+    utime time(), $mtime, $dest
+        or warn "Unable to update mtime for $dest";
+
+    my $uid = -1;
+    my $gid = -1;
+    if (defined $info{user}) {
+        my @items = split /\s/, $info{user};
+        $uid = $items[0] + 0 if exists $items[0];
+    }
+    if (defined $info{group}) {
+        my @items = split /\s/, $info{group};
+        $gid = $items[0] + 0 if exists $items[0];
+    }
     chown $uid, $gid, $dest
         or warn "Unable to change ownership for $dest";
 
@@ -371,8 +378,8 @@ print "Source directory: $OBJECT_DIR\n" if $VERBOSE;
 open DESCRIPTOR, "<", $descriptor
     or die "Cannot open backup descriptor file $descriptor: $!";
 my $line = <DESCRIPTOR>;
-if ($line !~ m/^root: (\S+)$/) {
-    die "Expected 'root:' specification in backup descriptor file";
+if ($line !~ m/^Root: (\S+)$/) {
+    die "Expected 'Root:' specification in backup descriptor file";
 }
 my $root = $1;
 close DESCRIPTOR;