nautilus r13987 - in trunk: . libnautilus-private



Author: alexl
Date: Fri Mar 28 11:53:29 2008
New Revision: 13987
URL: http://svn.gnome.org/viewvc/nautilus?rev=13987&view=rev

Log:
2008-03-28  Alexander Larsson  <alexl redhat com>

        * libnautilus-private/nautilus-file-operations.c:
        (copy_move_file):
	During the merge part of a recursive move/copy always
	disable same_fs to make sure we transcode filenames
	correctly, as the target directory may be on another
	filesystem.



Modified:
   trunk/ChangeLog
   trunk/libnautilus-private/nautilus-file-operations.c

Modified: trunk/libnautilus-private/nautilus-file-operations.c
==============================================================================
--- trunk/libnautilus-private/nautilus-file-operations.c	(original)
+++ trunk/libnautilus-private/nautilus-file-operations.c	Fri Mar 28 11:53:29 2008
@@ -3222,7 +3222,7 @@
 	char *primary, *secondary, *details;
 	int response;
 	ProgressData pdata;
-	gboolean would_recurse;
+	gboolean would_recurse, is_merge;
 	CommonJob *job;
 	gboolean res;
 	int unique_name_nr;
@@ -3391,6 +3391,7 @@
 	/* Needs to recurse */
 	else if (IS_IO_ERROR (error, WOULD_RECURSE) ||
 		 IS_IO_ERROR (error, WOULD_MERGE)) {
+		is_merge = error->code == G_IO_ERROR_WOULD_MERGE;
 		would_recurse = error->code == G_IO_ERROR_WOULD_RECURSE;
 		g_error_free (error);
 
@@ -3443,6 +3444,15 @@
 			nautilus_file_changes_queue_file_removed (dest);
 		}
 
+		if (is_merge) {
+			/* On merge we now write in the target directory, which may not
+			   be in the same directory as the source, even if the parent is
+			   (if the merged directory is a mountpoint). This could cause
+			   problems as we then don't transcode filenames.
+			   We just set same_fs to FALSE which is safe but a bit slower. */
+			same_fs = FALSE;
+		}
+		
 		copy_move_directory (copy_job, src, dest, same_fs,
 				     would_recurse,
 				     source_info, transfer_info,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]