From e7b695dbefcabfcdc0aed1e6bdceaf7100f8630b Mon Sep 17 00:00:00 2001 From: skshetry <18718008+skshetry@users.noreply.github.com> Date: Wed, 27 Dec 2023 19:05:33 +0545 Subject: [PATCH] fix partial fetch (#10205) Closes #10199. Bumps dvc-data to >=3.4. --- pyproject.toml | 2 +- tests/func/test_data_cloud.py | 5 +++-- tests/func/test_virtual_directory.py | 29 ++++++++++++---------------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7ced3b927..54c1b4614 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ dependencies = [ "configobj>=5.0.6", "distro>=1.3", "dpath<3,>=2.1.0", - "dvc-data>=3.3,<3.4", + "dvc-data>=3.4,<3.5", "dvc-http>=2.29.0", "dvc-render>=1.0.0,<2", "dvc-studio-client>=0.17.1,<1", diff --git a/tests/func/test_data_cloud.py b/tests/func/test_data_cloud.py index 89fdb9e5c..17f15f70a 100644 --- a/tests/func/test_data_cloud.py +++ b/tests/func/test_data_cloud.py @@ -481,12 +481,13 @@ def test_push_pull_fetch_pipeline_stages(tmp_dir, dvc, run_copy, local_remote): def test_pull_partial(tmp_dir, dvc, local_remote): - tmp_dir.dvc_gen({"foo": {"bar": {"baz": "baz"}, "spam": "spam"}}) + other_files = {f"spam{i}": f"spam{i}" for i in range(10)} + tmp_dir.dvc_gen({"foo": {"bar": {"baz": "baz"}, **other_files}}) dvc.push() clean(["foo"], dvc) stats = dvc.pull(os.path.join("foo", "bar")) - assert stats["fetched"] == 3 + assert stats["fetched"] == 2 assert (tmp_dir / "foo").read_text() == {"bar": {"baz": "baz"}} diff --git a/tests/func/test_virtual_directory.py b/tests/func/test_virtual_directory.py index b609e5718..16947749a 100644 --- a/tests/func/test_virtual_directory.py +++ b/tests/func/test_virtual_directory.py @@ -166,32 +166,27 @@ def test_virtual_update_noop(tmp_dir, dvc, remote): def test_partial_checkout_and_update(M, tmp_dir, dvc, remote): - tmp_dir.gen({"dir": {"foo": "foo", "subdir": {"lorem": "lorem"}}}) + dir1 = {f"{i}.txt": f"dir1 {i}" for i in range(10)} + dir2 = {f"{i}.txt": f"dir2 {i}" for i in range(10)} + tmp_dir.gen({"dir": {"foo": "foo", "subdir": dir1, "subdir2": dir2}}) (stage,) = dvc.add("dir") out = stage.outs[0] - assert out.hash_info == HashInfo( - name="md5", value="22a16c9bf84b3068bc2206d88a6b5776.dir" - ) - assert out.meta == Meta(isdir=True, size=8, nfiles=2) + assert out.hash_info == HashInfo("md5", "9899dc38082ee0ec33de077df62a4a12.dir") + assert out.meta == Meta(isdir=True, size=123, nfiles=21) - assert dvc.push() == 3 + assert dvc.push() == 22 dvc.cache.local.clear() shutil.rmtree("dir") - assert dvc.pull("dir/subdir") == M.dict( - added=[join("dir", "")], - fetched=3, - ) - assert (tmp_dir / "dir").read_text() == {"subdir": {"lorem": "lorem"}} + assert dvc.pull("dir/subdir") == M.dict(added=[join("dir", "")], fetched=11) + assert (tmp_dir / "dir").read_text() == {"subdir": dir1} - tmp_dir.gen({"dir": {"subdir": {"ipsum": "ipsum"}}}) - (stage,) = dvc.add("dir/subdir/ipsum") + tmp_dir.gen({"dir": {"subdir": {"file": "file"}}}) + (stage,) = dvc.add(join("dir", "subdir", "file")) out = stage.outs[0] - assert out.hash_info == HashInfo( - name="md5", value="06d953a10e0b0ffacba04876a9351e39.dir" - ) - assert out.meta == Meta(isdir=True, size=13, nfiles=3) + assert out.hash_info == HashInfo("md5", "e7531c3930f28a00edc25e6cef91db03.dir") + assert out.meta == Meta(isdir=True, size=127, nfiles=22) assert dvc.push() == 2