Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def needs_cutting(self):
expected = "\x1b[31m\u2718 needs cutting\x1b(B\x1b[m"
assert Tag.NEEDS_CUTTING.value == expected
def changelog_release_version_update_tag_cut(self):
# TODO: do we want some sort of "and here's _what_ you
# ought to be adding as the new release and/or version
# value" aspect to the actions? can leave up to user
# for now, but, more automation is better.
_expect_actions(
self,
Changelog.NEEDS_RELEASE,
VersionFile.NEEDS_BUMP,
Tag.NEEDS_CUTTING,
)
# TODO: make things more organic/specific/less tabular:
#
# current git branch: xxx (implies type yyy)
# changelog: xxx
# so the next release would be: a.b.c (or: 'so the release we're
# cutting/expecting is a.b.c')
# version file:
# git tag: (maybe including
# latest that is found? that's extra logic...)
# etc...
parts = dict(
changelog=Changelog.NEEDS_RELEASE.value,
version=VersionFile.NEEDS_BUMP.value,
tag=Tag.NEEDS_CUTTING.value,
)
for part in parts:
parts[part] = re.escape(parts[part])
parts["header_footer"] = r"-+ +-+"
# NOTE: forces impl to follow specific order, which is good
regex = r"""
{header_footer}
Changelog +{changelog}
Version +{version}
Tag +{tag}
{header_footer}
""".format(
**parts
).strip()
output = sys.stdout.getvalue()
err = "Expected:\n\n{0}\n\nGot:\n\n{1}".format(regex, output)
# assumption...GREAT opportunity for class/method based tasks!
cmd = "$EDITOR {0.packaging.changelog_file}".format(c)
c.run(cmd, pty=True, hide=False)
# TODO: add a step for checking reqs.txt / setup.py vs virtualenv contents
# Version file!
if actions.version == VersionFile.NEEDS_BUMP:
# TODO: suggest the bump and/or overwrite the entire file? Assumes a
# specific file format. Could be bad for users which expose __version__
# but have other contents as well.
version_file = os.path.join(
_find_package(c),
c.packaging.get("version_module", "_version") + ".py",
)
cmd = "$EDITOR {0}".format(version_file)
c.run(cmd, pty=True, hide=False)
if actions.tag == Tag.NEEDS_CUTTING:
# Commit, if necessary, so the tag includes everything.
# NOTE: this strips out untracked files. effort.
cmd = 'git status --porcelain | egrep -v "^\\?"'
if c.run(cmd, hide=True, warn=True).ok:
c.run(
'git commit -am "Cut {0}"'.format(state.expected_version),
hide=False,
)
# Tag!
c.run("git tag {0}".format(state.expected_version), hide=False)
# TODO: print something to clarify/confirm tag was cut, if not just