Skip to content

Commit be19061

Browse files
committed
index: load meta from outs.files
1 parent eebc43d commit be19061

File tree

4 files changed

+49
-11
lines changed

4 files changed

+49
-11
lines changed

dvc/repo/index.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,25 @@ def _load_data_from_outs(index, prefix, outs):
129129
for key_len in range(1, len(key)):
130130
parents.add((ws, key[:key_len]))
131131

132+
loaded = None
133+
if out.files:
134+
loaded = True
135+
for okey, ometa, ohi in out.get_obj():
136+
for key_len in range(1, len(okey)):
137+
parents.add((ws, (*key, *okey[:key_len])))
138+
139+
fkey = (*key, *okey)
140+
index[(*prefix, ws, *fkey)] = DataIndexEntry(
141+
key=fkey,
142+
meta=ometa,
143+
hash_info=ohi,
144+
)
145+
132146
entry = DataIndexEntry(
133147
key=key,
134148
meta=out.meta,
135149
hash_info=out.hash_info,
150+
loaded=loaded,
136151
)
137152

138153
if (

dvc/testing/cloud.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ def write_text(self, contents, encoding=None, errors=None):
3232
def write_bytes(self, contents):
3333
raise NotImplementedError
3434

35+
@abstractmethod
36+
def unlink(self, missing_ok: bool = False) -> None:
37+
pass
38+
39+
@abstractmethod
40+
def rmdir(self, recursive: bool = True) -> None:
41+
pass
42+
3543
def read_text(self, encoding=None, errors=None):
3644
if not encoding:
3745
encoding = locale.getpreferredencoding(False)

dvc/testing/remote_tests.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def test_file(self, tmp_dir, dvc, run_copy, remote_version_aware):
171171
(stage,) = tmp_dir.dvc_gen("foo", "foo")
172172
run_copy("foo", "foo_copy", name="copy")
173173

174-
dvc.push()
174+
assert dvc.push()
175175
assert (remote_version_aware / "foo").read_text() == "foo"
176176
assert (remote_version_aware / "foo_copy").read_text() == "foo"
177177
foo_dvc = (tmp_dir / "foo.dvc").read_text()
@@ -185,26 +185,26 @@ def test_file(self, tmp_dir, dvc, run_copy, remote_version_aware):
185185
remove(tmp_dir / "foo")
186186
remove(tmp_dir / "foo_copy")
187187

188-
dvc.pull()
188+
assert dvc.pull()
189189
assert (tmp_dir / "foo").read_text() == "foo"
190190
assert (tmp_dir / "foo_copy").read_text() == "foo"
191191
assert (tmp_dir / "foo.dvc").read_text() == foo_dvc
192192
assert (tmp_dir / "dvc.lock").read_text() == dvc_lock
193193

194-
dvc.push()
194+
assert not dvc.push()
195195
assert (remote_version_aware / "foo").read_text() == "foo"
196196
assert (remote_version_aware / "foo_copy").read_text() == "foo"
197197
assert (tmp_dir / "foo.dvc").read_text() == foo_dvc
198198
assert (tmp_dir / "dvc.lock").read_text() == dvc_lock
199199

200200
dvc.reproduce()
201-
dvc.push()
201+
assert not dvc.push()
202202
assert (remote_version_aware / "foo").read_text() == "foo"
203203
assert (remote_version_aware / "foo_copy").read_text() == "foo"
204204
assert (tmp_dir / "foo.dvc").read_text() == foo_dvc
205205
assert (tmp_dir / "dvc.lock").read_text() == dvc_lock
206206

207-
def test_dir(self, tmp_dir, dvc, run_copy, remote_version_aware):
207+
def test_dir(self, tmp_dir, dvc, run_copy, remote_version_aware): # noqa: PLR0915
208208
(stage,) = tmp_dir.dvc_gen(
209209
{
210210
"data_dir": {
@@ -215,7 +215,7 @@ def test_dir(self, tmp_dir, dvc, run_copy, remote_version_aware):
215215
}
216216
)
217217

218-
dvc.push()
218+
assert dvc.push()
219219

220220
data_dir_dvc = (tmp_dir / "data_dir.dvc").read_text()
221221
assert "files" in data_dir_dvc
@@ -230,7 +230,7 @@ def test_dir(self, tmp_dir, dvc, run_copy, remote_version_aware):
230230
remove(dvc.cache.local.path)
231231
remove(tmp_dir / "data_dir")
232232

233-
dvc.pull()
233+
assert dvc.pull()
234234
assert (tmp_dir / "data_dir" / "data").read_text() == "data"
235235
assert (
236236
tmp_dir / "data_dir" / "data_sub_dir" / "data_sub"
@@ -240,7 +240,7 @@ def test_dir(self, tmp_dir, dvc, run_copy, remote_version_aware):
240240
run_copy("data_dir", "data_dir_copy", name="copy")
241241
dvc_lock = (tmp_dir / "dvc.lock").read_text()
242242

243-
dvc.push()
243+
assert dvc.push()
244244
assert (remote_version_aware / "data_dir").exists()
245245
assert (remote_version_aware / "data_dir" / "data").exists()
246246
assert (remote_version_aware / "data_dir_copy").exists()
@@ -249,7 +249,7 @@ def test_dir(self, tmp_dir, dvc, run_copy, remote_version_aware):
249249
assert (tmp_dir / "dvc.lock").read_text() != dvc_lock
250250
dvc_lock = (tmp_dir / "dvc.lock").read_text()
251251

252-
dvc.push()
252+
assert not dvc.push()
253253
assert (remote_version_aware / "data_dir").exists()
254254
assert (remote_version_aware / "data_dir" / "data").exists()
255255
assert (remote_version_aware / "data_dir_copy").exists()
@@ -259,14 +259,29 @@ def test_dir(self, tmp_dir, dvc, run_copy, remote_version_aware):
259259

260260
dvc.cache.local.clear()
261261
remove(tmp_dir / "data_dir")
262-
dvc.push()
262+
remove(tmp_dir / "data_dir_copy")
263+
assert not dvc.push()
263264
assert (remote_version_aware / "data_dir").exists()
264265
assert (remote_version_aware / "data_dir" / "data").exists()
265266
assert (remote_version_aware / "data_dir_copy").exists()
266267
assert (remote_version_aware / "data_dir_copy" / "data").exists()
267268
assert (tmp_dir / "data_dir.dvc").read_text() == data_dir_dvc
268269
assert (tmp_dir / "dvc.lock").read_text() == dvc_lock
269270

271+
(remote_version_aware / "data_dir").rmdir()
272+
(remote_version_aware / "data_dir_copy").rmdir()
273+
assert not (remote_version_aware / "data_dir").exists()
274+
assert not (remote_version_aware / "data_dir_copy").exists()
275+
assert dvc.pull()
276+
assert (tmp_dir / "data_dir" / "data").read_text() == "data"
277+
assert (
278+
tmp_dir / "data_dir" / "data_sub_dir" / "data_sub"
279+
).read_text() == "data_sub"
280+
assert (tmp_dir / "data_dir_copy" / "data").read_text() == "data"
281+
assert (
282+
tmp_dir / "data_dir_copy" / "data_sub_dir" / "data_sub"
283+
).read_text() == "data_sub"
284+
270285

271286
class TestRemoteWorktree:
272287
def test_file(self, tmp_dir, dvc, remote_worktree):

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ dependencies = [
3535
"configobj>=5.0.6",
3636
"distro>=1.3",
3737
"dpath<3,>=2.1.0",
38-
"dvc-data>=3.1.1,<3.2",
38+
"dvc-data>=3.2,<3.3",
3939
"dvc-http>=2.29.0",
4040
"dvc-render>=1.0.0,<2",
4141
"dvc-studio-client>=0.17.1,<1",

0 commit comments

Comments
 (0)