Hello community, here is the log from the commit of package buildstream for openSUSE:Factory checked in at 2020-04-02 17:43:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/buildstream (Old) and /work/SRC/openSUSE:Factory/.buildstream.new.3248 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "buildstream" Thu Apr 2 17:43:30 2020 rev:14 rq:790719 version:1.4.2 Changes: -------- --- /work/SRC/openSUSE:Factory/buildstream/buildstream.changes 2019-09-04 09:33:54.146712303 +0200 +++ /work/SRC/openSUSE:Factory/.buildstream.new.3248/buildstream.changes 2020-04-02 17:43:31.753404104 +0200 @@ -1,0 +2,14 @@ +Wed Apr 1 15:27:11 UTC 2020 - Bjørn Lie <bjorn....@gmail.com> + +- Update to version 1.4.2: + + Support for python 3.8. + + Fix a stacktrace with a hang we can experience when we CTRL-C a + job twice. + + Workaround some servers which do not honor the 'If-None-Match' + HTTP header and avoid downloading files redundantly in these + cases. + + Allow specifying absolute paths in overlap-whitelist. + + Support systems with fuse3 (avoid passing unsupported argument + to fusermount3). + +------------------------------------------------------------------- Old: ---- BuildStream-1.4.1.tar.xz New: ---- BuildStream-1.4.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ buildstream.spec ++++++ --- /var/tmp/diff_new_pack.VmMCqu/_old 2020-04-02 17:43:32.389404597 +0200 +++ /var/tmp/diff_new_pack.VmMCqu/_new 2020-04-02 17:43:32.393404600 +0200 @@ -1,7 +1,7 @@ # # spec file for package buildstream # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %define real_name BuildStream Name: buildstream -Version: 1.4.1 +Version: 1.4.2 Release: 0 Summary: A framework for modelling build pipelines in YAML License: LGPL-2.1-or-later ++++++ BuildStream-1.4.1.tar.xz -> BuildStream-1.4.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/BuildStream.egg-info/PKG-INFO new/BuildStream-1.4.2/BuildStream.egg-info/PKG-INFO --- old/BuildStream-1.4.1/BuildStream.egg-info/PKG-INFO 2019-09-03 13:07:12.000000000 +0200 +++ new/BuildStream-1.4.2/BuildStream.egg-info/PKG-INFO 2020-04-01 16:47:06.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: BuildStream -Version: 1.4.1 +Version: 1.4.2 Summary: A framework for modelling build pipelines in YAML Home-page: https://gitlab.com/BuildStream/buildstream Author: BuildStream Developers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/BuildStream.egg-info/SOURCES.txt new/BuildStream-1.4.2/BuildStream.egg-info/SOURCES.txt --- old/BuildStream-1.4.1/BuildStream.egg-info/SOURCES.txt 2019-09-03 13:07:12.000000000 +0200 +++ new/BuildStream-1.4.2/BuildStream.egg-info/SOURCES.txt 2020-04-01 16:47:06.000000000 +0200 @@ -118,6 +118,7 @@ buildstream/_protos/google/rpc/status_pb2.py buildstream/_protos/google/rpc/status_pb2_grpc.py buildstream/_scheduler/__init__.py +buildstream/_scheduler/_multiprocessing.py buildstream/_scheduler/resources.py buildstream/_scheduler/scheduler.py buildstream/_scheduler/jobs/__init__.py @@ -528,13 +529,17 @@ tests/frontend/consistencyerror/plugins/__init__.py tests/frontend/consistencyerror/plugins/consistencybug.py tests/frontend/consistencyerror/plugins/consistencyerror.py +tests/frontend/overlaps/a-whitelisted-abs.bst tests/frontend/overlaps/a-whitelisted.bst tests/frontend/overlaps/a.bst +tests/frontend/overlaps/b-whitelisted-abs.bst tests/frontend/overlaps/b-whitelisted.bst tests/frontend/overlaps/b.bst +tests/frontend/overlaps/c-whitelisted-abs.bst tests/frontend/overlaps/c-whitelisted.bst tests/frontend/overlaps/c.bst tests/frontend/overlaps/collect-partially-whitelisted.bst +tests/frontend/overlaps/collect-whitelisted-abs.bst tests/frontend/overlaps/collect-whitelisted.bst tests/frontend/overlaps/collect.bst tests/frontend/overlaps/script.bst diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/NEWS new/BuildStream-1.4.2/NEWS --- old/BuildStream-1.4.1/NEWS 2019-09-03 13:05:52.000000000 +0200 +++ new/BuildStream-1.4.2/NEWS 2020-04-01 16:45:28.000000000 +0200 @@ -1,4 +1,20 @@ ================= +buildstream 1.4.2 +================= + + o Support for python 3.8 + + o Fix a stacktrace with a hang we can experience when we CTRL-C a job twice. + + o Workaround some servers which do not honor the 'If-None-Match' HTTP header + and avoid downloading files redundantly in these cases. + + o Allow specifying absolute paths in overlap-whitelist (issue #721) + + o Support systems with fuse3 (avoid passing unsupported argument + to fusermount3) + +================= buildstream 1.4.1 ================= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/PKG-INFO new/BuildStream-1.4.2/PKG-INFO --- old/BuildStream-1.4.1/PKG-INFO 2019-09-03 13:07:12.000000000 +0200 +++ new/BuildStream-1.4.2/PKG-INFO 2020-04-01 16:47:07.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: BuildStream -Version: 1.4.1 +Version: 1.4.2 Summary: A framework for modelling build pipelines in YAML Home-page: https://gitlab.com/BuildStream/buildstream Author: BuildStream Developers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/_frontend/app.py new/BuildStream-1.4.2/buildstream/_frontend/app.py --- old/BuildStream-1.4.1/buildstream/_frontend/app.py 2019-09-03 11:15:20.000000000 +0200 +++ new/BuildStream-1.4.2/buildstream/_frontend/app.py 2020-04-01 15:49:07.000000000 +0200 @@ -504,7 +504,10 @@ choice = click.prompt("Choice:", value_proc=_prefix_choice_value_proc(['continue', 'quit', 'terminate']), default='continue', err=True) - except click.Abort: + except (click.Abort, SystemError): + # In some cases, the readline buffer underlying the prompt gets corrupted on the second CTRL+C + # This throws a SystemError, which doesn't seem to be problematic for the rest of the program + # Ensure a newline after automatically printed '^C' click.echo("", err=True) choice = 'terminate' @@ -599,7 +602,10 @@ try: choice = click.prompt("Choice:", default='continue', err=True, value_proc=_prefix_choice_value_proc(choices)) - except click.Abort: + except (click.Abort, SystemError): + # In some cases, the readline buffer underlying the prompt gets corrupted on the second CTRL+C + # This throws a SystemError, which doesn't seem to be problematic for the rest of the program + # Ensure a newline after automatically printed '^C' click.echo("", err=True) choice = 'terminate' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/_fuse/mount.py new/BuildStream-1.4.2/buildstream/_fuse/mount.py --- old/BuildStream-1.4.1/buildstream/_fuse/mount.py 2019-09-02 14:01:36.000000000 +0200 +++ new/BuildStream-1.4.2/buildstream/_fuse/mount.py 2020-04-01 15:49:07.000000000 +0200 @@ -184,7 +184,7 @@ # Run fuse in foreground in this child process, internally libfuse # will handle SIGTERM and gracefully exit it's own little main loop. # - FUSE(self.__operations, self.__mountpoint, nothreads=True, foreground=True, nonempty=True) + FUSE(self.__operations, self.__mountpoint, nothreads=True, foreground=True) # Explicit 0 exit code, if the operations crashed for some reason, the exit # code will not be 0, and we want to know about it. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/_scheduler/_multiprocessing.py new/BuildStream-1.4.2/buildstream/_scheduler/_multiprocessing.py --- old/BuildStream-1.4.1/buildstream/_scheduler/_multiprocessing.py 1970-01-01 01:00:00.000000000 +0100 +++ new/BuildStream-1.4.2/buildstream/_scheduler/_multiprocessing.py 2020-04-01 15:49:07.000000000 +0200 @@ -0,0 +1,79 @@ +# +# Copyright (C) 2019 Bloomberg Finance LP +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. +# + +# TLDR: +# ALWAYS use `.AsyncioSafeProcess` when you have an asyncio event loop running and need a `multiprocessing.Process` +# +# +# The upstream asyncio library doesn't play well with forking subprocesses while an event loop is running. +# +# The main problem that affects us is that the parent and the child will share some file handlers. +# The most important one for us is the sig_handler_fd, which the loop uses to buffer signals received +# by the app so that the asyncio loop can treat them afterwards. +# +# This sharing means that when we send a signal to the child, the sighandler in the child will write +# it back to the parent sig_handler_fd, making the parent have to treat it too. +# This is a problem for example when we sigterm the process. The scheduler will send sigterms to all its children, +# which in turn will make the scheduler receive N SIGTERMs (one per child). Which in turn will send sigterms to +# the children... +# +# We therefore provide a `AsyncioSafeProcess` derived from multiprocessing.Process that automatically +# tries to cleanup the loop and never calls `waitpid` on the child process, which breaks our child watchers. +# +# +# Relevant issues: +# - Asyncio: support fork (https://bugs.python.org/issue21998) +# - Asyncio: support multiprocessing (support fork) (https://bugs.python.org/issue22087) +# - Signal delivered to a subprocess triggers parent's handler (https://bugs.python.org/issue31489) +# +# + +import multiprocessing +import signal +import sys +from asyncio import set_event_loop_policy + + +# _AsyncioSafeForkAwareProcess() +# +# Process class that doesn't call waitpid on its own. +# This prevents conflicts with the asyncio child watcher. +# +# Also automatically close any running asyncio loop before calling +# the actual run target +# +class _AsyncioSafeForkAwareProcess(multiprocessing.Process): + # pylint: disable=attribute-defined-outside-init + def start(self): + self._popen = self._Popen(self) + self._sentinel = self._popen.sentinel + + def run(self): + signal.set_wakeup_fd(-1) + set_event_loop_policy(None) + + super().run() + + +if sys.platform != "win32": + # Set the default event loop policy to automatically close our asyncio loop in child processes + AsyncioSafeProcess = _AsyncioSafeForkAwareProcess + +else: + # Windows doesn't support ChildWatcher that way anyways, we'll need another + # implementation if we want it + AsyncioSafeProcess = multiprocessing.Process diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/_scheduler/jobs/job.py new/BuildStream-1.4.2/buildstream/_scheduler/jobs/job.py --- old/BuildStream-1.4.1/buildstream/_scheduler/jobs/job.py 2019-09-02 14:01:36.000000000 +0200 +++ new/BuildStream-1.4.2/buildstream/_scheduler/jobs/job.py 2020-04-01 15:49:07.000000000 +0200 @@ -1,5 +1,6 @@ # # Copyright (C) 2018 Codethink Limited +# Copyright (C) 2019 Bloomberg Finance LP # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -32,6 +33,7 @@ from ..._exceptions import ImplError, BstError, set_last_task_error, SkipJob from ..._message import Message, MessageType, unconditional_messages from ... import _signals, utils +from .. import _multiprocessing # Return code values shutdown of job handling child processes # @@ -64,15 +66,6 @@ self.message = message -# Process class that doesn't call waitpid on its own. -# This prevents conflicts with the asyncio child watcher. -class Process(multiprocessing.Process): - # pylint: disable=attribute-defined-outside-init - def start(self): - self._popen = self._Popen(self) - self._sentinel = self._popen.sentinel - - # Job() # # The Job object represents a parallel task, when calling Job.spawn(), @@ -127,39 +120,23 @@ self._parent_start_listening() # Spawn the process - self._process = Process(target=self._child_action, args=[self._queue]) + self._process = _multiprocessing.AsyncioSafeProcess(target=self._child_action, args=[self._queue]) # Block signals which are handled in the main process such that # the child process does not inherit the parent's state, but the main # process will be notified of any signal after we launch the child. # with _signals.blocked([signal.SIGINT, signal.SIGTSTP, signal.SIGTERM], ignore=False): - self._process.start() + with asyncio.get_child_watcher() as watcher: + self._process.start() + # Register the process to call `_parent_child_completed` once it is done + + # Here we delay the call to the next loop tick. This is in order to be running + # in the main thread, as the callback itself must be thread safe. + def on_completion(pid, returncode): + asyncio.get_event_loop().call_soon(self._parent_child_completed, pid, returncode) - # Wait for the child task to complete. - # - # This is a tricky part of python which doesnt seem to - # make it to the online docs: - # - # o asyncio.get_child_watcher() will return a SafeChildWatcher() instance - # which is the default type of watcher, and the instance belongs to the - # "event loop policy" in use (so there is only one in the main process). - # - # o SafeChildWatcher() will register a SIGCHLD handler with the asyncio - # loop, and will selectively reap any child pids which have been - # terminated. - # - # o At registration time, the process will immediately be checked with - # `os.waitpid()` and will be reaped immediately, before add_child_handler() - # returns. - # - # The self._parent_child_completed callback passed here will normally - # be called after the child task has been reaped with `os.waitpid()`, in - # an event loop callback. Otherwise, if the job completes too fast, then - # the callback is called immediately. - # - self._watcher = asyncio.get_child_watcher() - self._watcher.add_child_handler(self._process.pid, self._parent_child_completed) + watcher.add_child_handler(self._process.pid, on_completion) # terminate() # @@ -182,21 +159,15 @@ self._terminated = True - # terminate_wait() + # get_terminated() # - # Wait for terminated jobs to complete - # - # Args: - # timeout (float): Seconds to wait + # Check if a job has been terminated. # # Returns: - # (bool): True if the process terminated cleanly, otherwise False + # (bool): True in the main process if Job.terminate() was called. # - def terminate_wait(self, timeout): - - # Join the child process after sending SIGTERM - self._process.join(timeout) - return self._process.exitcode is not None + def get_terminated(self): + return self._terminated # kill() # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/_scheduler/scheduler.py new/BuildStream-1.4.2/buildstream/_scheduler/scheduler.py --- old/BuildStream-1.4.1/buildstream/_scheduler/scheduler.py 2019-09-02 14:01:36.000000000 +0200 +++ new/BuildStream-1.4.2/buildstream/_scheduler/scheduler.py 2020-04-01 15:49:07.000000000 +0200 @@ -137,6 +137,12 @@ # Hold on to the queues to process self.queues = queues + # NOTE: Enforce use of `SafeChildWatcher` as we generally don't want + # background threads. + # In Python 3.8+, `ThreadedChildWatcher` is the default watcher, and + # not `SafeChildWatcher`. + asyncio.set_child_watcher(asyncio.SafeChildWatcher()) + # Ensure that we have a fresh new event loop, in case we want # to run another test in this thread. self.loop = asyncio.new_event_loop() @@ -516,21 +522,15 @@ self.loop.remove_signal_handler(signal.SIGTERM) def _terminate_jobs_real(self): - # 20 seconds is a long time, it can take a while and sometimes - # we still fail, need to look deeper into this again. - wait_start = datetime.datetime.now() - wait_limit = 20.0 + def kill_jobs(): + for job_ in self._active_jobs: + job_.kill() - # First tell all jobs to terminate - for job in self._active_jobs: - job.terminate() + # Schedule all jobs to be killed if they have not exited in 20 sec + self.loop.call_later(20, kill_jobs) - # Now wait for them to really terminate for job in self._active_jobs: - elapsed = datetime.datetime.now() - wait_start - timeout = max(wait_limit - elapsed.total_seconds(), 0.0) - if not job.terminate_wait(timeout): - job.kill() + job.terminate() # Regular timeout for driving status in the UI def _tick(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/_version.py new/BuildStream-1.4.2/buildstream/_version.py --- old/BuildStream-1.4.1/buildstream/_version.py 2019-09-03 13:07:12.000000000 +0200 +++ new/BuildStream-1.4.2/buildstream/_version.py 2020-04-01 16:47:07.000000000 +0200 @@ -8,11 +8,11 @@ version_json = ''' { - "date": "2019-09-03T11:05:36+0000", + "date": "2020-04-01T14:45:22+0000", "dirty": false, "error": null, - "full-revisionid": "2ece1287f75c3a1eaf4bd1a9f4f9c7b895fe3993", - "version": "1.4.1" + "full-revisionid": "506e1723efc0afbd09361df3c050c88201fdd268", + "version": "1.4.2" } ''' # END VERSION_JSON diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/element.py new/BuildStream-1.4.2/buildstream/element.py --- old/BuildStream-1.4.1/buildstream/element.py 2019-09-03 11:15:20.000000000 +0200 +++ new/BuildStream-1.4.2/buildstream/element.py 2020-04-01 15:49:07.000000000 +0200 @@ -2362,7 +2362,7 @@ if include_file and not exclude_file: yield filename.lstrip(os.sep) - def __file_is_whitelisted(self, pattern): + def __file_is_whitelisted(self, path): # Considered storing the whitelist regex for re-use, but public data # can be altered mid-build. # Public data is not guaranteed to stay the same for the duration of @@ -2374,7 +2374,7 @@ whitelist_expressions = [utils._glob2re(self.__variables.subst(exp.strip())) for exp in whitelist] expression = ('^(?:' + '|'.join(whitelist_expressions) + ')$') self.__whitelist_regex = re.compile(expression) - return self.__whitelist_regex.match(pattern) + return self.__whitelist_regex.match(path) or self.__whitelist_regex.match(os.path.join(os.sep, path)) # __extract(): # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/plugins/elements/cmake.yaml new/BuildStream-1.4.2/buildstream/plugins/elements/cmake.yaml --- old/BuildStream-1.4.1/buildstream/plugins/elements/cmake.yaml 2019-09-02 14:01:36.000000000 +0200 +++ new/BuildStream-1.4.2/buildstream/plugins/elements/cmake.yaml 2020-04-01 15:49:07.000000000 +0200 @@ -19,7 +19,7 @@ cmake-args: | -DCMAKE_INSTALL_PREFIX:PATH="%{prefix}" \ - -DCMAKE_INSTALL_LIBDIR=%{lib} %{cmake-extra} %{cmake-global} %{cmake-local} + -DCMAKE_INSTALL_LIBDIR:PATH="%{lib}" %{cmake-extra} %{cmake-global} %{cmake-local} cmake: | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/plugins/sources/_downloadablefilesource.py new/BuildStream-1.4.2/buildstream/plugins/sources/_downloadablefilesource.py --- old/BuildStream-1.4.1/buildstream/plugins/sources/_downloadablefilesource.py 2019-09-02 14:01:36.000000000 +0200 +++ new/BuildStream-1.4.2/buildstream/plugins/sources/_downloadablefilesource.py 2020-04-01 15:49:07.000000000 +0200 @@ -121,7 +121,11 @@ with contextlib.closing(urllib.request.urlopen(request)) as response: info = response.info() - etag = info['ETag'] if 'ETag' in info else None + # some servers don't honor the 'If-None-Match' header + if self.ref and etag and info["ETag"] == etag: + return self.ref + + etag = info["ETag"] filename = info.get_filename(default_name) filename = os.path.basename(filename) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/buildstream/plugins/sources/pip.py new/BuildStream-1.4.2/buildstream/plugins/sources/pip.py --- old/BuildStream-1.4.1/buildstream/plugins/sources/pip.py 2019-09-03 11:15:20.000000000 +0200 +++ new/BuildStream-1.4.2/buildstream/plugins/sources/pip.py 2020-04-01 15:49:07.000000000 +0200 @@ -90,6 +90,7 @@ 'python3.5', 'python3.6', 'python3.7', + 'python3.8', ] # List of allowed extensions taken from diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/requirements/dev-requirements.txt new/BuildStream-1.4.2/requirements/dev-requirements.txt --- old/BuildStream-1.4.1/requirements/dev-requirements.txt 2019-09-03 12:23:08.000000000 +0200 +++ new/BuildStream-1.4.2/requirements/dev-requirements.txt 2020-04-01 15:49:07.000000000 +0200 @@ -19,7 +19,7 @@ mccabe==0.6.1 more-itertools==7.2.0 packaging==19.1 -pluggy==0.12.0 +pluggy==0.13.1 py==1.8.0 pyparsing==2.4.2 pytest-cache==1.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/tests/format/variables.py new/BuildStream-1.4.2/tests/format/variables.py --- old/BuildStream-1.4.1/tests/format/variables.py 2019-09-02 14:01:36.000000000 +0200 +++ new/BuildStream-1.4.2/tests/format/variables.py 2020-04-01 15:49:07.000000000 +0200 @@ -20,7 +20,7 @@ ('autotools.bst', 'make-install', "make -j1 DESTDIR=\"/buildstream-install\" install"), ('cmake.bst', 'cmake', "cmake -B_builddir -H. -G\"Unix Makefiles\" -DCMAKE_INSTALL_PREFIX:PATH=\"/usr\" \\\n" + - "-DCMAKE_INSTALL_LIBDIR=lib "), + "-DCMAKE_INSTALL_LIBDIR:PATH=\"lib\" "), ('distutils.bst', 'python-install', "python3 setup.py install --prefix \"/usr\" \\\n" + "--root \"/buildstream-install\""), @@ -46,7 +46,7 @@ ('autotools.bst', 'make-install', "make -j1 DESTDIR=\"/custom/install/root\" install"), ('cmake.bst', 'cmake', "cmake -B_builddir -H. -G\"Ninja\" -DCMAKE_INSTALL_PREFIX:PATH=\"/opt\" \\\n" + - "-DCMAKE_INSTALL_LIBDIR=lib "), + "-DCMAKE_INSTALL_LIBDIR:PATH=\"lib\" "), ('distutils.bst', 'python-install', "python3 setup.py install --prefix \"/opt\" \\\n" + "--root \"/custom/install/root\""), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/tests/frontend/overlaps/a-whitelisted-abs.bst new/BuildStream-1.4.2/tests/frontend/overlaps/a-whitelisted-abs.bst --- old/BuildStream-1.4.1/tests/frontend/overlaps/a-whitelisted-abs.bst 1970-01-01 01:00:00.000000000 +0100 +++ new/BuildStream-1.4.2/tests/frontend/overlaps/a-whitelisted-abs.bst 2020-04-01 15:49:07.000000000 +0200 @@ -0,0 +1,13 @@ +kind: import +config: + source: / + target: / +depends: +- b-whitelisted.bst +sources: +- kind: local + path: "a" +public: + bst: + overlap-whitelist: + - "/file*" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/tests/frontend/overlaps/b-whitelisted-abs.bst new/BuildStream-1.4.2/tests/frontend/overlaps/b-whitelisted-abs.bst --- old/BuildStream-1.4.1/tests/frontend/overlaps/b-whitelisted-abs.bst 1970-01-01 01:00:00.000000000 +0100 +++ new/BuildStream-1.4.2/tests/frontend/overlaps/b-whitelisted-abs.bst 2020-04-01 15:49:07.000000000 +0200 @@ -0,0 +1,16 @@ +kind: import +config: + source: / + target: / +depends: +- c.bst +sources: +- kind: local + path: "b" +variables: + FILE: /file +public: + bst: + overlap-whitelist: + - /file2 + - "%{FILE}3" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/tests/frontend/overlaps/c-whitelisted-abs.bst new/BuildStream-1.4.2/tests/frontend/overlaps/c-whitelisted-abs.bst --- old/BuildStream-1.4.1/tests/frontend/overlaps/c-whitelisted-abs.bst 1970-01-01 01:00:00.000000000 +0100 +++ new/BuildStream-1.4.2/tests/frontend/overlaps/c-whitelisted-abs.bst 2020-04-01 15:49:07.000000000 +0200 @@ -0,0 +1,11 @@ +kind: import +config: + source: / + target: / +sources: +- kind: local + path: "c" +public: + bst: + overlap-whitelist: + - "/file*" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/tests/frontend/overlaps/collect-whitelisted-abs.bst new/BuildStream-1.4.2/tests/frontend/overlaps/collect-whitelisted-abs.bst --- old/BuildStream-1.4.1/tests/frontend/overlaps/collect-whitelisted-abs.bst 1970-01-01 01:00:00.000000000 +0100 +++ new/BuildStream-1.4.2/tests/frontend/overlaps/collect-whitelisted-abs.bst 2020-04-01 15:49:07.000000000 +0200 @@ -0,0 +1,9 @@ +kind: compose + +depends: +- filename: a-whitelisted-abs.bst + type: build +- filename: b-whitelisted-abs.bst + type: build +- filename: c.bst + type: build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/BuildStream-1.4.1/tests/frontend/overlaps.py new/BuildStream-1.4.2/tests/frontend/overlaps.py --- old/BuildStream-1.4.1/tests/frontend/overlaps.py 2019-09-03 11:15:20.000000000 +0200 +++ new/BuildStream-1.4.2/tests/frontend/overlaps.py 2020-04-01 15:49:07.000000000 +0200 @@ -47,20 +47,22 @@ @pytest.mark.datafiles(DATA_DIR) -def test_overlaps_whitelist(cli, datafiles): +@pytest.mark.parametrize("element", ["collect-whitelisted.bst", "collect-whitelisted-abs.bst"]) +def test_overlaps_whitelist(cli, datafiles, element): project_dir = str(datafiles) gen_project(project_dir, True) result = cli.run(project=project_dir, silent=True, args=[ - 'build', 'collect-whitelisted.bst']) + 'build', element]) result.assert_success() @pytest.mark.datafiles(DATA_DIR) -def test_overlaps_whitelist_ignored(cli, datafiles): +@pytest.mark.parametrize("element", ["collect-whitelisted.bst", "collect-whitelisted-abs.bst"]) +def test_overlaps_whitelist_ignored(cli, datafiles, element): project_dir = str(datafiles) gen_project(project_dir, False) result = cli.run(project=project_dir, silent=True, args=[ - 'build', 'collect-whitelisted.bst']) + 'build', element]) result.assert_success()