diff options
author | Richard Hughes <richard@hughsie.com> | 2014-06-23 12:26:23 +0100 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2014-06-23 12:26:23 +0100 |
commit | f298b97a35e18a20351d45d5d590ef52cca37e3a (patch) | |
tree | c487bfdb6d37fed2e34082f86e9c3e608a703bad | |
parent | 0d4093d2385d9ff8b67ddcc98aa4b80f7aa8eed9 (diff) | |
download | appstream-glib-f298b97a35e18a20351d45d5d590ef52cca37e3a.tar.gz |
appstream-builder: Add packages recursively when using --packages-dir
Fixes: https://github.com/hughsie/appstream-glib/issues/7
-rw-r--r-- | client/as-builder.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/client/as-builder.c b/client/as-builder.c index 0117bae..3509b11 100644 --- a/client/as-builder.c +++ b/client/as-builder.c @@ -31,6 +31,31 @@ #include "asb-utils.h" /** + * as_builder_search_path: + **/ +static gboolean +as_builder_search_path (GPtrArray *array, const gchar *path, GError **error) +{ + const gchar *filename; + _cleanup_dir_close_ GDir *dir = NULL; + + dir = g_dir_open (path, 0, error); + if (dir == NULL) + return FALSE; + while ((filename = g_dir_read_name (dir)) != NULL) { + _cleanup_free_ gchar *tmp = NULL; + tmp = g_build_filename (path, filename, NULL); + if (g_file_test (tmp, G_FILE_TEST_IS_DIR)) { + if (!as_builder_search_path (array, tmp, error)) + return FALSE; + } else { + g_ptr_array_add (array, g_strdup (tmp)); + } + } + return TRUE; +} + +/** * main: **/ int @@ -286,17 +311,11 @@ main (int argc, char **argv) /* scan each package */ packages = g_ptr_array_new_with_free_func (g_free); if (argc == 1) { - dir = g_dir_open (packages_dir, 0, &error); - if (dir == NULL) { + if (!as_builder_search_path (packages, packages_dir, &error)) { /* TRANSLATORS: error message */ g_warning (_("failed to open packages: %s"), error->message); goto out; } - while ((filename = g_dir_read_name (dir)) != NULL) { - tmp = g_build_filename (packages_dir, - filename, NULL); - g_ptr_array_add (packages, tmp); - } } else { for (i = 1; i < (guint) argc; i++) g_ptr_array_add (packages, g_strdup (argv[i])); |