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/5c5b16d17f493da359064d1255213575595ee3= a8 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 =3D Mojo::Promise->new; - Mojo::IOLoop->subprocess( + $self->runPhase_p('build', $promise, sub { # called in child process, can block - $SIG{INT} =3D sub { POSIX::_exit(EINTR); }; - $0 =3D '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) =3D @_; + my $was_successful =3D shift; $self->setPersistentOption('last-build-rev', $self->currentScm= Revision()); = - 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_codere= f) =3D @_; + + Mojo::IOLoop->subprocess( + sub { + # blocks, runs in separate process + $SIG{INT} =3D sub { POSIX::_exit(EINTR); }; + $0 =3D "kdesrc-build[$phaseName]"; + + $self->buildContext->resetEnvironment(); + $self->setupEnvironment(); + + # This coderef should return a normal value (something you cou= ld + # stick in a plain JSON object) + return scalar $blocking_coderef->(); + }, + + sub { + # runs in this process once subprocess is done + my ($subprocess, $err, $result) =3D @_; + + do { $promise->reject($err); return $promise } + if $err; + + # This coderef should resolve or reject the promise + $completion_coderef->($result); + return $promise; + } + ); +} + 1;