Various minor tweaks to the metadata format.
authorMichael Vrable <mvrable@cs.ucsd.edu>
Mon, 14 May 2007 20:15:40 +0000 (13:15 -0700)
committerMichael Vrable <mvrable@turin.ucsd.edu>
Mon, 14 May 2007 20:15:40 +0000 (13:15 -0700)
restore.pl
scandir.cc

index e7bb5ff..be94078 100755 (executable)
@@ -266,13 +266,14 @@ 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";
+    utime time(), $mtime, $dest
+        or warn "Unable to update mtime for $dest";
 
-    my $uid = $info{user} || -1;
-    my $gid = $info{group} || -1;
+    my $uid = -1;
+    my $gid = -1;
+    $uid = $info{user} + 0 if defined $info{user};
+    $gid = $info{group} + 0 if defined $info{group};
     chown $uid, $gid, $dest
         or warn "Unable to change ownership for $dest";
 
@@ -371,8 +372,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;
index 29cbc44..0990bda 100644 (file)
@@ -6,6 +6,8 @@
 #include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <pwd.h>
+#include <grp.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
@@ -187,12 +189,20 @@ void scanfile(const string& path)
     metadata << "name: " << uri_encode(path) << "\n";
 
     file_info["mode"] = encode_int(stat_buf.st_mode & 07777);
-    file_info["atime"] = encode_int(stat_buf.st_atime);
-    file_info["ctime"] = encode_int(stat_buf.st_ctime);
     file_info["mtime"] = encode_int(stat_buf.st_mtime);
     file_info["user"] = encode_int(stat_buf.st_uid);
     file_info["group"] = encode_int(stat_buf.st_gid);
 
+    struct passwd *pwd = getpwuid(stat_buf.st_uid);
+    if (pwd != NULL) {
+        file_info["user"] += " (" + uri_encode(pwd->pw_name) + ")";
+    }
+
+    struct group *grp = getgrgid(stat_buf.st_gid);
+    if (pwd != NULL) {
+        file_info["group"] += " (" + uri_encode(grp->gr_name) + ")";
+    }
+
     char inode_type;
 
     switch (stat_buf.st_mode & S_IFMT) {
@@ -346,13 +356,13 @@ int main(int argc, char *argv[])
     root->checksum();
 
     segment_list.insert(root->get_ref().get_segment());
-    descriptor << "root: " << root->get_ref().to_string() << "\n";
+    descriptor << "Root: " << root->get_ref().to_string() << "\n";
     strftime(desc_buf, sizeof(desc_buf), "%Y-%m-%d %H:%M:%S %z", &time_buf);
-    descriptor << "time: " << desc_buf << "\n";
+    descriptor << "Date: " << desc_buf << "\n";
 
     delete root;
 
-    descriptor << "segments:\n";
+    descriptor << "Segments:\n";
     for (std::set<string>::iterator i = segment_list.begin();
          i != segment_list.end(); ++i) {
         descriptor << "    " << *i << "\n";