Esempio n. 1
0
 def test_11_2(self):
     a = Version('1.0.0')
     b = Version('2.0.0')
     c = Version('2.1.0')
     d = Version('2.1.1')
     self.assertTrue(a < b)
     self.assertTrue(b < c)
     self.assertTrue(c < d)
     self.assertFalse(d < c)
Esempio n. 2
0
def test_tags_returns_ordered_newest_first() -> None:
    with patch("materialize.spawn.capture") as mock:
        # NOTE(benesch): we mock out the return value of `git tag` because local
        # Git clones are missing tags weirdly often. I'm not sure why.
        # Regardless, it's better for unit tests not to depend on the local Git
        # repository state.
        mock.return_value = """0.2.0
0.3.2-rc1
0.3.1"""
        tags = git.get_version_tags(fetch=False)
    assert tags == [
        Version.parse("0.3.2-rc1"),
        Version.parse("0.3.1"),
        Version.parse("0.2.0"),
    ]
 def test_1_0_0_0_build_1_rc_10000aaa_kk_0_1(self):
     version_string = '1.0.0+0.build.1-rc.10000aaa-kk-0.1'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(0, version.patch)
     self.assertEqual('0.build.1-rc.10000aaa-kk-0.1', version.buildmetadata)
 def test_2_0_1_alpha_1227(self):
     version_string = '2.0.1-alpha.1227'
     version = Version(version_string)
     self.assertEqual(2, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(1, version.patch)
     self.assertEqual('alpha.1227', version.prerelease)
 def test_1_0_0_beta(self):
     version_string = '1.0.0-beta'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(0, version.patch)
     self.assertEqual('beta', version.prerelease)
 def test_1_0_0_alpha_beta_1(self):
     version_string = '1.0.0-alpha.beta.1'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(0, version.patch)
     self.assertEqual('alpha.beta.1', version.prerelease)
 def test_99999999999999999999999_999999999999999999_99999999999999999(
         self):
     version_string = '99999999999999999999999.999999999999999999.99999999999999999'
     version = Version(version_string)
     self.assertEqual(99999999999999999999999, version.major)
     self.assertEqual(999999999999999999, version.minor)
     self.assertEqual(99999999999999999, version.patch)
 def test_1_0_0_0A_is_legal(self):
     version_string = '1.0.0-0A.is.legal'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(0, version.patch)
     self.assertEqual('0A.is.legal', version.prerelease)
 def test_1_2_3____RC_SNAPSHOT_12_9_1___12(self):
     version_string = '1.2.3----RC-SNAPSHOT.12.9.1--.12'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(2, version.minor)
     self.assertEqual(3, version.patch)
     self.assertEqual('---RC-SNAPSHOT.12.9.1--.12', version.prerelease)
 def test_1_0_0_alpha0_valid(self):
     version_string = '1.0.0-alpha0.valid'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(0, version.patch)
     self.assertEqual('alpha0.valid', version.prerelease)
 def test_2_0_0_build_1848(self):
     version_string = '2.0.0+build.1848'
     version = Version(version_string)
     self.assertEqual(2, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(0, version.patch)
     self.assertEqual('build.1848', version.buildmetadata)
 def test_1_1_2_meta_valid(self):
     version_string = '1.1.2+meta-valid'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(1, version.minor)
     self.assertEqual(2, version.patch)
     self.assertEqual('meta-valid', version.buildmetadata)
 def test_1_2_3_SNAPSHOT_123(self):
     version_string = '1.2.3-SNAPSHOT-123'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(2, version.minor)
     self.assertEqual(3, version.patch)
     self.assertEqual('SNAPSHOT-123', version.prerelease)
 def test_10_2_3_DEV_SNAPSHOT(self):
     version_string = '10.2.3-DEV-SNAPSHOT'
     version = Version(version_string)
     self.assertEqual(10, version.major)
     self.assertEqual(2, version.minor)
     self.assertEqual(3, version.patch)
     self.assertEqual('DEV-SNAPSHOT', version.prerelease)
 def test_1_2_3_beta(self):
     version_string = '1.2.3-beta'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(2, version.minor)
     self.assertEqual(3, version.patch)
     self.assertEqual('beta', version.prerelease)
 def test_1_1_2_prerelease_meta(self):
     version_string = '1.1.2-prerelease+meta'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(1, version.minor)
     self.assertEqual(2, version.patch)
     self.assertEqual('prerelease', version.prerelease)
     self.assertEqual('meta', version.buildmetadata)
 def test_1_2_3____R_S_12_9_1___12_meta(self):
     version_string = '1.2.3----R-S.12.9.1--.12+meta'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(2, version.minor)
     self.assertEqual(3, version.patch)
     self.assertEqual('---R-S.12.9.1--.12', version.prerelease)
     self.assertEqual('meta', version.buildmetadata)
 def test_1_0_0_alpha_beta2(self):
     version_string = '1.0.0-alpha+beta'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(0, version.patch)
     self.assertEqual('alpha', version.prerelease)
     self.assertEqual('beta', version.buildmetadata)
 def test_2_0_0_rc_1_build_123(self):
     version_string = '2.0.0-rc.1+build.123'
     version = Version(version_string)
     self.assertEqual(2, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(0, version.patch)
     self.assertEqual('rc.1', version.prerelease)
     self.assertEqual('build.123', version.buildmetadata)
 def test_1_0_0_alpha_a_b_c_somethinglong_build_1_aef_1_its_okay(self):
     version_string = '1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual(0, version.patch)
     self.assertEqual('alpha-a.b-c-somethinglong', version.prerelease)
     self.assertEqual('build.1-aef.1-its-okay', version.buildmetadata)
Esempio n. 21
0
 def test_11_4(self):
     a = Version('1.0.0-alpha')
     b = Version('1.0.0-alpha.1')
     c = Version('1.0.0-alpha.beta')
     d = Version('1.0.0-beta')
     e = Version('1.0.0-beta.2')
     f = Version('1.0.0-beta.11')
     g = Version('1.0.0-rc.1')
     h = Version('1.0.0')
     self.assertLess(a, b)
     self.assertLess(b, c)
     self.assertLess(c, d)
     self.assertLess(d, e)
     self.assertLess(e, f)
     self.assertLess(f, g)
     self.assertLess(g, h)
Esempio n. 22
0
def finish(create_branch: Optional[str], checkout: Optional[str],
           affect_remote: bool) -> None:
    """Create the final non-rc tag and a branch to incorporate into the repo"""
    if checkout is not None:
        tags = git.get_version_tags()
        tag = Version.parse(checkout.lstrip("v"))
        if tag not in tags:
            click.confirm(
                f"This version: {tag} doesn't look like an existing tag, "
                "are you sure you want to create a release from it?",
                abort=True,
            )
    else:
        tag = get_latest_tag(fetch=True)
    if not tag.prerelease or not tag.prerelease.startswith("rc"):
        click.confirm(
            f"This version: {tag} doesn't look like a prerelease, "
            "are you sure you want to continue?",
            abort=True,
        )
    new_version = tag.replace(prerelease=None)
    checkout = f"v{tag}"
    release(
        new_version,
        checkout=checkout,
        create_branch=None,
        tag=True,
        affect_remote=affect_remote,
    )

    update_upgrade_tests_inner(new_version, force=False)
    checkout = None
    incorporate_inner(create_branch,
                      checkout,
                      affect_remote,
                      fetch=False,
                      is_finish=True)
Esempio n. 23
0
 def test_sort(self):
     VERSION_STRINGS = [
         '0.0.4',
         '1.2.3',
         '10.20.30',
         '1.1.2-prerelease+meta',
         '1.1.2+meta',
         '1.1.2+meta-valid',
         '1.0.0-alpha',
         '1.0.0-beta',
         '1.0.0-alpha.beta',
         '1.0.0-alpha.beta.1',
         '1.0.0-alpha.1',
         '1.0.0-alpha0.valid',
         '1.0.0-alpha.0valid',
         '1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay',
         '1.0.0-rc.1+build.1',
         '2.0.0-rc.1+build.123',
         '1.2.3-beta',
         '10.2.3-DEV-SNAPSHOT',
         '1.2.3-SNAPSHOT-123',
         '1.0.0',
         '2.0.0',
         '1.1.7',
         '2.0.0+build.1848',
         '2.0.1-alpha.1227',
         '1.0.0-alpha+beta',
         '1.2.3----RC-SNAPSHOT.12.9.1--.12+788',
         '1.2.3----R-S.12.9.1--.12+meta',
         '1.2.3----RC-SNAPSHOT.12.9.1--.12',
         '1.0.0+0.build.1-rc.10000aaa-kk-0.1',
         '99999999999999999999999.999999999999999999.99999999999999999',
         '1.0.0-0A.is.legal',
     ]
     for version in sorted([Version(x) for x in VERSION_STRINGS]):
         print(f"DEBUG: version={version}")
Esempio n. 24
0
def list_prs(recent_ref: Optional[str], ancestor_ref: Optional[str]) -> None:
    """
    List PRs between a range of refs

    If no refs are specified, then this will find the refs between the most
    recent tag and the previous semver tag (i.e. excluding RCs)
    """
    git.fetch()
    if recent_ref is None or ancestor_ref is None:
        tags = git.get_version_tags(fetch=False)
        if recent_ref is None:
            recent = tags[0]
            recent_ref = str(tags[0])
        else:
            recent = Version.parse(recent_ref)
        if ancestor_ref is None:
            for ref in tags[1:]:
                ancestor = ref
                if (
                    ancestor.major < recent.major
                    or ancestor.minor < recent.minor
                    or ancestor.patch < recent.patch
                ):
                    ancestor_ref = str(ref)
                    break

            ui.say(
                f"Using recent_ref={recent_ref}  ancestor_ref={ancestor_ref}",
            )

    commit_range = f"v{ancestor_ref}..v{recent_ref}"
    commits = spawn.capture(
        [
            "git",
            "log",
            "--pretty=format:%d %s",
            "--abbrev-commit",
            "--date=iso",
            commit_range,
            "--",
        ],
        unicode=True,
    )

    pattern = re.compile(r"^\s*\(refs/pullreqs/(\d+)|\(#(\d+)")
    prs = []
    found_ref = False
    for commit in commits.splitlines():
        if "build(deps)" in commit:
            continue

        match = pattern.search(commit)
        if match is not None:
            pr = match.group(1)
            if pr:
                found_ref = True
            else:
                pr = match.group(2)
            prs.append(pr)

    if not found_ref:
        ui.say(
            "WARNING: you probably don't have pullreqs configured for your repo",
        )
        ui.say(
            "Add the following line to the MaterializeInc/materialize remote section in your .git/config",
        )
        ui.say("  fetch = +refs/pull/*/head:refs/pullreqs/*")

    username = input("Enter your github username: "******"~/.config/materialize/dev-tools-access-token")

    try:
        with open(creds_path) as fh:
            token = fh.read().strip()
    except FileNotFoundError:
        raise UIError(
            f"""No developer tool api token at {creds_path!r}
    please create an access token at https://github.com/settings/tokens"""
        )

    def get(pr: str) -> Any:
        return requests.get(
            f"https://{username}:{token}@api.github.com/repos/MaterializeInc/materialize/pulls/{pr}",
            headers={
                "Accept": "application/vnd.github.v3+json",
            },
        ).json()

    collected = []
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as pool:
        futures = {pool.submit(get, pr): pr for pr in prs}
        for future in concurrent.futures.as_completed(futures):
            pr = futures[future]
            contents = future.result()
            try:
                url = contents["html_url"]
                title = contents["title"]
                collected.append((url, title))
            except KeyError:
                raise UIError(contents)
    for url, title in sorted(collected):
        print(url, title)
 def test_1_2_RC_SNAPSHOT(self):
     with self.assertRaises(ValueError):
         Version('1.2-RC-SNAPSHOT')
 def test_1_0_0_alpha(self):
     version_string = '1.0.0-alpha'
     version = Version(version_string)
     self.assertEqual(1, version.major)
     self.assertEqual(0, version.minor)
     self.assertEqual('alpha', version.prerelease)
 def test__1_0_3_gamma_b7718(self):
     with self.assertRaises(ValueError):
         Version('-1.0.3-gamma+b7718')
 def test_99999999999999999999999_999999999999999999_99999999999999999____RC_SNAPSHOT_12_09_1__________________________________12(
         self):
     with self.assertRaises(ValueError):
         Version(
             '99999999999999999999999.999999999999999999.99999999999999999----RC-SNAPSHOT.12.09.1--------------------------------..12'
         )
 def test_9_8_7_whatever_meta_meta(self):
     with self.assertRaises(ValueError):
         Version('9.8.7-whatever+meta+meta')
 def test__justmeta(self):
     with self.assertRaises(ValueError):
         Version('+justmeta')