[gnome-builder] directory: don't enumerate non-native directories including FUSE
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] directory: don't enumerate non-native directories including FUSE
- Date: Wed, 1 Apr 2015 21:21:52 +0000 (UTC)
commit e6c6b81d31bbbfde4632afe66425b2cdc3bc8aea
Author: Christian Hergert <christian hergert me>
Date: Wed Apr 1 14:21:30 2015 -0700
directory: don't enumerate non-native directories including FUSE
Unless the toplevel directory is also non-native, do not try to enumerate
children of non-native paths. This could happen in an SSHFS situation,
which could have heavy costs associated with enumerating children. We will
still enumerate those children if the top-level directory provided is
non-native.
libide/tasks/ide-load-directory-task.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
---
diff --git a/libide/tasks/ide-load-directory-task.c b/libide/tasks/ide-load-directory-task.c
index e697479..0cc04e9 100644
--- a/libide/tasks/ide-load-directory-task.c
+++ b/libide/tasks/ide-load-directory-task.c
@@ -37,6 +37,7 @@ typedef struct
int io_priority;
gsize max_files;
gsize current_files;
+ guint top_is_native : 1;
} IdeLoadDirectoryTask;
static gboolean gSpecialDirsInit;
@@ -177,6 +178,15 @@ ide_load_directory_task_load_directory (IdeLoadDirectoryTask *self,
}
/*
+ * If this directory is non-native (including SSHFS FUSE mounts), don't try
+ * to enumerate the children. However, it is okay to recurse if the top-level
+ * directory is also non-native. This could easily happen in a situation like
+ * sshfs to your server with HTML files.
+ */
+ if (self->top_is_native && !g_file_is_native (directory))
+ return TRUE;
+
+ /*
* If this is a special directory (.git, Music, Pictures, etc), ignore it.
*/
if (is_special_directory (directory))
@@ -425,6 +435,7 @@ ide_load_directory_task_new (gpointer source_object,
state->io_priority = io_priority;
state->max_files = max_files ?: DEFAULT_MAX_FILES;
state->current_files = 0;
+ state->top_is_native = g_file_is_native (directory);
g_task_set_task_data (task, state, ide_load_directory_task_free);
g_task_run_in_thread (task, ide_load_directory_task_worker);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]