Automated Build Generator: Issues
https://code.cor-lab.de/
https://code.cor-lab.de/favicon.ico?1401972073
2016-06-22T13:12:19Z
Open Source Collaboration Platform
Redmine
Bug #2581 (Resolved): Better error message for multiple entries with the same project name in one...
https://code.cor-lab.de/issues/2581
2016-06-22T13:12:19Z
N. Köster
nkoester@techfak.uni-bielefeld.de
<p>Distribution content:<br /><pre>
[...]
[ "rsb-lazy-converter-python", "0.13" ],
[ "rsb-lazy-converter-python", "0.12" ],
[...]
</pre></p>
<p>Generator:<br /><pre>
[...]
1 problem during RESOLVE/DISTRIBUTION phase:
SIMPLE-ERROR:
Could not find version "0.12" in project #<PROJECT-SPEC ltm-nightly:rsb-lazy-converter-python {10076669E3}>.
[...]
</pre></p>
<p>rsb-lazy-converter-python projectfile:<br /><pre>
[...]
"variables" : {
"access" : "public",
"branches" : [ "master", "0.12", "0.13" ],
"extra-requires" : [ [ "setuptools","rsb" ] ],
[...]
</pre></p>
<p>git branches<br /><pre>
[nkoester @ calcit] [33722/0] [15:04:33 - 22.06.16]
[/homes/nkoester/workspace_cor/rsb-lazy-converter.python/] git branch -a
0.12
* 0.13
master
remotes/origin/0.12
remotes/origin/0.13
remotes/origin/master
</pre></p>
Bug #2579 (Resolved): Unable to use numbers or uppercase letters in variable names
https://code.cor-lab.de/issues/2579
2016-06-22T11:17:21Z
N. Köster
nkoester@techfak.uni-bielefeld.de
<p>Adding the following to the setuptools template</p>
<pre>
"python2.version": "2.7",
"python2.binary": "python${python2.version}",
"python3.version": "3.2",
"python3.binary": "python${python3.version}",
"python.version": "${python2.version}",
"python.binary": "python${python.version}"
</pre>
<p>leads to <a class="collapsible collapsed" href="#" id="collapse-712a2117-show" onclick="$('#collapse-712a2117-show, #collapse-712a2117-hide').toggle(); $('#collapse-712a2117').fadeToggle(150);; return false;">this errors</a><a class="collapsible" href="#" id="collapse-712a2117-hide" onclick="$('#collapse-712a2117-show, #collapse-712a2117-hide').toggle(); $('#collapse-712a2117').fadeToggle(150);; return false;" style="display:none;">this errors</a><div class="collapsed-text" id="collapse-712a2117" style="display:none;"><pre>
2 problems during DEPLOY/PROJECT phase:
DEPLOYMENT-ERROR:
Error during deployment of #<PROJECT ocvfacerec {1010DB8723}> » #<VERSION ocvfacerec:task-state-support {1010E07C23}> » #<JOB ocvfacerec:task-state-support:toolkit {1010E547D3}> Caused by:
> Undefined variable: :PYTHON2.VERSION.
DEPLOYMENT-ERROR:
Error during deployment of #<PROJECT rsb-python {1010DB87C3}> » #<VERSION rsb-python:0.13 {1010DFFD23}> » #<JOB rsb-python:0.13:toolkit {1010DCB8D3}> Caused by:
> Undefined variable: :PYTHON2.VERSION.
DEPLOYMENT-ERROR:
Error during deployment of #<PROJECT rsbag-python {1010DB8863}> » #<VERSION rsbag-python:0.13 {1010DD16B3}> » #<JOB rsbag-python:0.13:toolkit {1010E54193}> Caused by:
> Undefined variable: :PYTHON2.VERSION.
DEPLOYMENT-ERROR:
Error during deployment of #<PROJECT rst-converters-python {1010DB8A23}> » #<VERSION rst-converters-python:0.13 {1010E07CE3}> » #<JOB rst-converters-python:0.13:toolkit {1010E53B53}> Caused by:
> Undefined variable: :PYTHON2.VERSION.
[...]
</pre></div></p>
<p>Same happens for letters:</p>
<pre>
"pythonA.version": "2.7",
"pythonA.binary": "python${pythonA.version}",
"pythonB.version": "3.2",
"pythonB.binary": "python${pythonB.version}",
"python.version": "${pythonA.version}",
"python.binary": "python${python.version}"
</pre>
<p>leads to <a class="collapsible collapsed" href="#" id="collapse-8a957060-show" onclick="$('#collapse-8a957060-show, #collapse-8a957060-hide').toggle(); $('#collapse-8a957060').fadeToggle(150);; return false;">this</a><a class="collapsible" href="#" id="collapse-8a957060-hide" onclick="$('#collapse-8a957060-show, #collapse-8a957060-hide').toggle(); $('#collapse-8a957060').fadeToggle(150);; return false;" style="display:none;">this</a><div class="collapsed-text" id="collapse-8a957060" style="display:none;"><pre>
12 problems during DEPLOY/PROJECT phase:
DEPLOYMENT-ERROR:
Error during deployment of #<PROJECT ocvfacerec {1010D0F453}> » #<VERSION ocvfacerec:task-state-support {1010D37993}> » #<JOB ocvfacerec:task-state-support:toolkit {1010DA73C3}> Caused by:
> Undefined variable: :PYTHONA.VERSION.
DEPLOYMENT-ERROR:
Error during deployment of #<PROJECT rsb-python {1010D0F4F3}> » #<VERSION rsb-python:0.13 {1010D25973}> » #<JOB rsb-python:0.13:toolkit {1010DA7123}> Caused by:
> Undefined variable: :PYTHONA.VERSION.
DEPLOYMENT-ERROR:
Error during deployment of #<PROJECT rsbag-python {1010D0F593}> » #<VERSION rsbag-python:0.13 {1010D258F3}> » #<JOB rsbag-python:0.13:toolkit {1010DA6BA3}> Caused by:
> Undefined variable: :PYTHONA.VERSION.
DEPLOYMENT-ERROR:
Error during deployment of #<PROJECT rst-converters-python {1010D0F753}> » #<VERSION rst-converters-python:0.13 {1010D3E243}> » #<JOB rst-converters-python:0.13:toolkit {1010DA63A3}> Caused by:
> Undefined variable: :PYTHONA.VERSION.
[...]
</pre></div></p>
Bug #2578 (Resolved): Unable to build C++ software in a prefix which has multiple versions of a r...
https://code.cor-lab.de/issues/2578
2016-06-21T19:14:12Z
N. Köster
nkoester@techfak.uni-bielefeld.de
<p>When having multiple RSB versions installed (e.g. 0.12 and 0.13) in the same prefix (e.g. during a RSB version update), C++ programs which are build via the toolkit get confused and do not build anymore. The reason is that the creation of the according environment variables via <code>find</code> are filled with multiple lines.</p>
<p>See an example error <a class="collapsible collapsed" href="#" id="collapse-82338c91-show" onclick="$('#collapse-82338c91-show, #collapse-82338c91-hide').toggle(); $('#collapse-82338c91').fadeToggle(150);; return false;">HERE</a><a class="collapsible" href="#" id="collapse-82338c91-hide" onclick="$('#collapse-82338c91-show, #collapse-82338c91-hide').toggle(); $('#collapse-82338c91').fadeToggle(150);; return false;" style="display:none;">HERE</a><div class="collapsed-text" id="collapse-82338c91" style="display:none;"><pre>
Started by user nkoester
Building in workspace /media/local_data/nkoester/jenkins/ltm-system/jobs/rsb-video-writer-master-toolkit-ltm-nightly/workspace
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://code.cor-lab.org/git/rsb-video-writer # timeout=10
Cleaning workspace
> git rev-parse --verify HEAD # timeout=10
Resetting working tree
> git reset --hard # timeout=10
> git clean -fdx # timeout=10
Fetching upstream changes from https://code.cor-lab.org/git/rsb-video-writer
> git --version # timeout=10
> git -c core.askpass=true fetch --tags --progress https://code.cor-lab.org/git/rsb-video-writer +refs/heads/*:refs/remotes/origin/*
> git rev-parse origin/master^{commit} # timeout=10
Checking out Revision 266af29850a409d0af8ff4b32b4563e8d9e8616a (origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 266af29850a409d0af8ff4b32b4563e8d9e8616a # timeout=10
> git branch -a # timeout=10
> git rev-parse master^{commit} # timeout=10
> git rev-parse remotes/origin/0.7^{commit} # timeout=10
> git rev-parse remotes/origin/0.9^{commit} # timeout=10
> git rev-parse remotes/origin/master^{commit} # timeout=10
> git branch -D master # timeout=10
> git checkout -b master 266af29850a409d0af8ff4b32b4563e8d9e8616a
> git rev-list 266af29850a409d0af8ff4b32b4563e8d9e8616a # timeout=10
[workspace] $ /bin/sh -xe /tmp/hudson5225181509413829698.sh
+ mkdir -p build
+ cd build
+ rm -f CMakeCache.txt
+ export PKG_CONFIG_PATH=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/lib/pkgconfig:
+ PKG_CONFIG_PATH=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/lib/pkgconfig:
+ export PATH=/home/nkoester/local/bin:/homes/nkoester/local/usr/local/bin:/home/nkoester/.local/bin:/home/nkoester/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/usr/bin:/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/bin
+ PATH=/home/nkoester/local/bin:/homes/nkoester/local/usr/local/bin:/home/nkoester/.local/bin:/home/nkoester/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/usr/bin:/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/bin
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name RSBConfig.cmake -o -name rsb-config.cmake ')' -exec dirname '{}' ';'
+ RSB_DIR='/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.12
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.13'
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name rst-convertersConfig.cmake -o -name rst-converters-config.cmake ')' -exec dirname '{}' ';'
+ RST_CONVERTERS_DIR='/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst-converters0.13
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst-converters0.12'
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name OpenCVConfig.cmake -o -name opencv-config.cmake ')' -exec dirname '{}' ';'
+ OPENCV_DIR=
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name RSC-CMakeConfig.cmake -o -name rsc-cmake-config.cmake ')' -exec dirname '{}' ';'
+ RSC_CMAKE_DIR='/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc-cmake0.12
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc-cmake0.13'
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name RSCConfig.cmake -o -name rsc-config.cmake ')' -exec dirname '{}' ';'
+ RSC_DIR='/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc0.13
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc0.12'
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name RSBProtocolConfig.cmake -o -name rsbprotocol-config.cmake ')' -exec dirname '{}' ';'
+ RSBPROTOCOL_DIR='/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsbprotocol0.12
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsbprotocol0.13'
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name PythonInterpConfig.cmake -o -name pythoninterp-config.cmake ')' -exec dirname '{}' ';'
+ PYTHONINTERP_DIR=
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name RSC-CMakeConfig.cmake -o -name rsc-cmake-config.cmake ')' -exec dirname '{}' ';'
+ RSC_CMAKE_DIR='/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc-cmake0.12
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc-cmake0.13'
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name RSTConfig.cmake -o -name rst-config.cmake ')' -exec dirname '{}' ';'
+ RST_DIR='/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst0.12
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst0.13'
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name PythonInterpConfig.cmake -o -name pythoninterp-config.cmake ')' -exec dirname '{}' ';'
+ PYTHONINTERP_DIR=
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name RSBConfig.cmake -o -name rsb-config.cmake ')' -exec dirname '{}' ';'
+ RSB_DIR='/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.12
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.13'
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name OpenCVConfig.cmake -o -name opencv-config.cmake ')' -exec dirname '{}' ';'
+ OPENCV_DIR=
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name RCIConfig.cmake -o -name rci-config.cmake ')' -exec dirname '{}' ';'
+ RCI_DIR=
++ find /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -type f '(' -name RSTConfig.cmake -o -name rst-config.cmake ')' -exec dirname '{}' ';'
+ RST_DIR='/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst0.12
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst0.13'
+ cmake -DRSB_DIR=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.12 /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.13 -Drst-converters_DIR=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst-converters0.13 /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst-converters0.12 -DOpenCV_DIR= -DRSC-CMake_DIR=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc-cmake0.12 /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc-cmake0.13 -DRSC_DIR=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc0.13 /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc0.12 -DRSBProtocol_DIR=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsbprotocol0.12 /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsbprotocol0.13 -DPythonInterp_DIR= -DRSC-CMake_DIR=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc-cmake0.12 /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc-cmake0.13 -DRST_DIR=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst0.12 /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst0.13 -DPythonInterp_DIR= -DRSB_DIR=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.12 /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.13 -DOpenCV_DIR= -DRCI_DIR= -DRST_DIR=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst0.12 /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rst0.13 -DCMAKE_INSTALL_PREFIX=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly -DCMAKE_BUILD_TYPE=RelWithDebInfo '-DCMAKE_CXX_FLAGS=-march=core2 -O0' -DCMAKE_SKIP_BUILD_RPATH=FALSE -DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE -DCMAKE_INSTALL_RPATH=/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/lib -DCMAKE_INSTALL_LIBDIR=lib ..
-- The C compiler identification is GNU 6.1.1
-- The CXX compiler identification is GNU 6.1.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Boost version: 1.60.0
-- Found the following Boost libraries:
-- date_time
-- thread
-- filesystem
-- signals
-- program_options
-- system
-- regex
-- chrono
-- atomic
-- Boost version: 1.60.0
-- Found the following Boost libraries:
-- regex
-- date_time
-- program_options
-- system
-- protoc does not support matlab
-- Found PROTOBUF: /lib64/libprotobuf.so
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
CMAKE_INSTALL_LIBDIR
RCI_DIR
RSBProtocol_DIR
-- Build files have been written to: /media/local_data/nkoester/jenkins/ltm-system/jobs/rsb-video-writer-master-toolkit-ltm-nightly/workspace/build
+ make -j1
Scanning dependencies of target rsb-video-writer
[ 50%] Building CXX object CMakeFiles/rsb-video-writer.dir/writer.cpp.o
In file included from /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc0.13/../../include/rsc0.13/rsc/logging/LoggerFactory.h:39:0,
from /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.12/../../include/rsb0.12/rsb/transport/Factory.h:34,
from /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.12/../../include/rsb0.12/rsb/Factory.h:52,
from /media/local_data/nkoester/jenkins/ltm-system/jobs/rsb-video-writer-master-toolkit-ltm-nightly/workspace/writer.cpp:44:
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc0.13/../../include/rsc0.13/rsc/logging/LoggingSystem.h:69:23: warning: ‘template<class R> class rsc::misc::Registry’ is deprecated [-Wdeprecated-declarations]
RSC_EXPORT rsc::misc::Registry<LoggingSystem>* loggingSystemRegistry();
^~~~~~~~
In file included from /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc0.13/../../include/rsc0.13/rsc/logging/LoggingSystem.h:32:0,
from /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc0.13/../../include/rsc0.13/rsc/logging/LoggerFactory.h:39,
from /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.12/../../include/rsb0.12/rsb/transport/Factory.h:34,
from /media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsb0.12/../../include/rsb0.12/rsb/Factory.h:52,
from /media/local_data/nkoester/jenkins/ltm-system/jobs/rsb-video-writer-master-toolkit-ltm-nightly/workspace/writer.cpp:44:
/media/local_data/nkoester/vol/ltm/releases/trusty/ltm-nightly/share/rsc0.13/../../include/rsc0.13/rsc/logging/../misc/Registry.h:62:75: note: declared here
class DEPRECATED_CLASS("If possible, use rsc::patterns::Factory instead") Registry: public boost::noncopyable {
^~~~~~~~
[100%] Linking CXX executable rsb-video-writer
/usr/bin/ld: cannot find -lrsc0.12
/usr/bin/ld: cannot find -lrsb0.13
/usr/bin/ld: cannot find -lrst0.13
/usr/bin/ld: cannot find -lrstsandbox0.13
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/rsb-video-writer.dir/build.make:144: rsb-video-writer] Error 1
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/rsb-video-writer.dir/all] Error 2
make: *** [Makefile:128: all] Error 2
Build step 'Execute shell' marked build as failure
Finished: FAILURE
</pre></div></p>
Bug #2520 (Resolved): dependencies reported to jenkins for CI
https://code.cor-lab.de/issues/2520
2016-03-14T14:16:12Z
R. Haschke
rhaschke@techfak.uni-bielefeld.de
<p>Die Liste der nachgelagerten Projekte im jenkins ist bei vielen Projekte zu lang.<br />Nehmen wir mal drei Projekte mit folgenden, beispielhaften Abhängigkeiten:<br />A<br />B depends on A<br />C depends on A,B</p>
<p>In diesem Fall sollte Projekte C nur Projekt B "watchen", weil die dependency auf A automatisch durch ein rebuild von dependency B erfüllt wird.</p>
<p>Da der build-generator potentiel erstmal sehr viele Abhängigkeiten findet, wäre ein solches pruning der Abhängigkeiten in jenkins m.E. auf jeden Fall notwendig.<br />Zur Zeit triggert ein rebuild von A:<br />rebuild B, C<br />rebuild C (after B)</p>
<p>Bei einen großen Projektbaum skaliert das exponentiell schlechter. Bei einer Abhängigkeitsliste A->B->C->D->E->F würde<br />ein rebuild von A insgesamt 5+4+3+2+1 = 15 weitere builds triggern - obwohl nur 5 nötig wären.</p>
<p>Die Lösung müsste einfach zu implementieren sein:<br />Man nehme 1. die Abhängigkeitsliste des aktuellen Jobs (wie Du sie schon hast)<br />und subtrahiere 2. die Abhängigkeitslisten der dort gelisteten Jobs.</p>
<p>Also für unser Beispiel:<br />A: {} - {} = {}<br />B: {A} - {} = {A}<br />C: {A, B} - {} - {A} = {B}</p>