[gnome-builder/wip/gtk4-port] libide/foundry: add run command helper



commit 5b930d4abc7c1f716eabb4c5933fdcf945e9e1b7
Author: Christian Hergert <chergert redhat com>
Date:   Tue Jun 28 15:01:13 2022 -0700

    libide/foundry: add run command helper
    
    There are plenty of cases going forward were we'll want to simply convert
    a run command into a run context that will execute within the pipeline.

 src/libide/foundry/ide-pipeline.c | 37 +++++++++++++++++++++++++++++++++++++
 src/libide/foundry/ide-pipeline.h |  3 +++
 2 files changed, 40 insertions(+)
---
diff --git a/src/libide/foundry/ide-pipeline.c b/src/libide/foundry/ide-pipeline.c
index 5df65079f..693b12f3a 100644
--- a/src/libide/foundry/ide-pipeline.c
+++ b/src/libide/foundry/ide-pipeline.c
@@ -50,6 +50,7 @@
 #include "ide-foundry-enums.h"
 #include "ide-local-deploy-strategy.h"
 #include "ide-local-device.h"
+#include "ide-run-command.h"
 #include "ide-run-context.h"
 #include "ide-run-manager-private.h"
 #include "ide-runtime.h"
@@ -4389,3 +4390,39 @@ ide_pipeline_prepare_run_context (IdePipeline   *self,
   ide_run_context_setenv (run_context, "SRCDIR", ide_pipeline_get_srcdir (self));
   ide_run_context_set_cwd (run_context, ide_pipeline_get_builddir (self));
 }
+
+/**
+ * ide_pipeline_create_run_context:
+ * @self: a #IdePipeline
+ * @run_command: an #IdeRunCommand
+ *
+ * Creates a new #IdeRunContext to run @run_command.
+ *
+ * This helper is generally meant to be used by pipeline stages to create
+ * a run context that will execute within the pipeline to run the command
+ * described in @run_command.
+ *
+ * The run context is first prepared using ide_pipeline_prepare_run_context()
+ * after which the run command's ide_run_command_prepare_to_run() is used.
+ *
+ * Returns: (transfer full): an #IdeRunContext
+ */
+IdeRunContext *
+ide_pipeline_create_run_context (IdePipeline   *self,
+                                 IdeRunCommand *run_command)
+{
+  g_autoptr(IdeRunContext) run_context = NULL;
+  IdeContext *context;
+
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_RUN_COMMAND (run_command), NULL);
+
+  context = ide_object_get_context (IDE_OBJECT (self));
+  g_return_val_if_fail (IDE_IS_CONTEXT (context), NULL);
+
+  run_context = ide_run_context_new ();
+  ide_pipeline_prepare_run_context (self, run_context);
+  ide_run_command_prepare_to_run (run_command, run_context, context);
+
+  return g_steal_pointer (&run_context);
+}
diff --git a/src/libide/foundry/ide-pipeline.h b/src/libide/foundry/ide-pipeline.h
index 7adc3aa16..05a3ead93 100644
--- a/src/libide/foundry/ide-pipeline.h
+++ b/src/libide/foundry/ide-pipeline.h
@@ -92,6 +92,9 @@ IDE_AVAILABLE_IN_ALL
 IdeSubprocessLauncher *ide_pipeline_create_launcher          (IdePipeline            *self,
                                                               GError                **error);
 IDE_AVAILABLE_IN_ALL
+IdeRunContext         *ide_pipeline_create_run_context       (IdePipeline            *self,
+                                                              IdeRunCommand          *run_command);
+IDE_AVAILABLE_IN_ALL
 void                   ide_pipeline_prepare_run_context      (IdePipeline            *self,
                                                               IdeRunContext          *run_context);
 IDE_AVAILABLE_IN_ALL


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