Skip to content

Commit

Permalink
Merge pull request #381 from madig/switch-to-setuptools_scm
Browse files Browse the repository at this point in the history
Switch from bump_version to setuptools_scm
  • Loading branch information
madig authored Jul 18, 2018
2 parents 3763a84 + 9280e8f commit fe3cb96
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 142 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ __pycache__/
*.eggs
build
dist
_version.py

# Unit test
.cache/
Expand Down
5 changes: 4 additions & 1 deletion Lib/glyphsLib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@
from glyphsLib.writer import dump, dumps
from glyphsLib.util import clean_ufo, ufo_create_background_layer_for_all_glyphs

__version__ = "2.4.1.dev0"
try:
from ._version import version as __version__
except ImportError:
__version__ = "0.0.0+unknown"

# Doing `import *` from a module that uses unicode_literals, produces
# "TypeError: Item in ``from list'' must be str, not unicode" on Python 2.
Expand Down
144 changes: 3 additions & 141 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,147 +13,13 @@
# limitations under the License.

import sys
from setuptools import setup, find_packages, Command
from distutils import log


class bump_version(Command):

description = "increment the package version and commit the changes"

user_options = [
("major", None, "bump the first digit, for incompatible API changes"),
("minor", None, "bump the second digit, for new backward-compatible features"),
("patch", None, "bump the third digit, for bug fixes (default)"),
]

def initialize_options(self):
self.minor = False
self.major = False
self.patch = False

def finalize_options(self):
part = None
for attr in ("major", "minor", "patch"):
if getattr(self, attr, False):
if part is None:
part = attr
else:
from distutils.errors import DistutilsOptionError
raise DistutilsOptionError(
"version part options are mutually exclusive")
self.part = part or "patch"

def bumpversion(self, part, **kwargs):
""" Run bumpversion.main() with the specified arguments.
"""
import bumpversion

args = ['--verbose'] if self.verbose > 1 else []
for k, v in kwargs.items():
k = "--{}".format(k.replace("_", "-"))
is_bool = isinstance(v, bool) and v is True
args.extend([k] if is_bool else [k, str(v)])
args.append(part)

log.debug(
"$ bumpversion %s" % " ".join(a.replace(" ", "\\ ") for a in args))

bumpversion.main(args)

def run(self):
log.info("bumping '%s' version" % self.part)
self.bumpversion(self.part)


class release(bump_version):
"""Drop the developmental release '.devN' suffix from the package version,
open the default text $EDITOR to write release notes, commit the changes
and generate a git tag.
Release notes can also be set with the -m/--message option, or by reading
from standard input.
"""

description = "tag a new release"

user_options = [
("message=", 'm', "message containing the release notes"),
("sign", "s", "make a GPG-signed tag, using the default key"),
]

def initialize_options(self):
self.message = None
self.sign = False

def finalize_options(self):
import re

current_version = self.distribution.metadata.get_version()
if not re.search(r"\.dev[0-9]+", current_version):
from distutils.errors import DistutilsSetupError
raise DistutilsSetupError(
"current version (%s) has no '.devN' suffix.\n "
"Run 'setup.py bump_version' with any of "
"--major, --minor, --patch options" % current_version)

message = self.message
if message is None:
if sys.stdin.isatty():
# stdin is interactive, use editor to write release notes
message = self.edit_release_notes()
else:
# read release notes from stdin pipe
message = sys.stdin.read()

if not message.strip():
from distutils.errors import DistutilsSetupError
raise DistutilsSetupError("release notes message is empty")

self.message = "v{new_version}\n\n%s" % message
self.sign = bool(self.sign)

@staticmethod
def edit_release_notes():
"""Use the default text $EDITOR to write release notes.
If $EDITOR is not set, use 'nano'."""
from tempfile import mkstemp
import os
import shlex
import subprocess

text_editor = shlex.split(os.environ.get('EDITOR', 'nano'))

fd, tmp = mkstemp(prefix='bumpversion-')
try:
os.close(fd)
with open(tmp, 'w') as f:
f.write("\n\n# Write release notes.\n"
"# Lines starting with '#' will be ignored.")
subprocess.check_call(text_editor + [tmp])
with open(tmp, 'r') as f:
changes = "".join(
l for l in f.readlines() if not l.startswith('#'))
finally:
os.remove(tmp)
return changes

def run(self):
log.info("stripping developmental release suffix")
# drop '.dev0' suffix, commit with given message and create git tag
self.bumpversion("release",
tag=True,
message="Release {new_version}",
tag_message=self.message,
sign_tags=self.sign)
from setuptools import setup, find_packages


needs_pytest = {'pytest', 'test'}.intersection(sys.argv)
pytest_runner = ['pytest_runner'] if needs_pytest else []
needs_wheel = {'bdist_wheel'}.intersection(sys.argv)
wheel = ['wheel'] if needs_wheel else []
needs_bump2version = {'release', 'bump_version'}.intersection(sys.argv)
bump2version = ['bump2version >= 0.5.7'] if needs_bump2version else []

with open('README.rst', 'r') as f:
long_description = f.read()
Expand All @@ -167,7 +33,7 @@ def run(self):

setup(
name='glyphsLib',
version='2.4.1.dev0',
use_scm_version={"write_to": "Lib/glyphsLib/_version.py"},
author="James Godfrey-Kittle",
author_email="[email protected]",
description="A bridge from Glyphs source files (.glyphs) to UFOs",
Expand All @@ -182,16 +48,12 @@ def run(self):
"glyphs2ufo = glyphsLib.cli:_glyphs2ufo_entry_point",
],
},
setup_requires=pytest_runner + wheel + bump2version,
setup_requires=pytest_runner + wheel + ["setuptools_scm"],
tests_require=test_requires,
install_requires=[
"fonttools>=3.24.0",
"defcon>=0.3.0",
],
cmdclass={
"release": release,
"bump_version": bump_version,
},
classifiers=[
'Development Status :: 4 - Beta',
"Environment :: Console",
Expand Down

0 comments on commit fe3cb96

Please sign in to comment.