Author: sandervanderburg
Date: Tue Oct 12 15:58:34 2010
New Revision: 24240
URL: https://svn.nixos.org/websvn/nix/?rev=24240&sc=1

Log:
Refactored copy-closure call into libinterface

Modified:
   disnix/disnix/trunk/src/build/Makefile.am
   disnix/disnix/trunk/src/build/main.c
   disnix/disnix/trunk/src/distribute/Makefile.am
   disnix/disnix/trunk/src/distribute/main.c
   disnix/disnix/trunk/src/libinterface/client-interface.c
   disnix/disnix/trunk/src/libinterface/client-interface.h

Modified: disnix/disnix/trunk/src/build/Makefile.am
==============================================================================
--- disnix/disnix/trunk/src/build/Makefile.am   Tue Oct 12 15:25:22 2010        
(r24239)
+++ disnix/disnix/trunk/src/build/Makefile.am   Tue Oct 12 15:58:34 2010        
(r24240)
@@ -3,5 +3,5 @@
 bin_PROGRAMS = disnix-build
 
 disnix_build_SOURCES = main.c
-disnix_build_LDADD = ../libdistderivation/libdistderivation.la 
../libmain/libmain.la
-disnix_build_CFLAGS = -I../libdistderivation -I../libmain
+disnix_build_LDADD = ../libdistderivation/libdistderivation.la 
../libmain/libmain.la ../libinterface/libinterface.la
+disnix_build_CFLAGS = -I../libdistderivation -I../libmain -I../libinterface

Modified: disnix/disnix/trunk/src/build/main.c
==============================================================================
--- disnix/disnix/trunk/src/build/main.c        Tue Oct 12 15:25:22 2010        
(r24239)
+++ disnix/disnix/trunk/src/build/main.c        Tue Oct 12 15:58:34 2010        
(r24240)
@@ -26,6 +26,7 @@
 #include <sys/wait.h>
 #include <derivationmapping.h>
 #include <defaultoptions.h>
+#include <client-interface.h>
 
 #define BUFFER_SIZE 4096
 
@@ -108,31 +109,13 @@
            
                fprintf(stderr, "Distributing intra-dependency closure of 
derivation: %s to target: %s\n", item->derivation, item->target);
                
-               status = fork();
+               status = wait_to_finish(exec_copy_closure_to(interface, 
item->target, item->derivation));
                
-               if(status == 0)
+               /* On error stop the build process */
+               if(status != 0)
                {
-                   char *args[] = {"disnix-copy-closure", "--to", "--target", 
item->target, "--interface", interface, item->derivation, NULL};
-                   execvp("disnix-copy-closure", args);
-                   fprintf(stderr, "Error with executing copy closure 
process!\n");
-                   _exit(1);
-               }
-                                               
-               if(status == -1)
-               {
-                   fprintf(stderr, "Error with forking copy closure 
process!\n");
                    delete_derivation_array(derivation_array);
-                   return -1;
-               }
-               else
-               {
-                   wait(&status);
-                           
-                   if(WEXITSTATUS(status) != 0)
-                   {
-                       delete_derivation_array(derivation_array);
-                       return WEXITSTATUS(status);
-                   }
+                   return WEXITSTATUS(status);
                }
            }
 
@@ -230,36 +213,16 @@
        
                    fprintf(stderr, "Copying result: %s from: %s\n", result, 
item->target);
                    
-                   status = fork();
-                   
-                   if(status == 0)
-                   {
-                       char *args[] = {"disnix-copy-closure", "--from", 
"--target", item->target, "--interface", interface, result, NULL};
-                       execvp("disnix-copy-closure", args);
-                       fprintf(stderr, "Error with executing copy closure 
process!\n");
-                       _exit(1);
-                   }
+                   status = wait_to_finish(exec_copy_closure_from(interface, 
item->target, result));
                    
-                   if(status == -1)
+                   /* On error stop build process */
+                   if(status != 0)
                    {
-                       fprintf(stderr, "Error with forking copy closure 
process!\n");
-                       g_array_free(output_array, TRUE);
-                       delete_result_array(result_array);
-                       delete_derivation_array(derivation_array);
-                       return -1;
+                       g_array_free(output_array, TRUE);
+                       delete_result_array(result_array);
+                       delete_derivation_array(derivation_array);
+                       return WEXITSTATUS(status);
                    }
-                   else
-                   {
-                       wait(&status);
-                       
-                       if(WEXITSTATUS(status) != 0)
-                       {
-                           g_array_free(output_array, TRUE);
-                           delete_result_array(result_array);
-                           delete_derivation_array(derivation_array);
-                           return WEXITSTATUS(status);
-                       }
-                   }                               
                }       
            }
        

Modified: disnix/disnix/trunk/src/distribute/Makefile.am
==============================================================================
--- disnix/disnix/trunk/src/distribute/Makefile.am      Tue Oct 12 15:25:22 
2010        (r24239)
+++ disnix/disnix/trunk/src/distribute/Makefile.am      Tue Oct 12 15:58:34 
2010        (r24240)
@@ -3,5 +3,5 @@
 bin_PROGRAMS = disnix-distribute
 
 disnix_distribute_SOURCES = main.c
-disnix_distribute_LDADD = ../libmanifest/libmanifest.la ../libmain/libmain.la
-disnix_distribute_CFLAGS = -I../libmanifest -I../libmain
+disnix_distribute_LDADD = ../libmanifest/libmanifest.la ../libmain/libmain.la 
../libinterface/libinterface.la
+disnix_distribute_CFLAGS = -I../libmanifest -I../libmain -I../libinterface

Modified: disnix/disnix/trunk/src/distribute/main.c
==============================================================================
--- disnix/disnix/trunk/src/distribute/main.c   Tue Oct 12 15:25:22 2010        
(r24239)
+++ disnix/disnix/trunk/src/distribute/main.c   Tue Oct 12 15:58:34 2010        
(r24240)
@@ -27,6 +27,7 @@
 #include <glib.h>
 #include <distributionmapping.h>
 #include <defaultoptions.h>
+#include <client-interface.h>
 
 static void print_usage()
 {
@@ -89,34 +90,15 @@
                DistributionItem *item = g_array_index(distribution_array, 
DistributionItem*, i);
                int status;
            
-               fprintf(stderr, "Distributing intra-dependency closure of 
profile: %s to target: %s\n", item->profile, item->target);
+               fprintf(stderr, "Distributing intra-dependency closure of 
profile: %s to target: %s\n", item->profile, item->target);           
+               status = wait_to_finish(exec_copy_closure_to(interface, 
item->target, item->profile));
                
-               status = fork();
-               
-               if(status == 0)
-               {
-                   char *args[] = {"disnix-copy-closure", "--to", "--target", 
item->target, "--interface", interface, item->profile, NULL};
-                   execvp("disnix-copy-closure", args);
-                   fprintf(stderr, "Error with executing copy closure 
process!\n");
-                   _exit(1);
-               }
-               
-               if(status == -1)
+               /* On error stop the distribute process */
+               if(status != 0)
                {
-                   exit_status = -1;
+                   exit_status = WEXITSTATUS(status);
                    break;
                }
-               else
-               {    
-                   wait(&status);
-               
-                   /* On error stop the distribute process */
-                   if(WEXITSTATUS(status) != 0)
-                   {
-                       exit_status = WEXITSTATUS(status);
-                       break;
-                   }
-               }
            }
            
            delete_distribution_array(distribution_array);

Modified: disnix/disnix/trunk/src/libinterface/client-interface.c
==============================================================================
--- disnix/disnix/trunk/src/libinterface/client-interface.c     Tue Oct 12 
15:25:22 2010        (r24239)
+++ disnix/disnix/trunk/src/libinterface/client-interface.c     Tue Oct 12 
15:58:34 2010        (r24240)
@@ -38,7 +38,7 @@
 
 static pid_t exec_activate_or_deactivate(gchar *operation, gchar *interface, 
gchar *target, gchar *type, gchar **arguments, unsigned int arguments_size, 
gchar *service)
 {
-    int pid = fork();
+    pid_t pid = fork();
        
     if(pid == 0)
     {
@@ -80,7 +80,7 @@
 
 static pid_t exec_lock_or_unlock(gchar *operation, gchar *interface, gchar 
*target, gchar *profile)
 {
-    int pid = fork();
+    pid_t pid = fork();
     
     if(pid == 0)
     {
@@ -105,7 +105,7 @@
 pid_t exec_collect_garbage(gchar *interface, gchar *target, gboolean 
delete_old)
 {
     /* Declarations */
-    int pid;
+    pid_t pid;
     char *delete_old_arg;
     
     /* Determine whether to use the delete old option */
@@ -129,7 +129,7 @@
 
 pid_t exec_query_installed(gchar *interface, gchar *target, gchar *profile)
 {
-    int pid = fork();
+    pid_t pid = fork();
     
     if(pid == 0)
     {
@@ -140,3 +140,27 @@
     else
        return pid;
 }
+
+static pid_t exec_copy_closure(gchar *operation, gchar *interface, gchar 
*target, gchar *component)
+{
+    pid_t pid = fork();
+    
+    if(pid == 0)
+    {
+       char *args[] = {"disnix-copy-closure", operation, "--target", target, 
"--interface", interface, component, NULL};
+       execvp("disnix-copy-closure", args);
+       _exit(1);
+    }
+    else
+       return pid;
+}
+
+pid_t exec_copy_closure_from(gchar *interface, gchar *target, gchar *component)
+{
+    return exec_copy_closure("--from", interface, target, component);
+}
+
+pid_t exec_copy_closure_to(gchar *interface, gchar *target, gchar *component)
+{
+    return exec_copy_closure("--to", interface, target, component);
+}

Modified: disnix/disnix/trunk/src/libinterface/client-interface.h
==============================================================================
--- disnix/disnix/trunk/src/libinterface/client-interface.h     Tue Oct 12 
15:25:22 2010        (r24239)
+++ disnix/disnix/trunk/src/libinterface/client-interface.h     Tue Oct 12 
15:58:34 2010        (r24240)
@@ -97,4 +97,24 @@
  */
 pid_t exec_query_installed(gchar *interface, gchar *target, gchar *profile);
 
+/**
+ * Invokes the copy closure process to copy a closure from a machine
+ *
+ * @param interface Path to the interface executable
+ * @param target Target Address of the remote interface
+ * @param component Component to copy (including all intra-dependencies)
+ * @return PID of the client interface process performing the operation, or -1 
in case of a failure
+ */ 
+pid_t exec_copy_closure_from(gchar *interface, gchar *target, gchar 
*component);
+
+/**
+ * Invokes the copy closure process to copy a closure to a machine
+ *
+ * @param interface Path to the interface executable
+ * @param target Target Address of the remote interface
+ * @param component Component to copy (including all intra-dependencies)
+ * @return PID of the client interface process performing the operation, or -1 
in case of a failure
+ */ 
+pid_t exec_copy_closure_to(gchar *interface, gchar *target, gchar *component);
+
 #endif
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits

Reply via email to