omdev 0.0.0.dev69__tar.gz → 0.0.0.dev71__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.
Potentially problematic release.
This version of omdev might be problematic. Click here for more details.
- {omdev-0.0.0.dev69/omdev.egg-info → omdev-0.0.0.dev71}/PKG-INFO +5 -2
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/.manifests.json +25 -1
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/__about__.py +4 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cli/managers.py +1 -1
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/tools/gittools.py +50 -0
- omdev-0.0.0.dev71/omdev/tools/proftools.py +55 -0
- omdev-0.0.0.dev71/omdev/tools/rsttool.py +60 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71/omdev.egg-info}/PKG-INFO +5 -2
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev.egg-info/SOURCES.txt +2 -2
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev.egg-info/requires.txt +5 -1
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/pyproject.toml +6 -2
- omdev-0.0.0.dev69/omdev/tools/proftools.py +0 -4
- omdev-0.0.0.dev69/omdev/tools/rst.py +0 -44
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/LICENSE +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/README.rst +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/amalg/amalg.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/antlr/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/antlr/_antlr/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/antlr/consts.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/antlr/gen.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/bracepy.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/classdot.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cli/__main__.py +0 -0
- /omdev-0.0.0.dev69/omdev/cli/pathhack.py → /omdev-0.0.0.dev71/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/findimports.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/findmagic.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/git.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/providers.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/pyenv.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/standalone.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/system.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/manifests/build.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/manifests/load.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/manifests/types.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/precheck/precheck.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/revisions.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/scripts/execrss.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/scripts/exectime.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/scripts/interp.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/scripts/pyproject.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/secrets.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/tokens.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/toml/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/toml/parser.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/toml/writer.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/tools/dockertools.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/tools/importscan.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/tools/nbtools.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/tools/piptools.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev/wheelfile.py +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev69 → omdev-0.0.0.dev71}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev71
|
|
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.
|
|
15
|
+
Requires-Dist: omlish==0.0.0.dev71
|
|
16
16
|
Provides-Extra: all
|
|
17
17
|
Requires-Dist: black~=24.10; extra == "all"
|
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
|
@@ -20,6 +20,7 @@ Requires-Dist: cffi~=1.17; extra == "all"
|
|
|
20
20
|
Requires-Dist: pcpp~=1.30; extra == "all"
|
|
21
21
|
Requires-Dist: docutils~=0.21; extra == "all"
|
|
22
22
|
Requires-Dist: mypy~=1.11; extra == "all"
|
|
23
|
+
Requires-Dist: gprof2dot~=2024.6; extra == "all"
|
|
23
24
|
Requires-Dist: tokenize_rt~=6.0; extra == "all"
|
|
24
25
|
Requires-Dist: wheel~=0.44; extra == "all"
|
|
25
26
|
Provides-Extra: black
|
|
@@ -32,6 +33,8 @@ Provides-Extra: docutils
|
|
|
32
33
|
Requires-Dist: docutils~=0.21; extra == "docutils"
|
|
33
34
|
Provides-Extra: mypy
|
|
34
35
|
Requires-Dist: mypy~=1.11; extra == "mypy"
|
|
36
|
+
Provides-Extra: prof
|
|
37
|
+
Requires-Dist: gprof2dot~=2024.6; extra == "prof"
|
|
35
38
|
Provides-Extra: tokens
|
|
36
39
|
Requires-Dist: tokenize_rt~=6.0; extra == "tokens"
|
|
37
40
|
Provides-Extra: wheel
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
"module": ".tools.gittools",
|
|
136
136
|
"attr": "_CLI_MODULE",
|
|
137
137
|
"file": "omdev/tools/gittools.py",
|
|
138
|
-
"line":
|
|
138
|
+
"line": 124,
|
|
139
139
|
"value": {
|
|
140
140
|
"$.cli.types.CliModule": {
|
|
141
141
|
"cmd_name": "git",
|
|
@@ -194,6 +194,30 @@
|
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
},
|
|
197
|
+
{
|
|
198
|
+
"module": ".tools.proftools",
|
|
199
|
+
"attr": "_CLI_MODULE",
|
|
200
|
+
"file": "omdev/tools/proftools.py",
|
|
201
|
+
"line": 50,
|
|
202
|
+
"value": {
|
|
203
|
+
"$.cli.types.CliModule": {
|
|
204
|
+
"cmd_name": "prof",
|
|
205
|
+
"mod_name": "omdev.tools.proftools"
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"module": ".tools.rsttool",
|
|
211
|
+
"attr": "_CLI_MODULE",
|
|
212
|
+
"file": "omdev/tools/rsttool.py",
|
|
213
|
+
"line": 55,
|
|
214
|
+
"value": {
|
|
215
|
+
"$.cli.types.CliModule": {
|
|
216
|
+
"cmd_name": "rst",
|
|
217
|
+
"mod_name": "omdev.tools.rsttool"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
197
221
|
{
|
|
198
222
|
"module": ".tools.sqlrepl",
|
|
199
223
|
"attr": "_CLI_MODULE",
|
|
@@ -4,11 +4,35 @@ import subprocess
|
|
|
4
4
|
import urllib.parse
|
|
5
5
|
|
|
6
6
|
from omlish import argparse as ap
|
|
7
|
+
from omlish import check
|
|
7
8
|
from omlish import logs
|
|
8
9
|
|
|
9
10
|
from ..cli import CliModule
|
|
10
11
|
|
|
11
12
|
|
|
13
|
+
def rev_parse(rev: str) -> str:
|
|
14
|
+
return subprocess.check_output(['git', 'rev-parse', rev]).decode().strip()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_first_commit_of_day(rev: str) -> str | None:
|
|
18
|
+
commit_date = subprocess.check_output([
|
|
19
|
+
'git', 'show', '-s', '--format=%ci', rev,
|
|
20
|
+
]).decode().strip().split(' ')[0]
|
|
21
|
+
|
|
22
|
+
first_commit = subprocess.check_output([
|
|
23
|
+
'git', 'rev-list', '--reverse', '--max-parents=1',
|
|
24
|
+
'--since', f'{commit_date} 00:00:00',
|
|
25
|
+
'--until', f'{commit_date} 23:59:59',
|
|
26
|
+
rev,
|
|
27
|
+
]).decode().strip().splitlines()
|
|
28
|
+
|
|
29
|
+
# Return the first commit (if there is any)
|
|
30
|
+
if first_commit:
|
|
31
|
+
return first_commit[0]
|
|
32
|
+
else:
|
|
33
|
+
return None
|
|
34
|
+
|
|
35
|
+
|
|
12
36
|
class Cli(ap.Cli):
|
|
13
37
|
@ap.command()
|
|
14
38
|
def blob_sizes(self) -> None:
|
|
@@ -70,6 +94,32 @@ class Cli(ap.Cli):
|
|
|
70
94
|
|
|
71
95
|
print(out_dir)
|
|
72
96
|
|
|
97
|
+
@ap.command(
|
|
98
|
+
ap.arg('rev', nargs='?', default='HEAD'),
|
|
99
|
+
ap.arg('-d', '--diff', action='store_true'),
|
|
100
|
+
ap.arg('-s', '--diff-stat', action='store_true'),
|
|
101
|
+
ap.arg('-g', '--github', action='store_true'),
|
|
102
|
+
)
|
|
103
|
+
def recap(self) -> None:
|
|
104
|
+
rev = rev_parse(self.args.rev)
|
|
105
|
+
day_rev = check.not_none(get_first_commit_of_day(rev))
|
|
106
|
+
base_rev = rev_parse(f'{day_rev}~1')
|
|
107
|
+
|
|
108
|
+
if self.args.diff or self.args.diff_stat:
|
|
109
|
+
os.execvp('git', ['git', 'diff', *(['--stat'] if self.args.diff_stat else []), base_rev, rev])
|
|
110
|
+
|
|
111
|
+
elif self.args.github:
|
|
112
|
+
rm_url = subprocess.check_output(['git', 'remote', 'get-url', 'origin']).decode('utf-8').strip()
|
|
113
|
+
pu = urllib.parse.urlparse(rm_url)
|
|
114
|
+
check.equal(pu.scheme, 'https')
|
|
115
|
+
check.equal(pu.hostname, 'github.com')
|
|
116
|
+
_, user, repo, *_ = pu.path.split('/')
|
|
117
|
+
gh_url = f'https://github.com/{user}/{repo}/compare/{base_rev}...{rev}'
|
|
118
|
+
print(gh_url)
|
|
119
|
+
|
|
120
|
+
else:
|
|
121
|
+
print(base_rev)
|
|
122
|
+
|
|
73
123
|
|
|
74
124
|
# @omlish-manifest
|
|
75
125
|
_CLI_MODULE = CliModule('git', __name__)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import os.path
|
|
2
|
+
import subprocess
|
|
3
|
+
import sys
|
|
4
|
+
import tempfile
|
|
5
|
+
|
|
6
|
+
from omlish import argparse as ap
|
|
7
|
+
|
|
8
|
+
from ..cli import CliModule
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Cli(ap.Cli):
|
|
12
|
+
@ap.command(
|
|
13
|
+
ap.arg('file'),
|
|
14
|
+
ap.arg('out-file', nargs='?'),
|
|
15
|
+
ap.arg('-w', '--write', action='store_true'),
|
|
16
|
+
ap.arg('-o', '--overwrite', action='store_true'),
|
|
17
|
+
ap.arg('-O', '--open', action='store_true'),
|
|
18
|
+
)
|
|
19
|
+
def pstats_pdf(self) -> None:
|
|
20
|
+
out_file = self.args.out_file
|
|
21
|
+
if out_file is None and self.args.write:
|
|
22
|
+
out_file = self.args.file + '.pdf'
|
|
23
|
+
|
|
24
|
+
if out_file is not None:
|
|
25
|
+
if os.path.exists(out_file) and not self.args.overwrite:
|
|
26
|
+
raise OSError(f'File exists: {out_file}')
|
|
27
|
+
else:
|
|
28
|
+
out_file = tempfile.mktemp(suffix=os.path.basename(self.args.file) + '.pdf') # noqa
|
|
29
|
+
|
|
30
|
+
dot = subprocess.check_output([
|
|
31
|
+
sys.executable,
|
|
32
|
+
'-m', 'gprof2dot',
|
|
33
|
+
'-f', 'pstats',
|
|
34
|
+
self.args.file,
|
|
35
|
+
])
|
|
36
|
+
|
|
37
|
+
pdf = subprocess.check_output(
|
|
38
|
+
['dot', '-Tpdf'],
|
|
39
|
+
input=dot,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
with open(out_file, 'wb') as f:
|
|
43
|
+
f.write(pdf)
|
|
44
|
+
print(out_file)
|
|
45
|
+
|
|
46
|
+
if self.args.open:
|
|
47
|
+
subprocess.check_call(['open', out_file])
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
# @omlish-manifest
|
|
51
|
+
_CLI_MODULE = CliModule('prof', __name__)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
if __name__ == '__main__':
|
|
55
|
+
Cli()()
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO:
|
|
3
|
+
- omdev/rst.py *and* rsttool.py, when we want extracted helpers
|
|
4
|
+
"""
|
|
5
|
+
import contextlib
|
|
6
|
+
import io
|
|
7
|
+
import sys
|
|
8
|
+
|
|
9
|
+
import docutils.core
|
|
10
|
+
|
|
11
|
+
from omlish import argparse as ap
|
|
12
|
+
|
|
13
|
+
from ..cli import CliModule
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def rst2html(rst, report_level=None):
|
|
17
|
+
kwargs = {
|
|
18
|
+
'writer_name': 'html',
|
|
19
|
+
'settings_overrides': {
|
|
20
|
+
'_disable_config': True,
|
|
21
|
+
'report_level': int(report_level) if report_level else 0,
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
target = io.StringIO()
|
|
26
|
+
with contextlib.redirect_stderr(target):
|
|
27
|
+
parts = docutils.core.publish_parts(rst, **kwargs) # type: ignore
|
|
28
|
+
html = parts['html_body']
|
|
29
|
+
warning = target.getvalue().strip()
|
|
30
|
+
return html, warning
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Cli(ap.Cli):
|
|
34
|
+
@ap.command(
|
|
35
|
+
ap.arg('input-file', nargs='?'),
|
|
36
|
+
ap.arg('--report-level', type=int),
|
|
37
|
+
)
|
|
38
|
+
def html(self) -> None:
|
|
39
|
+
if self.args.input_file is not None:
|
|
40
|
+
with open(self.args.input_file) as f:
|
|
41
|
+
src = f.read()
|
|
42
|
+
else:
|
|
43
|
+
src = sys.stdin.read()
|
|
44
|
+
|
|
45
|
+
html, warning = rst2html(
|
|
46
|
+
src,
|
|
47
|
+
report_level=self.args.report_level,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
if warning:
|
|
51
|
+
sys.stderr.write(warning)
|
|
52
|
+
print(html)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# @omlish-manifest
|
|
56
|
+
_CLI_MODULE = CliModule('rst', __name__)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
if __name__ == '__main__':
|
|
60
|
+
Cli().call_and_exit()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev71
|
|
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.
|
|
15
|
+
Requires-Dist: omlish==0.0.0.dev71
|
|
16
16
|
Provides-Extra: all
|
|
17
17
|
Requires-Dist: black~=24.10; extra == "all"
|
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
|
@@ -20,6 +20,7 @@ Requires-Dist: cffi~=1.17; extra == "all"
|
|
|
20
20
|
Requires-Dist: pcpp~=1.30; extra == "all"
|
|
21
21
|
Requires-Dist: docutils~=0.21; extra == "all"
|
|
22
22
|
Requires-Dist: mypy~=1.11; extra == "all"
|
|
23
|
+
Requires-Dist: gprof2dot~=2024.6; extra == "all"
|
|
23
24
|
Requires-Dist: tokenize_rt~=6.0; extra == "all"
|
|
24
25
|
Requires-Dist: wheel~=0.44; extra == "all"
|
|
25
26
|
Provides-Extra: black
|
|
@@ -32,6 +33,8 @@ Provides-Extra: docutils
|
|
|
32
33
|
Requires-Dist: docutils~=0.21; extra == "docutils"
|
|
33
34
|
Provides-Extra: mypy
|
|
34
35
|
Requires-Dist: mypy~=1.11; extra == "mypy"
|
|
36
|
+
Provides-Extra: prof
|
|
37
|
+
Requires-Dist: gprof2dot~=2024.6; extra == "prof"
|
|
35
38
|
Provides-Extra: tokens
|
|
36
39
|
Requires-Dist: tokenize_rt~=6.0; extra == "tokens"
|
|
37
40
|
Provides-Extra: wheel
|
|
@@ -69,11 +69,11 @@ omdev/cexts/_distutils/compilers/options.py
|
|
|
69
69
|
omdev/cexts/_distutils/compilers/unixccompiler.py
|
|
70
70
|
omdev/cli/__init__.py
|
|
71
71
|
omdev/cli/__main__.py
|
|
72
|
+
omdev/cli/_pathhack.py
|
|
72
73
|
omdev/cli/clicli.py
|
|
73
74
|
omdev/cli/install.py
|
|
74
75
|
omdev/cli/main.py
|
|
75
76
|
omdev/cli/managers.py
|
|
76
|
-
omdev/cli/pathhack.py
|
|
77
77
|
omdev/cli/types.py
|
|
78
78
|
omdev/interp/__init__.py
|
|
79
79
|
omdev/interp/__main__.py
|
|
@@ -128,5 +128,5 @@ omdev/tools/mkrelimp.py
|
|
|
128
128
|
omdev/tools/nbtools.py
|
|
129
129
|
omdev/tools/piptools.py
|
|
130
130
|
omdev/tools/proftools.py
|
|
131
|
-
omdev/tools/
|
|
131
|
+
omdev/tools/rsttool.py
|
|
132
132
|
omdev/tools/sqlrepl.py
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
omlish==0.0.0.
|
|
1
|
+
omlish==0.0.0.dev71
|
|
2
2
|
|
|
3
3
|
[all]
|
|
4
4
|
black~=24.10
|
|
@@ -7,6 +7,7 @@ cffi~=1.17
|
|
|
7
7
|
pcpp~=1.30
|
|
8
8
|
docutils~=0.21
|
|
9
9
|
mypy~=1.11
|
|
10
|
+
gprof2dot~=2024.6
|
|
10
11
|
tokenize_rt~=6.0
|
|
11
12
|
wheel~=0.44
|
|
12
13
|
|
|
@@ -24,6 +25,9 @@ docutils~=0.21
|
|
|
24
25
|
[mypy]
|
|
25
26
|
mypy~=1.11
|
|
26
27
|
|
|
28
|
+
[prof]
|
|
29
|
+
gprof2dot~=2024.6
|
|
30
|
+
|
|
27
31
|
[tokens]
|
|
28
32
|
tokenize_rt~=6.0
|
|
29
33
|
|
|
@@ -12,7 +12,7 @@ authors = [
|
|
|
12
12
|
urls = {source = 'https://github.com/wrmsr/omlish'}
|
|
13
13
|
license = {text = 'BSD-3-Clause'}
|
|
14
14
|
requires-python = '~=3.12'
|
|
15
|
-
version = '0.0.0.
|
|
15
|
+
version = '0.0.0.dev71'
|
|
16
16
|
classifiers = [
|
|
17
17
|
'License :: OSI Approved :: BSD License',
|
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
|
@@ -22,7 +22,7 @@ classifiers = [
|
|
|
22
22
|
]
|
|
23
23
|
description = 'omdev'
|
|
24
24
|
dependencies = [
|
|
25
|
-
'omlish == 0.0.0.
|
|
25
|
+
'omlish == 0.0.0.dev71',
|
|
26
26
|
]
|
|
27
27
|
|
|
28
28
|
[project.optional-dependencies]
|
|
@@ -33,6 +33,7 @@ all = [
|
|
|
33
33
|
'pcpp ~= 1.30',
|
|
34
34
|
'docutils ~= 0.21',
|
|
35
35
|
'mypy ~= 1.11',
|
|
36
|
+
'gprof2dot ~= 2024.6',
|
|
36
37
|
'tokenize_rt ~= 6.0',
|
|
37
38
|
'wheel ~= 0.44',
|
|
38
39
|
]
|
|
@@ -50,6 +51,9 @@ docutils = [
|
|
|
50
51
|
mypy = [
|
|
51
52
|
'mypy ~= 1.11',
|
|
52
53
|
]
|
|
54
|
+
prof = [
|
|
55
|
+
'gprof2dot ~= 2024.6',
|
|
56
|
+
]
|
|
53
57
|
tokens = [
|
|
54
58
|
'tokenize_rt ~= 6.0',
|
|
55
59
|
]
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import contextlib
|
|
3
|
-
import io
|
|
4
|
-
import sys
|
|
5
|
-
|
|
6
|
-
import docutils.core
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def rst2html(rst, report_level=None):
|
|
10
|
-
kwargs = {
|
|
11
|
-
'writer_name': 'html',
|
|
12
|
-
'settings_overrides': {
|
|
13
|
-
'_disable_config': True,
|
|
14
|
-
'report_level': int(report_level) if report_level else 0,
|
|
15
|
-
},
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
target = io.StringIO()
|
|
19
|
-
with contextlib.redirect_stderr(target):
|
|
20
|
-
parts = docutils.core.publish_parts(rst, **kwargs) # type: ignore
|
|
21
|
-
html = parts['html_body']
|
|
22
|
-
warning = target.getvalue().strip()
|
|
23
|
-
return html, warning
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def _main() -> None:
|
|
27
|
-
parser = argparse.ArgumentParser()
|
|
28
|
-
parser.add_argument('input', nargs='?')
|
|
29
|
-
args = parser.parse_args()
|
|
30
|
-
|
|
31
|
-
if args.input:
|
|
32
|
-
with open(args.input) as f:
|
|
33
|
-
src = f.read()
|
|
34
|
-
else:
|
|
35
|
-
src = sys.stdin.read()
|
|
36
|
-
|
|
37
|
-
html, warning = rst2html(src)
|
|
38
|
-
if warning:
|
|
39
|
-
sys.stderr.write(warning)
|
|
40
|
-
print(html)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if __name__ == '__main__':
|
|
44
|
-
_main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|