57 lines
2.1 KiB
Diff
57 lines
2.1 KiB
Diff
From d236257299344207736086400960b0add2c1200b Mon Sep 17 00:00:00 2001
|
|
From: Ondrej Holy <oholy@redhat.com>
|
|
Date: Mon, 19 Oct 2015 13:48:46 +0200
|
|
Subject: [PATCH] google: Fail in-fs copy/move if it leads to display name loss
|
|
|
|
Complicated file name handling on google backend leads to display name
|
|
loss if in-fs copy and move operation is proceeded e.g. using Nautilus.
|
|
Proper fix will require larger changes for the whole platform. Therefore
|
|
fail the job preferably to avoid display name loss...
|
|
|
|
https://bugzilla.gnome.org/show_bug.cgi?id=755701
|
|
---
|
|
daemon/gvfsbackendgoogle.c | 20 ++++++++++++++++----
|
|
1 file changed, 16 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/daemon/gvfsbackendgoogle.c b/daemon/gvfsbackendgoogle.c
|
|
index 0acec9a..59e2dfe 100644
|
|
--- a/daemon/gvfsbackendgoogle.c
|
|
+++ b/daemon/gvfsbackendgoogle.c
|
|
@@ -1192,6 +1192,22 @@ g_vfs_backend_google_copy (GVfsBackend *_self,
|
|
}
|
|
}
|
|
|
|
+ etag = gdata_entry_get_etag (source_entry);
|
|
+ id = gdata_entry_get_id (source_entry);
|
|
+ summary = gdata_entry_get_summary (source_entry);
|
|
+
|
|
+ /* Fail the job if copy/move operation leads to display name loss.
|
|
+ * Use G_IO_ERROR_FAILED instead of _NOT_SUPPORTED to avoid r/w fallback.
|
|
+ * See: https://bugzilla.gnome.org/show_bug.cgi?id=755701 */
|
|
+ if (g_strcmp0 (id, destination_basename) == 0)
|
|
+ {
|
|
+ g_vfs_job_failed_literal (G_VFS_JOB (job),
|
|
+ G_IO_ERROR,
|
|
+ G_IO_ERROR_FAILED,
|
|
+ _("Operation unsupported"));
|
|
+ goto out;
|
|
+ }
|
|
+
|
|
if (destination_not_directory)
|
|
{
|
|
g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY, _("The file is not a directory"));
|
|
@@ -1230,10 +1246,6 @@ g_vfs_backend_google_copy (GVfsBackend *_self,
|
|
}
|
|
}
|
|
|
|
- etag = gdata_entry_get_etag (source_entry);
|
|
- id = gdata_entry_get_id (source_entry);
|
|
- summary = gdata_entry_get_summary (source_entry);
|
|
-
|
|
source_entry_type = G_OBJECT_TYPE (source_entry);
|
|
dummy_source_entry = g_object_new (source_entry_type,
|
|
"etag", etag,
|
|
--
|
|
2.5.0
|
|
|