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")
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
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
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")
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")
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)
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")
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")