Skip to content

Commit 80f986b

Browse files
committed
2025-01-10T16:20:06Z
1 parent 757174c commit 80f986b

File tree

8 files changed

+74
-51
lines changed

8 files changed

+74
-51
lines changed

omdev/.manifests.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@
231231
"module": ".tools.cc",
232232
"attr": "_CLI_MODULE",
233233
"file": "omdev/tools/cc.py",
234-
"line": 76,
234+
"line": 136,
235235
"value": {
236236
"$.cli.types.CliModule": {
237237
"cmd_name": "cc",

omdev/cache/data/cache.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from omlish.formats import json
2828
from omlish.os.files import touch
2929

30-
from ...git.subtrees import git_clone_subtree
30+
from ...git.shallow import git_shallow_clone
3131
from .actions import Action
3232
from .actions import ExtractAction
3333
from .manifests import Manifest
@@ -141,14 +141,11 @@ def _fetch_into(self, spec: Spec, data_dir: str) -> None:
141141
self._fetch_url(url, os.path.join(data_dir, out_file))
142142

143143
elif isinstance(spec, GitSpec):
144-
if not spec.subtrees:
145-
raise NotImplementedError
146-
147144
tmp_dir = tempfile.mkdtemp()
148145

149146
log.info('Cloning git repo: %s -> %s', spec.url, tmp_dir)
150147

151-
git_clone_subtree(
148+
git_shallow_clone(
152149
base_dir=tmp_dir,
153150
repo_url=spec.url,
154151
repo_dir='data',

omdev/cache/data/specs.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class GitSpec(Spec):
5050
branch: str | None = dc.field(default=None, kw_only=True)
5151
rev: str | None = dc.field(default=None, kw_only=True)
5252

53-
subtrees: ta.Sequence[str] = dc.xfield(default=None, kw_only=True, coerce=_maybe_sorted_strs)
53+
subtrees: ta.Sequence[str] | None = dc.xfield(default=None, kw_only=True, coerce=_maybe_sorted_strs)
5454

5555

5656
##

omdev/git/subtrees.py renamed to omdev/git/shallow.py

+18-17
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010
@dc.dataclass(frozen=True)
11-
class GitSubtreeCloner:
11+
class GitShallowCloner:
1212
base_dir: str
1313
repo_url: str
1414
repo_dir: str
@@ -37,14 +37,14 @@ def build_commands(self) -> ta.Iterator[Command]:
3737
'-c', 'advice.detachedHead=false',
3838
]
3939

40-
yield GitSubtreeCloner.Command(
40+
yield GitShallowCloner.Command(
4141
cmd=(
4242
'git',
4343
*git_opts,
4444
'clone',
4545
'-n',
4646
'--depth=1',
47-
'--filter=tree:0',
47+
*(['--filter=tree:0'] if self.repo_subtrees is not None else []),
4848
*(['-b', self.branch] if self.branch else []),
4949
'--single-branch',
5050
self.repo_url,
@@ -54,19 +54,20 @@ def build_commands(self) -> ta.Iterator[Command]:
5454
)
5555

5656
rd = os.path.join(self.base_dir, self.repo_dir)
57-
yield GitSubtreeCloner.Command(
58-
cmd=(
59-
'git',
60-
*git_opts,
61-
'sparse-checkout',
62-
'set',
63-
'--no-cone',
64-
*(self.repo_subtrees or []),
65-
),
66-
cwd=rd,
67-
)
57+
if self.repo_subtrees is not None:
58+
yield GitShallowCloner.Command(
59+
cmd=(
60+
'git',
61+
*git_opts,
62+
'sparse-checkout',
63+
'set',
64+
'--no-cone',
65+
*self.repo_subtrees,
66+
),
67+
cwd=rd,
68+
)
6869

69-
yield GitSubtreeCloner.Command(
70+
yield GitShallowCloner.Command(
7071
cmd=(
7172
'git',
7273
*git_opts,
@@ -77,7 +78,7 @@ def build_commands(self) -> ta.Iterator[Command]:
7778
)
7879

7980

80-
def git_clone_subtree(
81+
def git_shallow_clone(
8182
*,
8283
base_dir: str,
8384
repo_url: str,
@@ -86,7 +87,7 @@ def git_clone_subtree(
8687
rev: ta.Optional[str] = None,
8788
repo_subtrees: ta.Optional[ta.Sequence[str]] = None,
8889
) -> None:
89-
for cmd in GitSubtreeCloner(
90+
for cmd in GitShallowCloner(
9091
base_dir=base_dir,
9192
repo_url=repo_url,
9293
repo_dir=repo_dir,

omdev/git/tests/test_subtree.py renamed to omdev/git/tests/test_shallow.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import tempfile
22

3-
from ..subtrees import git_clone_subtree
3+
from ..shallow import git_shallow_clone
44

55

6-
def test_subtree():
6+
def test_shallow_subtree():
77
td = tempfile.mkdtemp()
88
print(td)
99

10-
git_clone_subtree(
10+
git_shallow_clone(
1111
base_dir=td,
1212
repo_url='https://github.com/wrmsr/flaskthing',
1313
repo_dir='flaskthing',
@@ -20,7 +20,7 @@ def test_subtree():
2020
td = tempfile.mkdtemp()
2121
print(td)
2222

23-
git_clone_subtree(
23+
git_shallow_clone(
2424
base_dir=td,
2525
repo_url='https://github.com/wrmsr/flaskthing',
2626
repo_dir='flaskthing',

omdev/tools/cc.py

+25-2
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
import shutil
1919
import subprocess
2020
import tempfile
21+
import typing as ta
2122

2223
from omlish import check
2324
from omlish.argparse import all as ap
2425

2526
from .. import magic
27+
from ..cache import data as dcache
2628
from ..cli import CliModule
2729

2830

@@ -40,14 +42,32 @@ def run(self) -> int:
4042
with open(src_file) as f:
4143
src = f.read()
4244

43-
src_magic = magic.find_magic( # noqa
45+
src_magics = magic.find_magic( # noqa
4446
magic.C_MAGIC_STYLE,
4547
src.splitlines(),
4648
file=src_file,
4749
preparer=magic.json_magic_preparer,
4850
)
4951

50-
# print(src_magic)
52+
include_dirs: list[str] = []
53+
54+
for src_magic in src_magics:
55+
if src_magic.key == '@omlish-cdeps':
56+
for dep in check.isinstance(src_magic.prepared, ta.Sequence):
57+
dep_git = dep['git']
58+
dep_spec = dcache.GitSpec(
59+
url=dep_git['url'],
60+
rev=dep_git['rev'],
61+
subtrees=dep_git.get('subtrees'),
62+
)
63+
dep_dir = dcache.default().get(dep_spec)
64+
for dep_inc in dep.get('include', []):
65+
inc_dir = os.path.join(dep_dir, dep_inc)
66+
check.state(os.path.isdir(inc_dir))
67+
include_dirs.append(inc_dir)
68+
69+
else:
70+
raise KeyError(src_magic.key)
5171

5272
#
5373

@@ -57,6 +77,9 @@ def run(self) -> int:
5777
'clang++',
5878
]
5979

80+
for inc_dir in include_dirs:
81+
sh_parts.append(f'-I{shlex.quote(inc_dir)}')
82+
6083
if cflags := os.environ.get('CFLAGS'):
6184
sh_parts.append(cflags) # Explicitly shell-unquoted
6285

ominfra/manage/deploy/git.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import os.path
1111
import typing as ta
1212

13-
from omdev.git.subtrees import GitSubtreeCloner
13+
from omdev.git.shallow import GitShallowCloner
1414
from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
1515
from omlish.lite.cached import async_cached_nullary
1616
from omlish.lite.check import check
@@ -154,7 +154,7 @@ async def shallow_clone(
154154
) as dst_swap:
155155
tdn = '.omlish-git-shallow-clone'
156156

157-
for cmd in GitSubtreeCloner(
157+
for cmd in GitShallowCloner(
158158
base_dir=dst_swap.tmp_path,
159159
repo_url=self.make_repo_url(spec.repo),
160160
repo_dir=tdn,

ominfra/scripts/manage.py

+21-19
Original file line numberDiff line numberDiff line change
@@ -968,6 +968,7 @@ def __init__(
968968
self._payload_z = zlib.compress(self._prepared_payload_src.encode('utf-8'))
969969

970970
self._options_json = json.dumps(dc.asdict(options), indent=None, separators=(',', ':')).encode('utf-8') # noqa
971+
971972
#
972973

973974
@classmethod
@@ -8349,11 +8350,11 @@ async def try_output_str(
83498350

83508351

83518352
########################################
8352-
# ../../../omdev/git/subtrees.py
8353+
# ../../../omdev/git/shallow.py
83538354

83548355

83558356
@dc.dataclass(frozen=True)
8356-
class GitSubtreeCloner:
8357+
class GitShallowCloner:
83578358
base_dir: str
83588359
repo_url: str
83598360
repo_dir: str
@@ -8382,14 +8383,14 @@ def build_commands(self) -> ta.Iterator[Command]:
83828383
'-c', 'advice.detachedHead=false',
83838384
]
83848385

8385-
yield GitSubtreeCloner.Command(
8386+
yield GitShallowCloner.Command(
83868387
cmd=(
83878388
'git',
83888389
*git_opts,
83898390
'clone',
83908391
'-n',
83918392
'--depth=1',
8392-
'--filter=tree:0',
8393+
*(['--filter=tree:0'] if self.repo_subtrees is not None else []),
83938394
*(['-b', self.branch] if self.branch else []),
83948395
'--single-branch',
83958396
self.repo_url,
@@ -8399,19 +8400,20 @@ def build_commands(self) -> ta.Iterator[Command]:
83998400
)
84008401

84018402
rd = os.path.join(self.base_dir, self.repo_dir)
8402-
yield GitSubtreeCloner.Command(
8403-
cmd=(
8404-
'git',
8405-
*git_opts,
8406-
'sparse-checkout',
8407-
'set',
8408-
'--no-cone',
8409-
*(self.repo_subtrees or []),
8410-
),
8411-
cwd=rd,
8412-
)
8403+
if self.repo_subtrees is not None:
8404+
yield GitShallowCloner.Command(
8405+
cmd=(
8406+
'git',
8407+
*git_opts,
8408+
'sparse-checkout',
8409+
'set',
8410+
'--no-cone',
8411+
*self.repo_subtrees,
8412+
),
8413+
cwd=rd,
8414+
)
84138415

8414-
yield GitSubtreeCloner.Command(
8416+
yield GitShallowCloner.Command(
84158417
cmd=(
84168418
'git',
84178419
*git_opts,
@@ -8422,7 +8424,7 @@ def build_commands(self) -> ta.Iterator[Command]:
84228424
)
84238425

84248426

8425-
def git_clone_subtree(
8427+
def git_shallow_clone(
84268428
*,
84278429
base_dir: str,
84288430
repo_url: str,
@@ -8431,7 +8433,7 @@ def git_clone_subtree(
84318433
rev: ta.Optional[str] = None,
84328434
repo_subtrees: ta.Optional[ta.Sequence[str]] = None,
84338435
) -> None:
8434-
for cmd in GitSubtreeCloner(
8436+
for cmd in GitShallowCloner(
84358437
base_dir=base_dir,
84368438
repo_url=repo_url,
84378439
repo_dir=repo_dir,
@@ -11455,7 +11457,7 @@ async def shallow_clone(
1145511457
) as dst_swap:
1145611458
tdn = '.omlish-git-shallow-clone'
1145711459

11458-
for cmd in GitSubtreeCloner(
11460+
for cmd in GitShallowCloner(
1145911461
base_dir=dst_swap.tmp_path,
1146011462
repo_url=self.make_repo_url(spec.repo),
1146111463
repo_dir=tdn,

0 commit comments

Comments
 (0)