[gnome-builder] environment: add ide_environment_copy_into()



commit 3648b853af578e53151b63a726600319e9d401ab
Author: Christian Hergert <chergert redhat com>
Date:   Fri Sep 8 18:13:27 2017 -0700

    environment: add ide_environment_copy_into()
    
    This adds a helper that lets you copy the contents of an IdeEnvironment
    into another IdeEnvironment.

 libide/buildsystem/ide-environment.c |   22 ++++++++++++++++------
 libide/buildsystem/ide-environment.h |    3 +++
 2 files changed, 19 insertions(+), 6 deletions(-)
---
diff --git a/libide/buildsystem/ide-environment.c b/libide/buildsystem/ide-environment.c
index 31eb9d0..d2686b3 100644
--- a/libide/buildsystem/ide-environment.c
+++ b/libide/buildsystem/ide-environment.c
@@ -291,21 +291,31 @@ ide_environment_append (IdeEnvironment         *self,
 IdeEnvironment *
 ide_environment_copy (IdeEnvironment *self)
 {
-  IdeEnvironment *copy;
-  guint i;
+  g_autoptr(IdeEnvironment) copy = NULL;
 
   g_return_val_if_fail (IDE_IS_ENVIRONMENT (self), NULL);
 
   copy = ide_environment_new ();
+  ide_environment_copy_into (self, copy, TRUE);
 
-  for (i = 0; i < self->variables->len; i++)
+  return g_steal_pointer (&copy);
+}
+
+void
+ide_environment_copy_into (IdeEnvironment *self,
+                           IdeEnvironment *dest,
+                           gboolean        replace)
+{
+  g_return_if_fail (IDE_IS_ENVIRONMENT (self));
+  g_return_if_fail (IDE_IS_ENVIRONMENT (dest));
+
+  for (guint i = 0; i < self->variables->len; i++)
     {
       IdeEnvironmentVariable *var = g_ptr_array_index (self->variables, i);
       const gchar *key = ide_environment_variable_get_key (var);
       const gchar *value = ide_environment_variable_get_value (var);
 
-      ide_environment_setenv (copy, key, value);
+      if (replace || ide_environment_getenv (dest, key) == NULL)
+        ide_environment_setenv (dest, key, value);
     }
-
-  return copy;
 }
diff --git a/libide/buildsystem/ide-environment.h b/libide/buildsystem/ide-environment.h
index 823786c..2a1c5cc 100644
--- a/libide/buildsystem/ide-environment.h
+++ b/libide/buildsystem/ide-environment.h
@@ -41,6 +41,9 @@ void            ide_environment_append      (IdeEnvironment         *self,
 void            ide_environment_remove      (IdeEnvironment         *self,
                                              IdeEnvironmentVariable *variable);
 IdeEnvironment *ide_environment_copy        (IdeEnvironment         *self);
+void            ide_environment_copy_into   (IdeEnvironment         *self,
+                                             IdeEnvironment         *dest,
+                                             gboolean                replace);
 
 G_END_DECLS
 


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