diff --git a/builder/builder-main.c b/builder/builder-main.c index f89cee75..89dec1e8 100644 --- a/builder/builder-main.c +++ b/builder/builder-main.c @@ -37,6 +37,7 @@ static gboolean opt_run; static gboolean opt_disable_cache; static gboolean opt_download_only; static gboolean opt_build_only; +static gboolean opt_finish_only; static gboolean opt_show_deps; static gboolean opt_disable_download; static gboolean opt_disable_updates; @@ -64,6 +65,7 @@ static GOptionEntry entries[] = { { "disable-updates", 0, 0, G_OPTION_ARG_NONE, &opt_disable_updates, "Only download missing sources, never update to latest vcs version", NULL }, { "download-only", 0, 0, G_OPTION_ARG_NONE, &opt_download_only, "Only download sources, don't build", NULL }, { "build-only", 0, 0, G_OPTION_ARG_NONE, &opt_build_only, "Stop after build, don't run clean and finish phases", NULL }, + { "finish-only", 0, 0, G_OPTION_ARG_NONE, &opt_finish_only, "Only run clean and finish and export phases", NULL }, { "show-deps", 0, 0, G_OPTION_ARG_NONE, &opt_show_deps, "List the dependencies of the json file (see --show-deps --help)", NULL }, { "require-changes", 0, 0, G_OPTION_ARG_NONE, &opt_require_changes, "Don't create app dir or export if no changes", NULL }, { "keep-build-dirs", 0, 0, G_OPTION_ARG_NONE, &opt_keep_build_dirs, "Don't remove build directories after install", NULL }, @@ -197,6 +199,7 @@ main (int argc, g_autofree char **orig_argv; gboolean is_run = FALSE; gboolean is_show_deps = FALSE; + gboolean app_dir_is_empty = FALSE; g_autoptr(FlatpakContext) arg_context = NULL; int i, first_non_arg, orig_argc; int argnr; @@ -333,12 +336,14 @@ main (int argc, return 1; } + app_dir_is_empty = !g_file_query_exists (app_dir, NULL) || + directory_is_empty (app_dir_path); + if (is_run) { g_assert (opt_run); - if (!g_file_query_exists (app_dir, NULL) || - directory_is_empty (app_dir_path)) + if (app_dir_is_empty) { g_printerr ("App dir '%s' is empty or doesn't exist.\n", app_dir_path); return 1; @@ -358,7 +363,7 @@ main (int argc, g_assert (!opt_run); g_assert (!opt_show_deps); - if (g_file_query_exists (app_dir, NULL) && !directory_is_empty (app_dir_path)) + if (!opt_finish_only && !app_dir_is_empty) { if (opt_force_clean) { @@ -377,6 +382,11 @@ main (int argc, return 1; } } + if (opt_finish_only && app_dir_is_empty) + { + g_printerr ("App dir '%s' is empty or doesn't exist.\n", app_dir_path); + return 1; + } if (!builder_manifest_start (manifest, build_context, &error)) { @@ -384,7 +394,8 @@ main (int argc, return 1; } - if (!opt_disable_download && + if (!opt_finish_only && + !opt_disable_download && !builder_manifest_download (manifest, !opt_disable_updates, build_context, &error)) { g_printerr ("Failed to download sources: %s\n", error->message); @@ -408,28 +419,31 @@ main (int argc, builder_manifest_checksum (manifest, cache, build_context); - if (!builder_cache_lookup (cache, "init")) + if (!opt_finish_only) { - g_autofree char *body = - g_strdup_printf ("Initialized %s\n", - builder_manifest_get_id (manifest)); - if (!builder_manifest_init_app_dir (manifest, build_context, &error)) + if (!builder_cache_lookup (cache, "init")) + { + g_autofree char *body = + g_strdup_printf ("Initialized %s\n", + builder_manifest_get_id (manifest)); + if (!builder_manifest_init_app_dir (manifest, build_context, &error)) + { + g_printerr ("Error: %s\n", error->message); + return 1; + } + + if (!builder_cache_commit (cache, body, &error)) + { + g_printerr ("Error: %s\n", error->message); + return 1; + } + } + + if (!builder_manifest_build (manifest, cache, build_context, &error)) { g_printerr ("Error: %s\n", error->message); return 1; } - - if (!builder_cache_commit (cache, body, &error)) - { - g_printerr ("Error: %s\n", error->message); - return 1; - } - } - - if (!builder_manifest_build (manifest, cache, build_context, &error)) - { - g_printerr ("Error: %s\n", error->message); - return 1; } if (!opt_build_only) diff --git a/doc/flatpak-builder.xml b/doc/flatpak-builder.xml index 2187f697..dc54d51e 100644 --- a/doc/flatpak-builder.xml +++ b/doc/flatpak-builder.xml @@ -659,6 +659,15 @@ + + + + + Only do the cleanup, finish and export stages, picking up + where a --build-only command left off. + + +