|
8 | 8 | from packaging.requirements import Requirement |
9 | 9 |
|
10 | 10 | from hab import NotSet, Resolver, Site, utils |
| 11 | +from hab.errors import InvalidRequirementError |
11 | 12 | from hab.solvers import Solver |
12 | 13 |
|
13 | 14 |
|
@@ -245,6 +246,13 @@ def test_distros(self, resolver): |
245 | 246 | " maya2020==2020.1", |
246 | 247 | "maya2024", |
247 | 248 | " maya2024==2024.0", |
| 249 | + "pre-release", |
| 250 | + " pre-release==1.0", |
| 251 | + " pre-release==1.0.dev1", |
| 252 | + " pre-release==1.1.dev2", |
| 253 | + "pre-release2", |
| 254 | + " pre-release2==1.0", |
| 255 | + " pre-release2==1.1.dev2", |
248 | 256 | "the_dcc", |
249 | 257 | " the_dcc==1.0", |
250 | 258 | " the_dcc==1.1", |
@@ -293,6 +301,13 @@ def test_distros_truncate(self, resolver): |
293 | 301 | " maya2020==2020.1", |
294 | 302 | "maya2024", |
295 | 303 | " maya2024==2024.0", |
| 304 | + "pre-release", |
| 305 | + " pre-release==1.0", |
| 306 | + " ...", |
| 307 | + " pre-release==1.1.dev2", |
| 308 | + "pre-release2", |
| 309 | + " pre-release2==1.0", |
| 310 | + " pre-release2==1.1.dev2", |
296 | 311 | "the_dcc", |
297 | 312 | " the_dcc==1.0", |
298 | 313 | " ...", |
@@ -563,6 +578,61 @@ def test_forced_requirements( |
563 | 578 | for i, v in enumerate(versions): |
564 | 579 | assert v.name == check_versions[i] |
565 | 580 |
|
| 581 | + @pytest.mark.parametrize( |
| 582 | + "requirements,prereleases,check", |
| 583 | + ( |
| 584 | + # Full release requirements respect `--pre` flag |
| 585 | + (["pre-release"], False, ["pre-release==1.0"]), |
| 586 | + (["pre-release"], True, ["pre-release==1.1.dev2"]), |
| 587 | + (["pre-release==1.0"], True, ["pre-release==1.0"]), |
| 588 | + (["pre-release==1.0"], False, ["pre-release==1.0"]), |
| 589 | + (["pre-release<=2.0"], True, ["pre-release==1.1.dev2"]), |
| 590 | + (["pre-release<=2.0"], False, ["pre-release==1.0"]), |
| 591 | + (["pre-release>=1.0"], True, ["pre-release==1.1.dev2"]), |
| 592 | + (["pre-release>=1.0"], False, ["pre-release==1.0"]), |
| 593 | + # Forced pre-release requirements will find pre-release distros |
| 594 | + # regardless of the `--pre` flag. |
| 595 | + (["pre-release==1.0rc99"], True, False), |
| 596 | + (["pre-release==1.0rc99"], False, False), |
| 597 | + (["pre-release==1.0.dev1"], True, ["pre-release==1.0.dev1"]), |
| 598 | + (["pre-release==1.0.dev1"], False, ["pre-release==1.0.dev1"]), |
| 599 | + (["pre-release<=1.0rc99"], True, ["pre-release==1.0.dev1"]), |
| 600 | + (["pre-release<=1.0rc99"], False, ["pre-release==1.0.dev1"]), |
| 601 | + # Forced pre-release requirements don't affect other requirements |
| 602 | + # regardless of the `--pre` flag. |
| 603 | + ( |
| 604 | + ["pre-release<=1.0rc99", "pre-release2"], |
| 605 | + False, |
| 606 | + ["pre-release==1.0.dev1", "pre-release2==1.0"], |
| 607 | + ), |
| 608 | + ( |
| 609 | + ["pre-release<=1.0rc99", "pre-release2"], |
| 610 | + True, |
| 611 | + ["pre-release==1.0.dev1", "pre-release2==1.1.dev2"], |
| 612 | + ), |
| 613 | + ), |
| 614 | + ) |
| 615 | + def test_pre_releases(self, habcached_resolver, requirements, prereleases, check): |
| 616 | + """Check how prereleases and specifying a version with prereleases works. |
| 617 | +
|
| 618 | + If the global prereleases is False, ignore any pre-release versions |
| 619 | + unless the version specifier itself specifies a pre-release. See |
| 620 | + `hab.parsers.distro.Distro.matching_versions` for details. |
| 621 | + """ |
| 622 | + habcached_resolver.prereleases = prereleases |
| 623 | + uri = "not_set/no_distros" |
| 624 | + |
| 625 | + if check is False: |
| 626 | + with pytest.raises(InvalidRequirementError): |
| 627 | + habcached_resolver.resolve(uri, forced_requirements=requirements) |
| 628 | + else: |
| 629 | + cfg = habcached_resolver.resolve(uri, forced_requirements=requirements) |
| 630 | + versions = cfg.versions |
| 631 | + |
| 632 | + assert len(versions) == len(check) |
| 633 | + for i, v in enumerate(versions): |
| 634 | + assert v.name == check[i] |
| 635 | + |
566 | 636 | def test_forced_requirements_uri(self, resolver, helpers): |
567 | 637 | resolver_forced = Resolver( |
568 | 638 | site=resolver.site, |
|
0 commit comments