diff --git a/README.md b/README.md index 4294453..3ef3d0b 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Project/Repo: [![MIT License][license_img]][license_ref] [![Supported Python Versions][pyversions_img]][pyversions_ref] -[![PyCalVer v202007.0036][version_img]][version_ref] +[![PyCalVer v202007.1036][version_img]][version_ref] [![PyPI Releases][pypi_img]][pypi_ref] [![PyPI Downloads][downloads_img]][downloads_ref] @@ -89,8 +89,9 @@ WARNING - File not found: pycalver.toml Exiting because of '--dry'. Would have written to pycalver.toml: [pycalver] - current_version = "v201902.0001-alpha" - version_pattern = "{pycalver}" + current_version = "v202010.1001-alpha" + version_pattern = "vYYYY0M.BUILD[-TAG]" + commit_message = "bump version to {new_version}" commit = true tag = true push = true @@ -123,8 +124,9 @@ This will add the something like the following to your `setup.cfg` ```ini # setup.cfg [pycalver] -current_version = "v201902.0001-alpha" -version_pattern = "{pycalver}" +current_version = "v201902.1001-alpha" +version_pattern = "vYYYY0M.BUILD[-TAG]" +commit_message = "bump version to {new_version}" commit = True tag = True push = True @@ -164,35 +166,35 @@ it would have made. ```shell $ pycalver bump --dry --no-fetch -INFO - Old Version: v201901.0001-beta -INFO - New Version: v201902.0002-beta +INFO - Old Version: v201901.1001-beta +INFO - New Version: v201902.1002-beta --- README.md +++ README.md @@ -11,7 +11,7 @@ [![Supported Python Versions][pyversions_img]][pyversions_ref] --[![Version v201901.0001][version_img]][version_ref] -+[![Version v201902.0002][version_img]][version_ref] +-[![Version v201901.1001-beta][version_img]][version_ref] ++[![Version v201902.1002-beta][version_img]][version_ref] [![PyPI Releases][pypi_img]][pypi_ref] --- src/mymodule_v1/__init__.py +++ src/mymodule_v1/__init__.py @@ -1,1 +1,1 @@ --__version__ = "v201901.0001-beta" -+__version__ = "v201902.0002-beta" +-__version__ = "v201901.1001-beta" ++__version__ = "v201902.1002-beta" --- src/mymodule_v2/__init__.py +++ src/mymodule_v2/__init__.py @@ -1,1 +1,1 @@ --__version__ = "v201901.0001-beta" -+__version__ = "v201902.0002-beta" +-__version__ = "v201901.1001-beta" ++__version__ = "v201902.1002-beta" --- setup.py +++ setup.py @@ -44,7 +44,7 @@ name="myproject", -- version="201901.1b0", -+ version="201902.2b0", +- version="201901.1001b0", ++ version="201902.1002b0", license="MIT", ``` @@ -485,10 +487,10 @@ maintainer and no build system) this is a non-issue and you can always use ```shell $ time pycalver show --verbose INFO - fetching tags from remote (to turn off use: -n / --no-fetch) -INFO - Working dir version : v201812.0018 -INFO - Latest version from git tag: v201901.0019-beta -Current Version: v201901.0019-beta -PEP440 : 201901.19b0 +INFO - Working dir version : v202010.1018 +INFO - Latest version from git tag: v202010.1019-beta +Current Version: v202010.1019-beta +PEP440 : 202010.1019b0 real 0m4,254s @@ -506,8 +508,9 @@ section: ```ini [pycalver] -current_version = "202008.1006-beta" -version_pattern = "YYYY0M.BUILD[-TAG]" +current_version = "v202010.1006-beta" +version_pattern = "vYYYY0M.BUILD[-TAG]" +commit_message = "bump version to {new_version}" commit = True tag = True push = True @@ -544,11 +547,11 @@ $ pycalver bump --dry @@ -65,7 +65,7 @@ [pycalver] --current_version = v202008.1005-beta -+current_version = v202008.1006-beta +-current_version = v202010.1005-beta ++current_version = v202010.1006-beta + version_pattern = "vYYYY0M.BUILD[-TAG]" + commit_message = "bump version to {new_version}" commit = True - tag = True - push = True ... ``` @@ -557,13 +560,47 @@ If everything looks OK, you can do `pycalver bump`. ``` $ pycalver bump --verbose INFO - fetching tags from remote (to turn off use: -n / --no-fetch) -INFO - Old Version: v202008.0005-beta -INFO - New Version: v202008.0006-beta -INFO - git commit --file /tmp/tmpph_npey9 -INFO - git tag --annotate v202008.0006-beta --message v202008.0006-beta -INFO - git push origin v202008.0006-beta +INFO - Old Version: v202010.1005-beta +INFO - New Version: v202010.1006-beta +INFO - git commit --message 'bump version to v202010.1006-beta' +INFO - git tag --annotate v202010.1006-beta --message v202010.1006-beta +INFO - git push origin v202010.1006-beta ``` +### Config Parameters + +TODO: Descriptions + +| Config Parameter | Type | Description | +|-------------------|---------|------------------------------| +| `current_version` | string | | +| `version_pattern` | string | | +| `commit_message` | string | ¹Template fro commit message | +| `commit` | boolean | | +| `tag` | boolean | | +| `push` | boolean | | + +- ¹ Available placeholders: + - `{new_version}` + - `{old_version}` + - `{new_version_pep440}` + - `{old_version_pep440}` + + +### CLI Arguments + +TODO: Descriptions + +| CLI Argument | Description | +|---------------|-------------| +| --major | | +| --minor | | +| --patch | | +| --pin-date | | +| --no-fetch | | +| --dry | | +| --allow-dirty | | + ## The PyCalVer Format diff --git a/src/pycalver/__main__.py b/src/pycalver/__main__.py index 9308217..54fc27d 100755 --- a/src/pycalver/__main__.py +++ b/src/pycalver/__main__.py @@ -392,15 +392,13 @@ def bump( if dry: return - # # TODO (mb 2020-09-05): format from config - # commit_message_kwargs = { - # new_version - # old_version - # pep440_new_version - # pep440_old_version - # } - # cfg.commit_message = - commit_message = f"bump version to {new_version}" + commit_message_kwargs = { + 'new_version' : new_version, + 'old_version' : old_version, + 'new_version_pep440': v1version.to_pep440(new_version), + 'old_version_pep440': v1version.to_pep440(old_version), + } + commit_message = cfg.commit_message.format(**commit_message_kwargs) _try_bump(cfg, new_version, commit_message, allow_dirty) diff --git a/src/pycalver/config.py b/src/pycalver/config.py index 57223f6..bfe26f6 100644 --- a/src/pycalver/config.py +++ b/src/pycalver/config.py @@ -23,6 +23,8 @@ PatternsByGlob = typ.Dict[str, Patterns] SUPPORTED_CONFIGS = ["setup.cfg", "pyproject.toml", "pycalver.toml"] +DEFAULT_COMMIT_MESSAGE = "bump version to {new_version}" + class ProjectContext(typ.NamedTuple): """Container class for project info.""" @@ -78,6 +80,7 @@ class Config(typ.NamedTuple): current_version: str version_pattern: str pep440_version : str + commit_message : str commit: bool tag : bool @@ -92,6 +95,7 @@ def _debug_str(cfg: Config) -> str: f"current_version='{cfg.current_version}'", "version_pattern='{pycalver}'", f"pep440_version='{cfg.pep440_version}'", + f"commit_message='{cfg.commit_message}'", f"commit={cfg.commit}", f"tag={cfg.tag}", f"push={cfg.push}", @@ -238,6 +242,8 @@ def _parse_config(raw_cfg: RawConfig) -> Config: version_pattern: str = raw_cfg.get('version_pattern', "{pycalver}") version_pattern = raw_cfg['version_pattern'] = version_pattern.strip("'\" ") + commit_message: str = raw_cfg.get('commit_message', DEFAULT_COMMIT_MESSAGE) + commit_message = raw_cfg['commit_message'] = commit_message.strip("'\" ") # NOTE (mb 2019-01-05): Provoke ValueError if version_pattern # and current_version are not compatible. version.parse_version_info(version_str, version_pattern) @@ -265,6 +271,7 @@ def _parse_config(raw_cfg: RawConfig) -> Config: current_version=version_str, version_pattern=version_pattern, pep440_version=pep440_version, + commit_message=commit_message, commit=commit, tag=tag, push=push, @@ -333,6 +340,7 @@ DEFAULT_CONFIGPARSER_BASE_TMPL = """ [pycalver] current_version = "{initial_version}" version_pattern = "{{pycalver}}" +commit_message = "bump version to {{new_version}}" commit = True tag = True push = True @@ -372,6 +380,7 @@ DEFAULT_TOML_BASE_TMPL = """ [pycalver] current_version = "{initial_version}" version_pattern = "{{pycalver}}" +commit_message = "bump version to {{new_version}}" commit = true tag = true push = true diff --git a/src/pycalver/vcs.py b/src/pycalver/vcs.py index d7d1e95..5eed4ce 100644 --- a/src/pycalver/vcs.py +++ b/src/pycalver/vcs.py @@ -33,7 +33,7 @@ VCS_SUBCOMMANDS_BY_NAME = { 'ls_tags' : "git tag --list", 'status' : "git status --porcelain", 'add_path' : "git add --update {path}", - 'commit' : "git commit --file {path}", + 'commit' : "git commit --message '{message}'", 'tag' : "git tag --annotate {tag} --message {tag}", 'push_tag' : "git push origin --follow-tags {tag}", 'show_remotes': "git config --get remote.origin.url", @@ -144,20 +144,25 @@ class VCSAPI: def commit(self, message: str) -> None: """Commit added files.""" - message_data = message.encode("utf-8") - - tmp_file = tempfile.NamedTemporaryFile("wb", delete=False) - assert " " not in tmp_file.name - - fobj: typ.IO[bytes] - - with tmp_file as fobj: - fobj.write(message_data) - env: Env = os.environ.copy() - env['HGENCODING'] = "utf-8" - self('commit', env=env, path=tmp_file.name) - os.unlink(tmp_file.name) + + if self.name == 'git': + self('commit', env=env, message=message) + else: + message_data = message.encode("utf-8") + tmp_file = tempfile.NamedTemporaryFile("wb", delete=False) + try: + assert " " not in tmp_file.name + + fobj: typ.IO[bytes] + + with tmp_file as fobj: + fobj.write(message_data) + + env['HGENCODING'] = "utf-8" + self('commit', env=env, path=tmp_file.name) + finally: + os.unlink(tmp_file.name) def tag(self, tag_name: str) -> None: """Create an annotated tag."""