def update_changelog_and_version():
    global __version_info__
    global __version__

    contents = changelog()
    assert '\r' not in contents
    lines = contents.split('\n')
    for i, l in enumerate(lines):
        if CHANGELOG_ANCHOR.match(l):
            assert CHANGELOG_BORDER.match(lines[i + 2]), repr(lines[i + 2])
            assert CHANGELOG_HEADER.match(lines[i + 3]), repr(lines[i + 3])
            assert CHANGELOG_BORDER.match(lines[i + 4]), repr(lines[i + 4])
            beginning = '\n'.join(lines[:i])
            rest = '\n'.join(lines[i:])
            assert '\n'.join((beginning, rest)) == contents
            break

    release_type, release_contents = parse_release_file()

    new_version_string, new_version_info = rm.bump_version_info(
        __version_info__, release_type)

    __version_info__ = new_version_info
    __version__ = new_version_string

    rm.replace_assignment(
        VERSION_FILE, '__version_info__', repr(new_version_info))

    heading_for_new_version = ' - '.join((
        new_version_string, rm.release_date_string()))
    border_for_new_version = '-' * len(heading_for_new_version)

    new_changelog_parts = [
        beginning.strip(),
        '',
        '.. _v%s:' % (new_version_string),
        '',
        border_for_new_version,
        heading_for_new_version,
        border_for_new_version,
        '',
        release_contents,
        '',
        rest
    ]

    with open(CHANGELOG_FILE, 'w') as o:
        o.write('\n'.join(new_changelog_parts))
Esempio n. 2
0
def update_changelog_and_version():
    """Update the changelog and version based on the current release file."""
    release_type, release_contents = parse_release_file()
    version = current_version()
    version_info = rm.parse_version(version)

    version, version_info = rm.bump_version_info(version_info, release_type)

    rm.replace_assignment(GEMSPEC_FILE, "s.version", repr(version))
    rm.replace_assignment(GEMSPEC_FILE, "s.date", repr(rm.release_date_string()))

    rm.update_markdown_changelog(
        CHANGELOG_FILE,
        name="Hypothesis for Ruby",
        version=version,
        entry=release_contents,
    )
    os.unlink(RELEASE_FILE)
def update_changelog_and_version():
    """Update the changelog and version based on the current release file."""
    release_type, release_contents = parse_release_file()
    version = current_version()
    version_info = rm.parse_version(version)

    version, version_info = rm.bump_version_info(version_info, release_type)

    rm.replace_assignment(GEMSPEC_FILE, 's.version', repr(version))
    rm.replace_assignment(
        GEMSPEC_FILE, 's.date', repr(rm.release_date_string())
    )

    rm.update_markdown_changelog(
        CHANGELOG_FILE,
        name='Hypothesis for Ruby',
        version=version,
        entry=release_contents,
    )
    os.unlink(RELEASE_FILE)
Esempio n. 4
0
def test_release_file_exists_and_is_valid(project, monkeypatch):
    assert not tools.has_uncommitted_changes(project.BASE_DIR)

    monkeypatch.setattr(tools, "create_tag", lambda *args, **kwargs: None)
    monkeypatch.setattr(tools, "push_tag", lambda name: None)
    monkeypatch.setattr(rm, "commit_pending_release", lambda p: None)
    monkeypatch.setattr(project, "upload_distribution", lambda: None)
    monkeypatch.setattr(project, "IN_TEST", True, raising=False)

    try:
        main.do_release(project)

        with open(project.CHANGELOG_FILE) as i:
            changelog = i.read()
        assert project.current_version() in changelog
        assert rm.release_date_string() in changelog

    finally:
        tools.git("checkout", project.BASE_DIR)
        os.chdir(tools.ROOT)
def test_release_file_exists_and_is_valid(project, monkeypatch):
    assert not tools.has_uncommitted_changes(project.BASE_DIR)

    monkeypatch.setattr(tools, "create_tag", lambda *args, **kwargs: None)
    monkeypatch.setattr(tools, "push_tag", lambda name: None)
    monkeypatch.setattr(rm, "commit_pending_release", lambda p: None)
    monkeypatch.setattr(project, "upload_distribution", lambda: None)
    monkeypatch.setattr(project, "IN_TEST", True, raising=False)

    try:
        main.do_release(project)

        with open(project.CHANGELOG_FILE) as i:
            changelog = i.read()
        assert project.current_version() in changelog
        assert rm.release_date_string() in changelog

    finally:
        tools.git("checkout", project.BASE_DIR)
        os.chdir(tools.ROOT)
def update_changelog_and_version():
    global __version_info__
    global __version__

    contents = changelog()
    assert "\r" not in contents
    lines = contents.split("\n")
    for i, l in enumerate(lines):
        if CHANGELOG_ANCHOR.match(l):
            assert CHANGELOG_BORDER.match(lines[i + 2]), repr(lines[i + 2])
            assert CHANGELOG_HEADER.match(lines[i + 3]), repr(lines[i + 3])
            assert CHANGELOG_BORDER.match(lines[i + 4]), repr(lines[i + 4])
            beginning = "\n".join(lines[:i])
            rest = "\n".join(lines[i:])
            assert "\n".join((beginning, rest)) == contents
            break

    release_type, release_contents = parse_release_file()

    new_version_string, new_version_info = rm.bump_version_info(
        __version_info__, release_type
    )

    __version_info__ = new_version_info
    __version__ = new_version_string

    if release_type == "major":
        major, _, _ = __version_info__
        old = f"Hypothesis {major - 1}.x"
        beginning = beginning.replace(old, f"Hypothesis {major}.x")
        rest = "\n".join([old, len(old) * "=", "", rest])

    rm.replace_assignment(VERSION_FILE, "__version_info__", repr(new_version_info))

    heading_for_new_version = " - ".join((new_version_string, rm.release_date_string()))
    border_for_new_version = "-" * len(heading_for_new_version)

    new_changelog_parts = [
        beginning.strip(),
        "",
        ".. _v%s:" % (new_version_string),
        "",
        border_for_new_version,
        heading_for_new_version,
        border_for_new_version,
        "",
        release_contents,
        "",
        rest,
    ]

    with open(CHANGELOG_FILE, "w") as o:
        o.write("\n".join(new_changelog_parts))

    # Replace the `since="RELEASEDAY"` argument to `note_deprecation`
    # with today's date, to record it for future reference.
    before = 'since="RELEASEDAY"'
    after = before.replace("RELEASEDAY", rm.release_date_string())
    for root, _, files in os.walk(PYTHON_SRC):
        for fname in (os.path.join(root, f) for f in files if f.endswith(".py")):
            with open(fname) as f:
                contents = f.read()
            if before in contents:
                with open(fname, "w") as f:
                    f.write(contents.replace(before, after))
def test_invalid_release():
    with pytest.raises(ValueError):
        parse_release("RELEASE_TYPE: wrong\nstuff")

    with pytest.raises(ValueError):
        parse_release("")


TEST_CHANGELOG = """
# A test project 1.2.3 (%s)

some stuff happened

# some previous log entry
""" % (release_date_string(), )


def test_update_changelog(tmpdir):
    path = tmpdir.join("CHANGELOG.md")
    path.write("# some previous log entry\n")
    update_markdown_changelog(str(path), "A test project", "1.2.3",
                              "some stuff happened")
    assert path.read().strip() == TEST_CHANGELOG.strip()


def test_changelog_parsing_strips_trailing_whitespace():
    header = "RELEASE_TYPE: patch\n\n"
    contents = "Adds a feature\n    indented.\n"
    level, out = parse_release(header +
                               contents.replace("feature", "feature    "))
def test_invalid_release():
    with pytest.raises(ValueError):
        parse_release('RELEASE_TYPE: wrong\nstuff')

    with pytest.raises(ValueError):
        parse_release('')


TEST_CHANGELOG = """
# A test project 1.2.3 (%s)

some stuff happened

# some previous log entry
""" % (release_date_string(),)


def test_update_changelog(tmpdir):
    path = tmpdir.join('CHANGELOG.md')
    path.write('# some previous log entry\n')
    update_markdown_changelog(
        str(path), 'A test project', '1.2.3', 'some stuff happened'
    )
    assert path.read().strip() == TEST_CHANGELOG.strip()


def test_changelog_parsing_strips_trailing_whitespace():
    header = 'RELEASE_TYPE: patch\n\n'
    contents = 'Adds a feature\n    indented.\n'
    level, out = parse_release(
def test_invalid_release():
    with pytest.raises(ValueError):
        parse_release("RELEASE_TYPE: wrong\nstuff")

    with pytest.raises(ValueError):
        parse_release("")


TEST_CHANGELOG = """
# A test project 1.2.3 (%s)

some stuff happened

# some previous log entry
""" % (
    release_date_string(),
)


def test_update_changelog(tmpdir):
    path = tmpdir.join("CHANGELOG.md")
    path.write("# some previous log entry\n")
    update_markdown_changelog(
        str(path), "A test project", "1.2.3", "some stuff happened"
    )
    assert path.read().strip() == TEST_CHANGELOG.strip()


def test_changelog_parsing_strips_trailing_whitespace():
    header = "RELEASE_TYPE: patch\n\n"
    contents = "Adds a feature\n    indented.\n"