omdev 0.0.0.dev233__py3-none-any.whl → 0.0.0.dev235__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
omdev/.manifests.json CHANGED
@@ -291,7 +291,7 @@
291
291
  "module": ".tools.git.messages",
292
292
  "attr": "_TIMESTAMP_GIT_MESSAGE_GENERATOR_MANIFEST",
293
293
  "file": "omdev/tools/git/messages.py",
294
- "line": 54,
294
+ "line": 74,
295
295
  "value": {
296
296
  "$.tools.git.messages.GitMessageGeneratorManifest": {
297
297
  "mod_name": "omdev.tools.git.messages",
omdev/cmake.py CHANGED
@@ -45,7 +45,6 @@ class Target(abc.ABC):
45
45
 
46
46
  @dc.dataclass(frozen=True)
47
47
  class Library(Target):
48
-
49
48
  @property
50
49
  def command_name(self) -> str:
51
50
  return 'add_library'
@@ -53,7 +52,6 @@ class Library(Target):
53
52
 
54
53
  @dc.dataclass(frozen=True)
55
54
  class StaticLibrary(Library):
56
-
57
55
  @property
58
56
  def command_extra(self) -> ta.Sequence[str]:
59
57
  return ['STATIC']
@@ -61,7 +59,6 @@ class StaticLibrary(Library):
61
59
 
62
60
  @dc.dataclass(frozen=True)
63
61
  class ModuleLibrary(Library):
64
-
65
62
  @property
66
63
  def command_extra(self) -> ta.Sequence[str]:
67
64
  return ['MODULE']
@@ -69,14 +66,12 @@ class ModuleLibrary(Library):
69
66
 
70
67
  @dc.dataclass(frozen=True)
71
68
  class Executable(Target):
72
-
73
69
  @property
74
70
  def command_name(self) -> str:
75
71
  return 'add_executable'
76
72
 
77
73
 
78
74
  class CmakeGen:
79
-
80
75
  def __init__(
81
76
  self,
82
77
  out: ta.TextIO,
@@ -17,7 +17,7 @@ from omlish.lite.check import check
17
17
  from omlish.lite.logs import log
18
18
  from omlish.logs.standard import configure_standard_logging
19
19
 
20
- from .git.revisions import get_git_revision
20
+ from ..git.revisions import get_git_revision
21
21
  from .wheelfile import WheelFile
22
22
 
23
23
 
omdev/pyproject/pkg.py CHANGED
@@ -42,7 +42,7 @@ from omlish.subprocesses.sync import subprocesses
42
42
 
43
43
  from ..cexts.magic import CextMagic
44
44
  from ..magic.find import find_magic_files
45
- from ..revisions import GitRevisionAdder
45
+ from ..packaging.revisions import GitRevisionAdder
46
46
 
47
47
 
48
48
  #
@@ -624,7 +624,7 @@ def canonicalize_version(
624
624
 
625
625
 
626
626
  ########################################
627
- # ../../wheelfile.py
627
+ # ../../packaging/wheelfile.py
628
628
  # https://github.com/pypa/wheel/blob/7bb46d7727e6e89fe56b3c78297b3af2672bbbe2/src/wheel/wheelfile.py
629
629
  # MIT License
630
630
  #
@@ -7236,7 +7236,7 @@ class Pyenv:
7236
7236
 
7237
7237
 
7238
7238
  ########################################
7239
- # ../../revisions.py
7239
+ # ../../packaging/revisions.py
7240
7240
  """
7241
7241
  TODO:
7242
7242
  - omlish-lite, move to pyproject/
omdev/tools/git/cli.py CHANGED
@@ -15,8 +15,10 @@ from omlish.logs import all as logs
15
15
 
16
16
  from ...git.status import GitStatusItem
17
17
  from ...git.status import get_git_status
18
+ from .messages import GitMessageGenerator
18
19
  from .messages import TimestampGitMessageGenerator
19
20
  from .messages import load_message_generator_manifests
21
+ from .messages import load_message_generator_manifests_map
20
22
 
21
23
 
22
24
  ##
@@ -189,7 +191,9 @@ class Cli(ap.Cli):
189
191
 
190
192
  @ap.cmd(
191
193
  ap.arg('-m', '--message', nargs='?'),
192
- ap.arg('--time-fmt', default=TimestampGitMessageGenerator.DEFAULT_TIME_FMT),
194
+ ap.arg('-g', '--message-generator', nargs='?'),
195
+ ap.arg('--time-fmt', default=GitMessageGenerator.GenerateCommitMessageArgs.DEFAULT_TIME_FMT),
196
+ ap.arg('--dry-run', action='store_true'),
193
197
  ap.arg('dir', nargs='*'),
194
198
  aliases=['acp'],
195
199
  )
@@ -198,16 +202,27 @@ class Cli(ap.Cli):
198
202
  st = get_git_status(cwd=cwd)
199
203
 
200
204
  if st.has_dirty:
201
- subprocess.check_call(['git', 'add', '.'], cwd=cwd)
205
+ if not self.args.dry_run:
206
+ subprocess.check_call(['git', 'add', '.'], cwd=cwd)
202
207
 
203
208
  if st.has_staged or st.has_dirty:
204
209
  if self.args.message is not None:
205
210
  msg = self.args.message
206
211
  else:
207
- msg = TimestampGitMessageGenerator(self.args.time_fmt).generate_commit_message()
208
- subprocess.check_call(['git', 'commit', '-m', msg], cwd=cwd)
209
-
210
- subprocess.check_call(['git', 'push'], cwd=cwd)
212
+ mg_cls: type[GitMessageGenerator] = TimestampGitMessageGenerator
213
+ if (mg_name := self.args.message_generator) is not None:
214
+ mg_cls = load_message_generator_manifests_map()[mg_name].get_cls()
215
+ mg = mg_cls()
216
+ msg = mg.generate_commit_message(GitMessageGenerator.GenerateCommitMessageArgs(
217
+ cwd=cwd,
218
+ time_fmt=self.args.time_fmt,
219
+ ))
220
+
221
+ if not self.args.dry_run:
222
+ subprocess.check_call(['git', 'commit', '-m', msg], cwd=cwd)
223
+
224
+ if not self.args.dry_run:
225
+ subprocess.check_call(['git', 'push'], cwd=cwd)
211
226
 
212
227
  if not self.args.dir:
213
228
  run(None)
@@ -1,9 +1,11 @@
1
1
  import abc
2
2
  import dataclasses as dc
3
+ import importlib
3
4
  import os
4
5
  import typing as ta
5
6
 
6
7
  from omlish import cached
8
+ from omlish import check
7
9
  from omlish import lang
8
10
  from omlish.manifests import load as manifest_load
9
11
 
@@ -12,8 +14,15 @@ from omlish.manifests import load as manifest_load
12
14
 
13
15
 
14
16
  class GitMessageGenerator(abc.ABC):
17
+ @dc.dataclass(frozen=True, kw_only=True)
18
+ class GenerateCommitMessageArgs:
19
+ cwd: str | None = None
20
+
21
+ DEFAULT_TIME_FMT: ta.ClassVar[str] = '%Y-%m-%dT%H:%M:%SZ'
22
+ time_fmt: str = DEFAULT_TIME_FMT
23
+
15
24
  @abc.abstractmethod
16
- def generate_commit_message(self) -> str:
25
+ def generate_commit_message(self, args: GenerateCommitMessageArgs) -> str:
17
26
  raise NotImplementedError
18
27
 
19
28
 
@@ -27,6 +36,10 @@ class GitMessageGeneratorManifest:
27
36
  name: str
28
37
  aliases: ta.Collection[str] | None = None
29
38
 
39
+ def get_cls(self) -> type[GitMessageGenerator]:
40
+ mod = importlib.import_module(self.mod_name)
41
+ return check.issubclass(getattr(mod, self.attr_name), GitMessageGenerator)
42
+
30
43
 
31
44
  @cached.function
32
45
  def load_message_generator_manifests() -> ta.Sequence[GitMessageGeneratorManifest]:
@@ -36,16 +49,23 @@ def load_message_generator_manifests() -> ta.Sequence[GitMessageGeneratorManifes
36
49
  return [mf.value for mf in mfs]
37
50
 
38
51
 
52
+ @cached.function
53
+ def load_message_generator_manifests_map() -> ta.Mapping[str, GitMessageGeneratorManifest]:
54
+ dct: dict[str, GitMessageGeneratorManifest] = {}
55
+ for m in load_message_generator_manifests():
56
+ for n in (m.name, *(m.aliases or ())):
57
+ check.not_in(n, dct)
58
+ dct[n] = m
59
+ return dct
60
+
61
+
39
62
  ##
40
63
 
41
64
 
42
65
  @dc.dataclass(frozen=True)
43
66
  class TimestampGitMessageGenerator(GitMessageGenerator):
44
- DEFAULT_TIME_FMT: ta.ClassVar[str] = '%Y-%m-%d %H:%M:%S'
45
- time_fmt: str = DEFAULT_TIME_FMT
46
-
47
- def generate_commit_message(self) -> str:
48
- return lang.utcnow().strftime(self.time_fmt)
67
+ def generate_commit_message(self, args: GitMessageGenerator.GenerateCommitMessageArgs) -> str:
68
+ return lang.utcnow().strftime(args.time_fmt)
49
69
 
50
70
 
51
71
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omdev
3
- Version: 0.0.0.dev233
3
+ Version: 0.0.0.dev235
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev233
15
+ Requires-Dist: omlish==0.0.0.dev235
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,15 +1,13 @@
1
- omdev/.manifests.json,sha256=-gFNSfj9LiUN5Wg47Jr9VVSd-Mhmhy8KMHhjmd_9RO0,9545
1
+ omdev/.manifests.json,sha256=qFKYwGJnQZsXpEFKYvzoSqimpWMnZkwwlJKlRDyPC-8,9545
2
2
  omdev/__about__.py,sha256=Iect_SBD2EXgx7QcFGiOqTHkOWD-bWOyvzgReDOY4Es,1214
3
3
  omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  omdev/bracepy.py,sha256=I8EdqtDvxzAi3I8TuMEW-RBfwXfqKbwp06CfOdj3L1o,2743
5
5
  omdev/classdot.py,sha256=YOvgy6x295I_8NKBbBlRVd3AN7Osirm_Lqt4Wj0j9rY,1631
6
- omdev/cmake.py,sha256=Diy2ry65806dQP125DAstD3w46z_wszMH7PwC2-6iik,4578
6
+ omdev/cmake.py,sha256=oBAp1K8h-iCDd9uCn-OpNpZ6n36oYFkWLIiTyQw4irU,4573
7
7
  omdev/findimports.py,sha256=2t8QP852saEEJFeXySEzhi_nxRSxghlkXz2jVdvy08M,2392
8
8
  omdev/imgur.py,sha256=Uyz8nkORlhfXXK5Sty16tX8ro8s-b7LrxjOECv4_sB0,3005
9
9
  omdev/pip.py,sha256=7cZ_IOpekQvgPm_gKnX3Pr8xjqUid50PPScTlZCYVlM,2118
10
- omdev/revisions.py,sha256=0feRWC0Uttd6K9cCImAHEXoo6-Nuso3tpaHUuhzBlRQ,4985
11
10
  omdev/tagstrings.py,sha256=zIP7nzcsZf5te0lphu6k36ND_cOvNFRg00neoTcoCs8,5484
12
- omdev/wheelfile.py,sha256=yfupGcGkbFlmzGzKU64k_vmOKpaKnUlDWxeGn2KdekU,10005
13
11
  omdev/amalg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
12
  omdev/amalg/__main__.py,sha256=1sZH8SLAueWxMxK9ngvndUW3L_rw7f-s_jK3ZP1yAH8,170
15
13
  omdev/amalg/gen.py,sha256=GPHXtsywa0Pb4v5pN2icMCW30bRt-yF3uKUxvBLQh1Y,6069
@@ -178,8 +176,10 @@ omdev/packaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
176
  omdev/packaging/marshal.py,sha256=c4Mdy5-s4O51eEKMWWBwkhTGQ1FoxVI2lD6CxI_cF3k,2379
179
177
  omdev/packaging/names.py,sha256=-a7AykFPVR1i6EYJepbe3ABRrZQ_tPPmK5olzbn9HLI,2528
180
178
  omdev/packaging/requires.py,sha256=7xyGLX9wk_sb9KI0U7Wcajhn8rJpTjzY3QQmUJoMgcg,15680
179
+ omdev/packaging/revisions.py,sha256=3u-6vY0mq01tgRENcncozsMLXSgtaQWXuQp0kRkEHvg,4986
181
180
  omdev/packaging/specifiers.py,sha256=X8xOcwRLXTQYx5mYAS3ijqoTLlCtYESyUu4fX9bvblY,17447
182
181
  omdev/packaging/versions.py,sha256=K4eUOUvLmYcR4aeUywekeWTBqAvZchrIxLf7dl07MS4,12261
182
+ omdev/packaging/wheelfile.py,sha256=yfupGcGkbFlmzGzKU64k_vmOKpaKnUlDWxeGn2KdekU,10005
183
183
  omdev/precheck/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
184
184
  omdev/precheck/__main__.py,sha256=UEuS4z5-heIrwTtB-ONe1KeXJdqj8tYXMqWMpuO10so,165
185
185
  omdev/precheck/base.py,sha256=a_lGoFM-QhL8u8XDUYFhb-feEyfPbP4j8lcmNO51sHY,732
@@ -200,7 +200,7 @@ omdev/pyproject/cexts.py,sha256=x13piOOnNrYbA17qZLDVuR0p1sqhgEwpk4FtImX-klM,4281
200
200
  omdev/pyproject/cli.py,sha256=Jp3OTevYndvtid2fr-Q7rWza29GnLexotmf19JJcX-o,8743
201
201
  omdev/pyproject/configs.py,sha256=HEo90bPUAo6CBnBHZFDYohlwiRD-4cxZCYR6oXv-5lQ,2802
202
202
  omdev/pyproject/inject.py,sha256=PgZnfWGoqjHsaHLUEPJaQW_66h1LRuSm8Njl--KDzOw,314
203
- omdev/pyproject/pkg.py,sha256=bPQQIfxfSkAEmENMBwJzWCLrywMUbeVmbwjP-NHxOf4,14570
203
+ omdev/pyproject/pkg.py,sha256=NcyHxTYFKJ3TGod-ewKUWZVp_dYb2EXjbf9gkKJCN38,14580
204
204
  omdev/pyproject/reqs.py,sha256=8feZ71YnGzwKbLK4zO28CDQeNcZIIuq6cnkBhs6M-7E,2406
205
205
  omdev/pyproject/venvs.py,sha256=GUurjC7qzGlFL-su4C0YPO_pxbwDAyl1CqyLOB3WLCA,1911
206
206
  omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -213,7 +213,7 @@ omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
213
213
  omdev/scripts/exectime.py,sha256=S2O4MgtzTsFOY2IUJxsrnOIame9tEFc6aOlKP-F1JSg,1541
214
214
  omdev/scripts/importtrace.py,sha256=oa7CtcWJVMNDbyIEiRHej6ICfABfErMeo4_haIqe18Q,14041
215
215
  omdev/scripts/interp.py,sha256=tBIiJAd5OLBhvhuH_Lj7uFGWreJQjHSVr-2MgqTGYPo,150419
216
- omdev/scripts/pyproject.py,sha256=BxsTCENusscEFdRa5DaXwe7TA5-76_F3qvSiPODo4u8,258092
216
+ omdev/scripts/pyproject.py,sha256=aMmQuIMRxULdnDmecIGiSBgDtfnzpSSNILXRjYJbRkI,258112
217
217
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
218
218
  omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
219
219
  omdev/tokens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -235,8 +235,8 @@ omdev/tools/qr.py,sha256=tm68lPwEAkEwIL2sUKPKBYfwwPtjVWG1DBZwur8_jY8,1737
235
235
  omdev/tools/sqlrepl.py,sha256=wAjrfXNrRV63-NJCC2HlGQnFh7lUH0bHMnOjYotQqFs,5753
236
236
  omdev/tools/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
237
237
  omdev/tools/git/__main__.py,sha256=gI87SBUgTkKUcUM-RtZWnei-UUDDqzbr5aPztb-gvbE,168
238
- omdev/tools/git/cli.py,sha256=0MwnDO4V-i3jvtCd9W0VR9LJjicY2_WoKq47_UhqNAA,7762
239
- omdev/tools/git/messages.py,sha256=gcXjzBUFOcL8Kia5x-t8jyN-aBLcHVhnfJX-lxXiQ3I,1299
238
+ omdev/tools/git/cli.py,sha256=jXEnMpw1WZpICwyhktQElkUuEpVhju3twN_CafYs2Ws,8516
239
+ omdev/tools/git/messages.py,sha256=D3u6DApTjWT9q329VRpCl7mvams-xYWjVvQI0amTnQE,2070
240
240
  omdev/tools/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
241
241
  omdev/tools/json/__main__.py,sha256=wqpkN_NsQyNwKW4qjVj8ADJ4_C98KhrFBtE-Z1UamfU,168
242
242
  omdev/tools/json/cli.py,sha256=EubIMT-n2XsjWBZjSy2fWXqijlwrIhLsfbkg3SZzi28,9586
@@ -248,9 +248,9 @@ omdev/tools/json/rendering.py,sha256=tMcjOW5edfozcMSTxxvF7WVTsbYLoe9bCKFh50qyaGw
248
248
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
249
249
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
250
250
  omdev/tools/pawk/pawk.py,sha256=zsEkfQX0jF5bn712uqPAyBSdJt2dno1LH2oeSMNfXQI,11424
251
- omdev-0.0.0.dev233.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
252
- omdev-0.0.0.dev233.dist-info/METADATA,sha256=6zcFwHMj4lJLXVZN67ExkhjSsNb1SrxwP51TBb9Lt60,1636
253
- omdev-0.0.0.dev233.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
254
- omdev-0.0.0.dev233.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
255
- omdev-0.0.0.dev233.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
256
- omdev-0.0.0.dev233.dist-info/RECORD,,
251
+ omdev-0.0.0.dev235.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
252
+ omdev-0.0.0.dev235.dist-info/METADATA,sha256=j2CxaL7vG7m9JHXYNaUZJVux695Lq1bJ6MMMtNXsQJk,1636
253
+ omdev-0.0.0.dev235.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
254
+ omdev-0.0.0.dev235.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
255
+ omdev-0.0.0.dev235.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
256
+ omdev-0.0.0.dev235.dist-info/RECORD,,
File without changes