예제 #1
0
 def test_loose_versions(self):
     output = []
     result = satisfying(["4.2.2", "4.2.3-pre"], "~4.2.1,loose=False", output)
     self.assertEqual(result, "4.2.2")
     result = satisfying(["1.1.1", "1.1.2", "1.2", "1.2.1", "1.3", "2.1"], "1.8||1.3,loose=False",
                         output)
     self.assertEqual(result, None)
     result = satisfying(["1.1.1", "1.1.2", "1.2", "1.2.1", "1.3", "2.1"],
                         "1.8||1.3, loose = False ", output)
     self.assertEqual(result, None)
     result = satisfying(["1.1.1", "1.1.2", "1.2", "1.2.1", "1.3", "2.1"], "1.8||1.3", output)
     self.assertEqual(result, "1.3")
예제 #2
0
    def _match_relaxed_require(self, ref):
        assert self._relaxed
        assert isinstance(ref, ConanFileReference)

        version = ref.version
        version_range = None
        if version.startswith("[") and version.endswith("]"):
            version_range = version[1:-1]

        if version_range:
            for id_, node in self._nodes.items():
                root_ref = node.ref
                if (ref.name == root_ref.name and ref.user == root_ref.user
                        and ref.channel == root_ref.channel):
                    output = []
                    result = satisfying([str(root_ref.version)], version_range,
                                        output)
                    if result:
                        return id_
        else:
            search_ref = repr(ref)
            if ref.revision:  # Search by exact ref (with RREV)
                node_id = self._find_first(
                    lambda n: n.ref and repr(n.ref) == search_ref)
            else:  # search by ref without RREV
                node_id = self._find_first(
                    lambda n: n.ref and str(n.ref) == search_ref)
            if node_id:
                return node_id
예제 #3
0
def check_cmd_version(
    cmd_name: str,
    ver_range_expr: str,
    ver_opts: typing.List[str] = ('--version',),
    ver_output_pattern: str = r'.*?([0-9][.0-9a-zA-Z-_]+)',
    log_output: typing.Union[ScopedOutput, logging.Logger] = default_logger
) -> bool:
    cmd = [
        cmd_name,
    ]
    cmd.extend(ver_opts)
    output = check_output_runner(cmd)
    if output:
        output = output.strip()
        match = re.match(ver_output_pattern, output)
        if match:
            results = []
            ver_str = match.group(1)
            log_output.info('{} version = {}'.format(cmd_name, ver_str))
            ver_satisfied = range_resolver.satisfying([ver_str,], ver_range_expr, results)
            for result in results:
                log_output.info(result)
            if ver_satisfied:
                return True
            else:
                log_output.info('{} version does not meet requirement {}'.format(cmd_name, ver_range_expr))
        else:
            msg = 'WARNING: output from {} is {}, which does not match version pattern `{}`'.format(' '.join(cmd), output, ver_output_pattern.pattern)
            log_output.warn(msg)
    else:
        log_output.warn('WARNING: no output from command {}'.format(' '.join(cmd)))
    return False
예제 #4
0
 def test_include_prerelease_versions(self):
     output = TestBufferConanOutput()
     result = satisfying(["4.2.2", "4.2.3-pre"], "~4.2.1,include_prerelease = True", output)
     self.assertEqual(result, "4.2.3-pre")
     result = satisfying(["4.2.2", "4.2.3-pre"], "~4.2.1", output)
     self.assertEqual(result, "4.2.2")
     # https://github.com/conan-io/conan/issues/7343
     result = satisfying(["1.0.0-pre"], "~1.0, include_prerelease=True", output)
     self.assertIsNone(result)
     result = satisfying(["1.2.0-pre"], "~1.0, include_prerelease=True", output)
     self.assertIsNone(result)
     # this matches, because it is equivalent to 1.0.X
     result = satisfying(["1.1.0-pre"], "~1.0, include_prerelease=True", output)
     self.assertEqual(result, "1.1.0-pre")
     result = satisfying(["1.0.0-pre"], "<1.0, include_prerelease=True", output)
     self.assertEqual(result, "1.0.0-pre")
     result = satisfying(["1.0.1-pre"], "~1.0, include_prerelease=True", output)
     self.assertEqual(result, "1.0.1-pre")
예제 #5
0
 def prereleases_versions_test(self):
     output = TestBufferConanOutput()
     result = satisfying(["1.1.1", "1.1.11", "1.1.21", "1.1.111"], "", output)
     self.assertEqual(result, "1.1.111")
     # prereleases are ordered
     result = satisfying(["1.1.1-a.1", "1.1.1-a.11", "1.1.1-a.111", "1.1.1-a.21"], "~1.1.1-a", output)
     self.assertEqual(result, "1.1.1-a.111")
     result = satisfying(["1.1.1", "1.1.1-11", "1.1.1-111", "1.1.1-21"], "", output)
     self.assertEqual(result, "1.1.1")
     result = satisfying(["4.2.2", "4.2.3-pre"], "~4.2.3-", output)
     self.assertEqual(result, "4.2.3-pre")
     result = satisfying(["4.2.2", "4.2.3-pre", "4.2.4"], "~4.2.3-", output)
     self.assertEqual(result, "4.2.4")
     result = satisfying(["4.2.2", "4.2.3-pre", "4.2.3"], "~4.2.3-", output)
     self.assertEqual(result, "4.2.3")
예제 #6
0
    def test_basic(self):
        output = []
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "", output)
        self.assertEqual(result, "2.1")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "1", output)
        self.assertEqual(result, "1.3")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "1.1", output)
        self.assertEqual(result, "1.1")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], ">1.1", output)
        self.assertEqual(result, "2.1")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "<1.3", output)
        self.assertEqual(result, "1.2")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "<=1.3", output)
        self.assertEqual(result, "1.3")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], ">1.1,<2.1", output)
        self.assertEqual(result, "1.3")
        result = satisfying(["1.1.1", "1.1.2", "1.2.1", "1.3", "2.1"], "<1.2", output)
        self.assertEqual(result, "1.1.2")
        result = satisfying(["1.1.1", "1.1.2", "1.2.1", "1.3", "2.1"], "<1.2.1", output)
        self.assertEqual(result, "1.1.2")
        result = satisfying(["1.1.1", "1.1.2", "1.2.1", "1.3", "2.1"], "<=1.2.1", output)
        self.assertEqual(result, "1.2.1")
        result = satisfying(["1.6.1"], ">1.5.0,<1.6.8", output)
        self.assertEqual(result, "1.6.1")
        result = satisfying(["1.1.1", "1.1.2", "1.2", "1.2.1", "1.3", "2.1"], "<=1.2", output)
        self.assertEqual(result, "1.2.1")
        result = satisfying(["1.1.1", "1.1.2", "1.2", "1.2.1", "1.3", "2.1"], "<1.3", output)
        self.assertEqual(result, "1.2.1")
        result = satisfying(["1.a.1", "master", "X.2", "1.2.1", "1.3", "2.1"], "1.3", output)
        self.assertIn("Version 'master' is not semver", "".join(output))
        self.assertEqual(result, "1.3")
        result = satisfying(["1.1.1", "1.1.2", "1.2", "1.2.1", "1.3", "2.1"], "1.8||1.3", output)
        self.assertEqual(result, "1.3")

        result = satisfying(["1.3", "1.3.1"], "<1.3", output)
        self.assertEqual(result, None)
        result = satisfying(["1.3.0", "1.3.1"], "<1.3", output)
        self.assertEqual(result, None)
        result = satisfying(["1.3", "1.3.1"], "<=1.3", output)
        self.assertEqual(result, "1.3.1")
        result = satisfying(["1.3.0", "1.3.1"], "<=1.3", output)
        self.assertEqual(result, "1.3.1")
        # >2 means >=3.0.0-0
        result = satisfying(["2.1"], ">2", output)
        self.assertEqual(result, None)
        result = satisfying(["2.1"], ">2.0", output)
        self.assertEqual(result, "2.1")
        # >2.1 means >=2.2.0-0
        result = satisfying(["2.1.1"], ">2.1", output)
        self.assertEqual(result, None)
        result = satisfying(["2.1.1"], ">2.1.0", output)
        self.assertEqual(result, "2.1.1")

        # Invalid ranges
        with self.assertRaises(ConanException):
            satisfying(["2.1.1"], "2.3 3.2; include_prerelease=True, loose=False", output)
        with self.assertRaises(ConanException):
            satisfying(["2.1.1"], "2.3 3.2, include_prerelease=Ture, loose=False", output)
        with self.assertRaises(ConanException):
            satisfying(["2.1.1"], "~2.3, abc, loose=False", output)
예제 #7
0
 def include_prerelease_versions_test(self):
     output = TestBufferConanOutput()
     result = satisfying(["4.2.2", "4.2.3-pre"], "~4.2.1,include_prerelease = True", output)
     self.assertEqual(result, "4.2.3-pre")
     result = satisfying(["4.2.2", "4.2.3-pre"], "~4.2.1", output)
     self.assertEqual(result, "4.2.2")
예제 #8
0
    def basic_test(self):
        output = TestBufferConanOutput()
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "", output)
        self.assertEqual(result, "2.1")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "1", output)
        self.assertEqual(result, "1.3")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "1.1", output)
        self.assertEqual(result, "1.1")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], ">1.1", output)
        self.assertEqual(result, "2.1")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "<1.3", output)
        self.assertEqual(result, "1.2")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], "<=1.3", output)
        self.assertEqual(result, "1.3")
        result = satisfying(["1.1", "1.2", "1.3", "2.1"], ">1.1,<2.1", output)
        self.assertEqual(result, "1.3")
        result = satisfying(["1.1.1", "1.1.2", "1.2.1", "1.3", "2.1"], "<1.2",
                            output)
        self.assertEqual(result, "1.1.2")
        result = satisfying(["1.1.1", "1.1.2", "1.2.1", "1.3", "2.1"],
                            "<1.2.1", output)
        self.assertEqual(result, "1.1.2")
        result = satisfying(["1.1.1", "1.1.2", "1.2.1", "1.3", "2.1"],
                            "<=1.2.1", output)
        self.assertEqual(result, "1.2.1")
        result = satisfying(["1.6.1"], ">1.5.0,<1.6.8", output)
        self.assertEqual(result, "1.6.1")
        result = satisfying(["1.1.1", "1.1.2", "1.2", "1.2.1", "1.3", "2.1"],
                            "<=1.2", output)
        self.assertEqual(result, "1.2.1")
        result = satisfying(["1.1.1", "1.1.2", "1.2", "1.2.1", "1.3", "2.1"],
                            "<1.3", output)
        self.assertEqual(result, "1.2.1")
        result = satisfying(["1.a.1", "master", "X.2", "1.2.1", "1.3", "2.1"],
                            "1.3", output)
        self.assertIn("Version 'master' is not semver", output)
        self.assertEqual(result, "1.3")
        result = satisfying(["1.1.1", "1.1.2", "1.2", "1.2.1", "1.3", "2.1"],
                            "1.8||1.3", output)
        self.assertEqual(result, "1.3")

        result = satisfying(["1.3", "1.3.1"], "<1.3", output)
        self.assertEqual(result, None)
        result = satisfying(["1.3.0", "1.3.1"], "<1.3", output)
        self.assertEqual(result, None)
        result = satisfying(["1.3", "1.3.1"], "<=1.3", output)
        self.assertEqual(result, "1.3.1")
        result = satisfying(["1.3.0", "1.3.1"], "<=1.3", output)
        self.assertEqual(result, "1.3.1")
        # >2 means >=3.0.0-0
        result = satisfying(["2.1"], ">2", output)
        self.assertEqual(result, None)
        result = satisfying(["2.1"], ">2.0", output)
        self.assertEqual(result, "2.1")
        # >2.1 means >=2.2.0-0
        result = satisfying(["2.1.1"], ">2.1", output)
        self.assertEqual(result, None)
        result = satisfying(["2.1.1"], ">2.1.0", output)
        self.assertEqual(result, "2.1.1")