[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdesrc-build/make_it_mojo] modules/ksb: mojo: Add a helper for Mojo subprocesses for common code.
From:       Michael Pyne <null () kde ! org>
Date:       2018-03-31 20:20:19
Message-ID: E1f2Mz5-0002Co-K2 () code ! kde ! org
[Download RAW message or body]

Git commit 5c5b16d17f493da359064d1255213575595ee3a8 by Michael Pyne.
Committed on 31/03/2018 at 01:35.
Pushed by mpyne into branch 'make_it_mojo'.

mojo: Add a helper for Mojo subprocesses for common code.

M  +38   -17   modules/ksb/Module.pm

https://commits.kde.org/kdesrc-build/5c5b16d17f493da359064d1255213575595ee3a8

diff --git a/modules/ksb/Module.pm b/modules/ksb/Module.pm
index 5ad151f..3e2f647 100644
--- a/modules/ksb/Module.pm
+++ b/modules/ksb/Module.pm
@@ -426,15 +426,9 @@ sub build
         if $self->getOption('build-system-only');
 
     my $promise = Mojo::Promise->new;
-    Mojo::IOLoop->subprocess(
+    $self->runPhase_p('build', $promise,
         sub {
             # called in child process, can block
-            $SIG{INT} = sub { POSIX::_exit(EINTR); };
-            $0 = 'kdesrc-build-builder';
-
-            $self->buildContext->resetEnvironment();
-            $self->setupEnvironment();
-
             return 0 if !$buildSystem->buildInternal();
 
             # TODO: This should be a simple phase to run.
@@ -457,18 +451,11 @@ sub build
         },
         sub {
             # called in this process, with results
-            my ($subprocess, $err, $was_successful) = @_;
+            my $was_successful = shift;
             $self->setPersistentOption('last-build-rev', $self->currentScmRevision());
 
-            if ($err) {
-                $promise->reject($err);
-            } elsif ($was_successful) {
-                $promise->resolve(1);
-            } else {
-                $promise->reject('Build failed');
-            }
-
-            return $promise;
+            return $promise->resolve(1) if $was_successful;
+            return $promise->reject('Build failed');
         }
     );
 
@@ -978,4 +965,38 @@ sub installationPath
     return $path;
 }
 
+# Runs the given phase (with associated promise) in a separate subprocess,
+# using provided sub references
+sub runPhase_p
+{
+    my ($self, $phaseName, $promise, $blocking_coderef, $completion_coderef) = @_;
+
+    Mojo::IOLoop->subprocess(
+        sub {
+            # blocks, runs in separate process
+            $SIG{INT} = sub { POSIX::_exit(EINTR); };
+            $0 = "kdesrc-build[$phaseName]";
+
+            $self->buildContext->resetEnvironment();
+            $self->setupEnvironment();
+
+            # This coderef should return a normal value (something you could
+            # stick in a plain JSON object)
+            return scalar $blocking_coderef->();
+        },
+
+        sub {
+            # runs in this process once subprocess is done
+            my ($subprocess, $err, $result) = @_;
+
+            do { $promise->reject($err); return $promise }
+                if $err;
+
+            # This coderef should resolve or reject the promise
+            $completion_coderef->($result);
+            return $promise;
+        }
+    );
+}
+
 1;

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic