[gnome-builder/gnome-builder-3-24] flatpak: do breadth first search



commit 269d9aefc250e8c9d54b72edda3791999577f8d4
Author: Christian Hergert <chergert redhat com>
Date:   Sat Apr 8 15:39:51 2017 -0700

    flatpak: do breadth first search
    
    We want to exhaust the current enumerator before recursing into any
    child directories. This also helps prioritize directories closer to the
    root of the project tree.

 .../flatpak/gbp-flatpak-build-system-discovery.c   |   21 +++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)
---
diff --git a/plugins/flatpak/gbp-flatpak-build-system-discovery.c 
b/plugins/flatpak/gbp-flatpak-build-system-discovery.c
index f7ac007..ca4622a 100644
--- a/plugins/flatpak/gbp-flatpak-build-system-discovery.c
+++ b/plugins/flatpak/gbp-flatpak-build-system-discovery.c
@@ -42,6 +42,7 @@ gbp_flatpak_build_system_discovery_find_manifests (GFile        *directory,
                                                    GCancellable *cancellable)
 {
   g_autoptr(GFileEnumerator) enumerator = NULL;
+  g_autoptr(GPtrArray) child_dirs = NULL;
   gpointer infoptr;
 
   g_assert (G_IS_FILE (directory));
@@ -77,7 +78,12 @@ gbp_flatpak_build_system_discovery_find_manifests (GFile        *directory,
             continue;
 
           if (depth < DISCOVERY_MAX_DEPTH - 1)
-            gbp_flatpak_build_system_discovery_find_manifests (file, results, depth + 1, cancellable);
+            {
+              if (child_dirs == NULL)
+                child_dirs = g_ptr_array_new_with_free_func (g_object_unref);
+              g_ptr_array_add (child_dirs, g_steal_pointer (&file));
+              continue;
+            }
         }
 
       g_regex_match (filename_regex, name, 0, &match_info);
@@ -86,6 +92,19 @@ gbp_flatpak_build_system_discovery_find_manifests (GFile        *directory,
 
       g_ptr_array_add (results, g_steal_pointer (&file));
     }
+
+  if (child_dirs != NULL)
+    {
+      for (guint i = 0; i < child_dirs->len; i++)
+        {
+          GFile *file = g_ptr_array_index (child_dirs, i);
+
+          if (g_cancellable_is_cancelled (cancellable))
+            return;
+
+          gbp_flatpak_build_system_discovery_find_manifests (file, results, depth + 1, cancellable);
+        }
+    }
 }
 
 static gchar *


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