If we're dumping the file list (i.e. verbose > 3), mention the uid and/or
[rsync/rsync.git] / flist.c
diff --git a/flist.c b/flist.c
index f9c0f6e..22f688d 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -31,6 +31,7 @@ extern struct stats stats;
 
 extern int verbose;
 extern int do_progress;
+extern int am_root;
 extern int am_server;
 extern int always_checksum;
 extern int module_id;
@@ -766,13 +767,12 @@ struct file_struct *make_file(char *fname, int exclude_level)
                return NULL;
        }
 
-       if (one_file_system && st.st_dev != filesystem_dev) {
-               /* We allow a directory though to preserve the mount point.
-                * However, flag it so that we don't recurse. */
-               if (!S_ISDIR(st.st_mode))
-                       return NULL;
+       /* We only care about directories because we need to avoid recursing
+        * into a mount-point directory, not to avoid copying a symlinked
+        * file if -L (or similar) was specified. */
+       if (one_file_system && st.st_dev != filesystem_dev
+           && S_ISDIR(st.st_mode))
                flags |= FLAG_MOUNT_POINT;
-       }
 
        if (check_exclude_file(thisname, S_ISDIR(st.st_mode) != 0, exclude_level))
                return NULL;
@@ -1434,13 +1434,20 @@ static void clean_flist(struct file_list *flist, int strip_root, int no_dups)
                return;
 
        for (i = 0; i < flist->count; i++) {
-               rprintf(FINFO, "[%s] i=%d %s %s %s mode=0%o len=%.0f\n",
-                       who_am_i(), i,
-                       NS(flist->files[i]->basedir),
-                       NS(flist->files[i]->dirname),
-                       NS(flist->files[i]->basename),
-                       (int) flist->files[i]->mode,
-                       (double) flist->files[i]->length);
+               char uidbuf[16], gidbuf[16];
+               struct file_struct *file = flist->files[i];
+               if (am_root && preserve_uid)
+                       sprintf(uidbuf, " uid=%ld", (long)file->uid);
+               else
+                       *uidbuf = '\0';
+               if (preserve_gid)
+                       sprintf(gidbuf, " gid=%ld", (long)file->gid);
+               else
+                       *gidbuf = '\0';
+               rprintf(FINFO, "[%s] i=%d %s %s %s mode=0%o len=%.0f%s%s\n",
+                       who_am_i(), i, NS(file->basedir), NS(file->dirname),
+                       NS(file->basename), (int) file->mode,
+                       (double) file->length, uidbuf, gidbuf);
        }
 }