static void gbp_vagrant_runtime_provider_load_async (GbpVagrantRuntimeProvider *self, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_autoptr(IdeSubprocessLauncher) launcher = NULL; g_autoptr(IdeSubprocess) subprocess = NULL; g_autoptr(IdeTask) task = NULL; g_autoptr(GError) error = NULL; g_assert (IDE_IS_MAIN_THREAD ()); g_assert (GBP_IS_VAGRANT_RUNTIME_PROVIDER (self)); g_assert (!cancellable || G_IS_CANCELLABLE (cancellable)); task = ide_task_new (self, cancellable, callback, user_data); ide_task_set_source_tag (task, gbp_vagrant_runtime_provider_load_async); launcher = ide_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDOUT_SILENCE | G_SUBPROCESS_FLAGS_STDERR_SILENCE); ide_subprocess_launcher_set_cwd (launcher, g_get_home_dir ()); ide_subprocess_launcher_set_run_on_host (launcher, TRUE); ide_subprocess_launcher_push_argv (launcher, "which"); ide_subprocess_launcher_push_argv (launcher, "vagrant"); if (!(subprocess = ide_subprocess_launcher_spawn (launcher, cancellable, &error))) ide_task_return_error (task, g_steal_pointer ((&error))); else ide_subprocess_wait_check_async (subprocess, cancellable, (GAsyncReadyCallback) check_vagrant_available_cb, g_steal_pointer (&task)); }
void gbp_vagrant_runtime_provider_command_async (GbpVagrantRuntimeProvider *self, const gchar * const *command, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_autoptr(IdeSubprocessLauncher) launcher = NULL; g_autoptr(IdeSubprocess) subprocess = NULL; g_autoptr(IdeTask) task = NULL; g_autoptr(GError) error = NULL; g_autoptr(GFile) workdir = NULL; IdeContext *context; g_assert (GBP_IS_VAGRANT_RUNTIME_PROVIDER (self)); g_assert (command != NULL && command[0] != NULL); g_assert (g_str_equal ("vagrant", command[0])); g_assert (!cancellable || G_IS_CANCELLABLE (cancellable)); task = ide_task_new (self, cancellable, callback, user_data); ide_task_set_source_tag (task, gbp_vagrant_runtime_provider_command_async); context = ide_object_get_context (IDE_OBJECT (self)); workdir = ide_context_ref_workdir (context); launcher = ide_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE | G_SUBPROCESS_FLAGS_STDERR_SILENCE); ide_subprocess_launcher_set_cwd (launcher, g_file_peek_path (workdir)); ide_subprocess_launcher_push_args (launcher, command); if (!g_strv_contains (command, "--machine-readable")) ide_subprocess_launcher_push_argv (launcher, "--machine-readable"); if (!(subprocess = ide_subprocess_launcher_spawn (launcher, cancellable, &error))) ide_task_return_error (task, g_steal_pointer (&error)); else ide_subprocess_communicate_utf8_async (subprocess, NULL, cancellable, (GAsyncReadyCallback) gbp_vagrant_runtime_provider_command_cb, g_steal_pointer (&task)); }
static void simple_make_command (GFile *directory, const gchar *target, GTask *task, IdeConfiguration *configuration) { g_autoptr(IdeSubprocessLauncher) launcher = NULL; g_autoptr(GSubprocess) subprocess = NULL; GCancellable *cancellable; IdeRuntime *runtime; GError *error = NULL; g_assert (G_IS_FILE (directory)); g_assert (target != NULL); g_assert (G_IS_TASK (task)); g_assert (IDE_IS_CONFIGURATION (configuration)); cancellable = g_task_get_cancellable (task); if (!g_file_is_native (directory)) { g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_REGULAR_FILE, "Cannot use non-local directories."); return; } if (NULL == (runtime = ide_configuration_get_runtime (configuration))) { g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "Failed to locate runtime"); return; } if (NULL == (launcher = ide_runtime_create_launcher (runtime, &error))) { g_task_return_error (task, error); return; } ide_subprocess_launcher_set_cwd (launcher, g_file_get_path (directory)); if (ide_runtime_contains_program_in_path (runtime, "gmake", cancellable)) ide_subprocess_launcher_push_argv (launcher, "gmake"); else ide_subprocess_launcher_push_argv (launcher, "make"); ide_subprocess_launcher_push_argv (launcher, target); if (NULL == (subprocess = ide_subprocess_launcher_spawn_sync (launcher, cancellable, &error))) { g_task_return_error (task, error); return; } g_subprocess_wait_check_async (subprocess, g_task_get_cancellable (task), simple_make_command_cb, g_object_ref (task)); }
static void gbp_flatpak_download_stage_query (IdeBuildStage *stage, IdeBuildPipeline *pipeline, GCancellable *cancellable) { GbpFlatpakDownloadStage *self = (GbpFlatpakDownloadStage *)stage; IdeConfiguration *config; GNetworkMonitor *monitor; g_autofree gchar *staging_dir = NULL; g_autofree gchar *manifest_path = NULL; g_autofree gchar *stop_at_option = NULL; const gchar *src_dir; const gchar *primary_module; g_assert (GBP_IS_FLATPAK_DOWNLOAD_STAGE (self)); g_assert (IDE_IS_BUILD_PIPELINE (pipeline)); g_assert (!cancellable || G_IS_CANCELLABLE (cancellable)); config = ide_build_pipeline_get_configuration (pipeline); if (!GBP_IS_FLATPAK_CONFIGURATION (config)) { ide_build_stage_set_completed (stage, TRUE); return; } if (self->invalid) { g_autoptr(IdeSubprocessLauncher) launcher = NULL; primary_module = gbp_flatpak_configuration_get_primary_module (GBP_FLATPAK_CONFIGURATION (config)); manifest_path = gbp_flatpak_configuration_get_manifest_path (GBP_FLATPAK_CONFIGURATION (config)); staging_dir = gbp_flatpak_get_staging_dir (config); src_dir = ide_build_pipeline_get_srcdir (pipeline); launcher = ide_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE | G_SUBPROCESS_FLAGS_STDERR_PIPE); ide_subprocess_launcher_set_run_on_host (launcher, TRUE); ide_subprocess_launcher_set_clear_env (launcher, FALSE); ide_subprocess_launcher_set_cwd (launcher, src_dir); ide_subprocess_launcher_push_argv (launcher, "flatpak-builder"); ide_subprocess_launcher_push_argv (launcher, "--ccache"); ide_subprocess_launcher_push_argv (launcher, "--force-clean"); if (!dzl_str_empty0 (self->state_dir)) { ide_subprocess_launcher_push_argv (launcher, "--state-dir"); ide_subprocess_launcher_push_argv (launcher, self->state_dir); } ide_subprocess_launcher_push_argv (launcher, "--download-only"); if (!self->force_update) ide_subprocess_launcher_push_argv (launcher, "--disable-updates"); stop_at_option = g_strdup_printf ("--stop-at=%s", primary_module); ide_subprocess_launcher_push_argv (launcher, stop_at_option); ide_subprocess_launcher_push_argv (launcher, staging_dir); ide_subprocess_launcher_push_argv (launcher, manifest_path); ide_build_stage_launcher_set_launcher (IDE_BUILD_STAGE_LAUNCHER (self), launcher); ide_build_stage_set_completed (stage, FALSE); self->invalid = FALSE; self->force_update = FALSE; } /* Ignore downloads if there is no connection */ monitor = g_network_monitor_get_default (); if (!g_network_monitor_get_network_available (monitor)) { ide_build_stage_log (stage, IDE_BUILD_LOG_STDOUT, _("Network is not available, skipping downloads"), -1); ide_build_stage_set_completed (stage, TRUE); } }