コード例 #1
0
    def _compute_root_packages(self, pool, install_map, update_map):
        """ Look at the root packages in the given maps.

        Root packages are packages which are not dependencies of other
        packages.
        """
        packages = OrderedDict(install_map)
        packages.update(update_map)

        roots = packages.copy()

        for package_id, operation in packages.items():
            package = operation.package

            if package_id not in roots:
                continue

            for dependency in package.dependencies:
                candidates = pool.what_provides(
                    Requirement.from_legacy_requirement_string(dependency)
                )
                for candidate in candidates:
                    candidate_id = pool.package_id(candidate)
                    roots.pop(candidate_id, None)

        return roots
コード例 #2
0
    def _compute_transaction_from_maps(self, pool, install_map, update_map,
                                       remove_map):
        operations = self._compute_root_packages(pool, install_map, update_map)
        queue = [operation.package for operation in operations.values()]

        visited_ids = set()

        # Install/update packages, starting from the ones which do not
        # depend on anything else (using topological sort)
        # FIXME: better implementation
        while len(queue) > 0:
            package = queue.pop()
            package_id = pool.package_id(package)

            if package_id in visited_ids:
                if package_id in install_map:
                    operation = install_map.pop(package_id)
                    self.install(operation.package)
                if package_id in update_map:
                    operation = update_map.pop(package_id)
                    self.update(operation.source, operation.package)
            else:
                queue.append(package)
                # We use sorted for determinism
                for dependency in sorted(package.dependencies):
                    package_requirement = \
                        Requirement.from_legacy_requirement_string(dependency)
                    candidates = pool.what_provides(package_requirement)
                    queue.extend(candidates)

                visited_ids.add(package_id)

        for operation in remove_map.values():
            self.remove(operation.package)
コード例 #3
0
    def _compute_root_packages(self, pool, install_map, update_map):
        """ Look at the root packages in the given maps.

        Root packages are packages which are not dependencies of other
        packages.
        """
        packages = OrderedDict(install_map)
        packages.update(update_map)

        roots = packages.copy()

        for package_id, operation in packages.items():
            package = operation.package

            if package_id not in roots:
                continue

            for dependency in package.dependencies:
                candidates = pool.what_provides(
                    Requirement.from_legacy_requirement_string(dependency))
                for candidate in candidates:
                    candidate_id = pool.package_id(candidate)
                    roots.pop(candidate_id, None)

        return roots
コード例 #4
0
    def _compute_transaction_from_maps(self, pool, install_map, update_map,
                                       remove_map):
        operations = self._compute_root_packages(pool, install_map, update_map)
        queue = [operation.package for operation in operations.values()]

        visited_ids = set()

        # Install/update packages, starting from the ones which do not
        # depend on anything else (using topological sort)
        # FIXME: better implementation
        while len(queue) > 0:
            package = queue.pop()
            package_id = pool.package_id(package)

            if package_id in visited_ids:
                if package_id in install_map:
                    operation = install_map.pop(package_id)
                    self.install(operation.package)
                if package_id in update_map:
                    operation = update_map.pop(package_id)
                    self.update(operation.source, operation.package)
            else:
                queue.append(package)
                # We use sorted for determinism
                for dependency in sorted(package.dependencies):
                    package_requirement = \
                        Requirement.from_legacy_requirement_string(dependency)
                    candidates = pool.what_provides(package_requirement)
                    queue.extend(candidates)

                visited_ids.add(package_id)

        for operation in remove_map.values():
            self.remove(operation.package)
コード例 #5
0
    def test_no_constraints(self):
        # Given
        requirement = Requirement._from_string("numpy")
        r_php_string = "*"

        # When
        php_string = _requirement_to_php_string(requirement)

        # Then
        self.assertEqual(php_string, r_php_string)
コード例 #6
0
    def test_single_constraint(self):
        # Given
        requirement = Requirement._from_string("numpy == 1.8.0-1")
        r_php_string = "1.8.0.0-patch1"

        # When
        php_string = _requirement_to_php_string(requirement)

        # Then
        self.assertEqual(php_string, r_php_string)

        # Given
        requirement = Requirement._from_string("numpy ~= 1.8.0")
        r_php_string = "~1.8.0.0"

        # When
        php_string = _requirement_to_php_string(requirement)

        # Then
        self.assertEqual(php_string, r_php_string)
コード例 #7
0
    def test_single_constraint(self):
        # Given
        request = Request()
        request.install(Requirement._from_string("numpy < 1.8"))
        r_php_parts = [
            ('install', 'numpy', ('VersionConstraint("<", "1.8.0.0")',)),
        ]

        # When
        php_parts = request_to_php_parts(request)

        # Then
        self.assertEqual(php_parts, r_php_parts)
コード例 #8
0
    def test_no_constraints(self):
        # Given
        request = Request()
        request.install(Requirement._from_string("numpy"))
        r_php_parts = [
            ('install', 'numpy', tuple()),
        ]

        # When
        php_parts = request_to_php_parts(request)

        # Then
        self.assertEqual(php_parts, r_php_parts)
コード例 #9
0
 def _find_updates(self, pool, package):
     requirement = Requirement._from_string(package.name)
     return [p for p in pool.what_provides(requirement)
             if p.version > package.version]
コード例 #10
0
 def _find_updates(self, pool, package):
     requirement = Requirement._from_string(package.name)
     return [
         p for p in pool.what_provides(requirement)
         if p.version > package.version
     ]