PyVCC 1.2.2__tar.gz → 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyVCC
3
- Version: 1.2.2
3
+ Version: 1.3.0
4
4
  Summary: PyVCC python version controller using conventional commits
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: pygit2>=1.18.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "PyVCC"
3
- version = "1.2.2"
3
+ version = "1.3.0"
4
4
  description = "PyVCC python version controller using conventional commits"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -0,0 +1,46 @@
1
+ """
2
+ Entry point for running the package as a module.
3
+ """
4
+
5
+ import logging
6
+ import os
7
+ import structlog
8
+ import sys
9
+ import argparse
10
+ from pyvcc.cli import main, validate_args
11
+
12
+
13
+ if __name__ == "__main__":
14
+ parser = argparse.ArgumentParser(prog="PyVC", description=__doc__)
15
+ parser.add_argument("--root", type=str, default=".", required=False)
16
+ parser.add_argument("--initial-version", type=str, required=False, default="0.1.0")
17
+ parser.add_argument("--initial-commit", type=str, required=False, default="")
18
+ parser.add_argument("--verbose", "-v", action="store_true", required=False)
19
+ parser.add_argument("--silent", "-s", action="store_true", required=False)
20
+
21
+ args = parser.parse_args()
22
+ root = os.getenv(key="PYVC_REPO_ROOT", default=args.root)
23
+ version = os.getenv(key="PYVC_INITIAL_VERSION", default=args.initial_version)
24
+ commit = os.getenv(key="PYVC_INITIAL_COMMIT", default=args.initial_commit)
25
+ if not validate_args(root=root, version=version):
26
+ sys.exit(1)
27
+
28
+ log_level = logging.INFO
29
+ if args.verbose:
30
+ log_level = logging.DEBUG
31
+ if args.silent:
32
+ log_level = logging.CRITICAL
33
+ structlog.configure(
34
+ processors=[
35
+ structlog.dev.set_exc_info,
36
+ structlog.processors.add_log_level,
37
+ structlog.processors.StackInfoRenderer(),
38
+ structlog.dev.ConsoleRenderer(colors=True),
39
+ ],
40
+ wrapper_class=structlog.make_filtering_bound_logger(log_level),
41
+ logger_factory=structlog.PrintLoggerFactory(),
42
+ cache_logger_on_first_use=True,
43
+ )
44
+
45
+ version = main(root, version, commit)
46
+ sys.stdout.write(version)
@@ -2,9 +2,10 @@
2
2
  CLI parsing for pyvc command.
3
3
  """
4
4
 
5
- from pygit2 import Commit
6
5
  import structlog
6
+
7
7
  from pathlib import Path, PurePath
8
+ from pygit2 import Commit
8
9
  from pygit2.repository import Repository
9
10
  from pygit2.enums import SortMode
10
11
 
@@ -48,8 +49,8 @@ def main(root: str, version: str, start_commit_id: str | None = None) -> str:
48
49
 
49
50
  for commit in commit_walker:
50
51
  message = commit.message
51
- log.info("commit", id=commit.id, short=commit.short_id)
52
+ log.debug("commit", id=commit.id, short=commit.short_id)
52
53
  semver.bump_version(message)
53
54
 
54
- log.info(f"final version {str(semver)}")
55
+ log.debug(f"final version {str(semver)}")
55
56
  return str(semver)
@@ -1,7 +1,9 @@
1
- from enum import Enum, auto
1
+ import re
2
2
  import sys
3
3
  import structlog
4
4
 
5
+ from enum import Enum, auto
6
+
5
7
  # Python 3.11+ has Self in typing module
6
8
  if sys.version_info >= (3, 11):
7
9
  from typing import Self
@@ -94,14 +96,15 @@ class SemVer:
94
96
  message (str): commit message content
95
97
  """
96
98
 
99
+ regex = re.compile(r"[.*]?([a-z]*!?)(\(.*\))?:\s(.*)$")
97
100
  bump = BumpEnum.NO_BUMP
98
101
  head = message.split("\n")[0]
99
102
 
100
- # TODO: regex?
101
- parsed_head = head.split(":")
103
+ parsed_head = regex.search(head)
102
104
 
103
- if len(parsed_head) > 1:
104
- commit_type = parsed_head[0].strip().upper()
105
+ if parsed_head is not None:
106
+ commit_type = parsed_head.groups()[0].upper()
107
+ log.debug("trying bump", type=commit_type, message=head)
105
108
 
106
109
  if cls.is_breaking_change(commit_type, message):
107
110
  bump = BumpEnum.MAJOR
@@ -112,7 +115,7 @@ class SemVer:
112
115
  else:
113
116
  bump = BumpEnum.NO_BUMP
114
117
  else:
115
- log.info("not in conventional commit spec", message=head)
118
+ log.error("not in conventional commit spec", message=head)
116
119
 
117
120
  return bump
118
121
 
@@ -51,6 +51,20 @@ def test_no_bump_no_type(no_cc_simple_commit: tuple[str, str]):
51
51
  assert str(version) == "1.0.0"
52
52
 
53
53
 
54
+ def test_bump_merge():
55
+ version = SemVer(1, 0, 0)
56
+ message = "Merged feat!(xyz): break"
57
+ version.bump_version(message)
58
+ assert str(version) == "2.0.0"
59
+
60
+
61
+ def test_bump_merge2():
62
+ version = SemVer(1, 0, 0)
63
+ message = "Merged feat(xyz): break"
64
+ version.bump_version(message)
65
+ assert str(version) == "1.1.0"
66
+
67
+
54
68
  def test_bump_multiple():
55
69
  """patch -> minor -> major"""
56
70
  version = SemVer(0, 1, 0)
@@ -107,6 +121,26 @@ def test_bump_multiple4():
107
121
  assert str(version) == "0.2.0"
108
122
 
109
123
 
124
+ def test_bump_multiple5():
125
+ """patch -> patch -> minor"""
126
+ version = SemVer(0, 1, 0)
127
+
128
+ version.bump_version("fix: Fix login bug")
129
+ assert str(version) == "0.1.1"
130
+
131
+ version.bump_version("fix: Fix logout bug")
132
+ assert str(version) == "0.1.2"
133
+
134
+ version.bump_version("Fix logout bug")
135
+ assert str(version) == "0.1.2"
136
+
137
+ version.bump_version("feat(asdf): Add new feature")
138
+ assert str(version) == "0.2.0"
139
+
140
+ version.bump_version("Merge feat!(asdf): break new feature")
141
+ assert str(version) == "1.0.0"
142
+
143
+
110
144
  def test_parse_semver_str():
111
145
  version = SemVer.semver_from_string("1.1.0")
112
146
  assert str(version) == "1.1.0"
@@ -1,27 +0,0 @@
1
- """
2
- Entry point for running the package as a module.
3
- """
4
-
5
- import os
6
- import sys
7
- import argparse
8
- import structlog
9
- from pyvc.cli import main, validate_args
10
-
11
-
12
- log = structlog.get_logger()
13
-
14
- if __name__ == "__main__":
15
- parser = argparse.ArgumentParser(prog="PyVC", description=__doc__)
16
- parser.add_argument("--root", type=str, default=".", required=False)
17
- parser.add_argument("--initial-version", type=str, required=False, default="0.1.0")
18
- parser.add_argument("--initial-commit", type=str, required=False, default="")
19
-
20
- args = parser.parse_args()
21
- root = os.getenv(key="PYVC_REPO_ROOT", default=args.root)
22
- version = os.getenv(key="PYVC_INITIAL_VERSION", default=args.initial_version)
23
- commit = os.getenv(key="PYVC_INITIAL_COMMIT", default=args.initial_commit)
24
- if not validate_args(root=root, version=version):
25
- sys.exit(1)
26
-
27
- main(root, version, commit)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes