summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2014-06-23 12:26:23 +0100
committerRichard Hughes <richard@hughsie.com>2014-06-23 12:26:23 +0100
commitf298b97a35e18a20351d45d5d590ef52cca37e3a (patch)
treec487bfdb6d37fed2e34082f86e9c3e608a703bad
parent0d4093d2385d9ff8b67ddcc98aa4b80f7aa8eed9 (diff)
downloadappstream-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.c33
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]));