예제 #1
0
    def __init__(self, pkg: PackageDescriptor,
                 installers: Dict[str, BundleInstallerExtensionPoint],
                 args, *,
                 additional_destinations=None):
        """
        Construct the BundlePackageArguments.

        :param PackageDescriptor pkg: The package descriptor
        :param args: The parsed command line arguments
        :param list additional_destinations: The destinations of additional
          arguments
        """
        super().__init__()
        self.build_base = os.path.abspath(
            os.path.join(os.getcwd(), args.build_base, pkg.name))
        self.install_base = os.path.abspath(
            os.path.join(os.getcwd(), args.install_base))
        if not args.merge_install:
            self.install_base = os.path.join(self.install_base, pkg.name)
        self.bundle_base = os.path.abspath(
            os.path.join(os.getcwd(), args.bundle_base))
        self.installers = installers

        # set additional arguments from the command line or package metadata
        for dest in (additional_destinations or []):
            if hasattr(args, dest):
                update_object(
                    self, dest, getattr(args, dest),
                    pkg.name, 'bundle', 'command line')
            if dest in pkg.metadata:
                update_object(
                    self, dest, pkg.metadata[dest],
                    pkg.name, 'bundle', 'package metadata')
예제 #2
0
    def __init__(self, pkg, args, *, additional_destinations=None):
        """
        Construct a BuildPackageArguments.

        :param pkg: The package descriptor
        :param args: The parsed command line arguments
        :param list additional_destinations: The destinations of additional
          arguments
        """
        super().__init__()
        self.path = os.path.abspath(os.path.join(os.getcwd(), str(pkg.path)))
        self.build_base = os.path.abspath(
            os.path.join(os.getcwd(), args.build_base, pkg.name))
        self.install_base = os.path.abspath(
            os.path.join(os.getcwd(), args.install_base))
        self.merge_install = args.merge_install
        if not args.merge_install:
            self.install_base = os.path.join(self.install_base, pkg.name)
        self.symlink_install = args.symlink_install
        self.test_result_base = os.path.abspath(os.path.join(
            os.getcwd(), args.test_result_base, pkg.name)) \
            if args.test_result_base else None

        # set additional arguments
        for dest in (additional_destinations or []):
            # from the command line
            if hasattr(args, dest):
                update_object(self, dest, getattr(args, dest), pkg.name,
                              'build', 'command line')
            # from the package metadata
            if dest in pkg.metadata:
                update_object(self, dest, pkg.metadata[dest], pkg.name,
                              'build', 'package metadata')
예제 #3
0
파일: lock.py 프로젝트: ruffsl/colcon-cache
    def __init__(self, pkg, args, *, additional_destinations=None):
        """
        Construct a LockCachePackageArguments.

        :param pkg: The package descriptor
        :param args: The parsed command line arguments
        :param list additional_destinations: The destinations of additional
          arguments
        """
        super().__init__()
        self.path = os.path.abspath(os.path.join(os.getcwd(), str(pkg.path)))
        self.build_base = os.path.abspath(
            os.path.join(os.getcwd(), args.build_base, pkg.name))
        self.ignore_dependencies = args.ignore_dependencies

        # set additional arguments
        for dest in (additional_destinations or []):
            # from the command line
            if hasattr(args, dest):
                update_object(self, dest, getattr(args, dest), pkg.name,
                              'cache lock', 'command line')
            # from the package metadata
            if dest in pkg.metadata:
                update_object(self, dest, pkg.metadata[dest], pkg.name,
                              'cache lock', 'package metadata')
예제 #4
0
def test_update_object():
    obj = argparse.Namespace()
    key = 'key'
    msg_args = ['package_name', 'argument_type', 'value_source']
    update_object(obj, key, 'foo', *msg_args)
    assert hasattr(obj, key)
    assert getattr(obj, key) == 'foo'

    # debug message when overwriting a value with the same type
    with patch('colcon_core.verb.logger.log') as log:
        update_object(obj, key, 'bar', *msg_args)
    assert getattr(obj, key) == 'bar'
    assert log.call_count == 1
    assert len(log.call_args[0]) == 2
    assert log.call_args[0][0] == 5
    assert 'overwrite' in log.call_args[0][1]

    # warning message when overwriting a value with a different type
    with patch('colcon_core.verb.logger.log') as log:
        update_object(obj, key, 42, *msg_args)
    assert getattr(obj, key) == 42
    assert log.call_count == 1
    assert len(log.call_args[0]) == 2
    assert log.call_args[0][0] == logging.WARNING
    assert 'overwrite' in log.call_args[0][1]

    # an existing dictionary value is updated with the passed dictionary
    obj = argparse.Namespace()
    update_object(obj, key, {'foo': 'foo', 'bar': 'bar'}, *msg_args)
    with patch('colcon_core.verb.logger.log') as log:
        update_object(obj, key, {'bar': 'BAR', 'baz': 'BAZ'}, *msg_args)
    assert getattr(obj, key) == {'foo': 'foo', 'bar': 'BAR', 'baz': 'BAZ'}
    assert log.call_count == 1
    assert len(log.call_args[0]) == 2
    assert log.call_args[0][0] == 5
    assert 'update' in log.call_args[0][1]

    # an existing list value is extended with the passed list
    obj = argparse.Namespace()
    update_object(obj, key, ['foo', 'bar'], *msg_args)
    with patch('colcon_core.verb.logger.log') as log:
        update_object(obj, key, ['bar', 'baz'], *msg_args)
    assert getattr(obj, key) == ['foo', 'bar', 'bar', 'baz']
    assert log.call_count == 1
    assert len(log.call_args[0]) == 2
    assert log.call_args[0][0] == 5
    assert 'extend' in log.call_args[0][1]