From bce3b5d2a1e77d652b7159ce2b38c45215bfae73 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Sun, 4 Jun 2023 19:36:54 +0300 Subject: [PATCH] update: make sure we update hashes/checksums on --to-remote (#9536) Discovered in #9444 --- dvc/stage/imports.py | 1 + tests/func/test_update.py | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/dvc/stage/imports.py b/dvc/stage/imports.py index 304821418..d87acec0d 100644 --- a/dvc/stage/imports.py +++ b/dvc/stage/imports.py @@ -12,6 +12,7 @@ def _update_import_on_remote(stage, remote, jobs): "be updated with --to-remote" ) + stage.save_deps() url = stage.deps[0].def_path odb = stage.repo.cloud.get_remote_odb(remote, "update") stage.outs[0].transfer(url, odb=odb, jobs=jobs, update=True) diff --git a/tests/func/test_update.py b/tests/func/test_update.py index 96a954926..a5b7735e0 100644 --- a/tests/func/test_update.py +++ b/tests/func/test_update.py @@ -374,7 +374,10 @@ def test_update_import_url_to_remote(tmp_dir, dvc, workspace, local_remote): stage = dvc.imp_url("remote://workspace/foo", to_remote=True) workspace.gen("foo", "bar") - stage = dvc.update(stage.path, to_remote=True) + (updated,) = dvc.update(stage.path, to_remote=True) + + assert stage.deps[0].hash_info != updated.deps[0].hash_info + assert stage.outs[0].hash_info != updated.outs[0].hash_info dvc.pull("foo") assert (tmp_dir / "foo").read_text() == "bar" @@ -400,7 +403,10 @@ def test_update_import_url_to_remote_directory( } ) - stage = dvc.update(stage.path, to_remote=True) + (updated,) = dvc.update(stage.path, to_remote=True) + + assert stage.deps[0].hash_info != updated.deps[0].hash_info + assert stage.outs[0].hash_info != updated.outs[0].hash_info dvc.pull("data") assert (tmp_dir / "data").read_text() == { @@ -424,7 +430,10 @@ def test_update_import_url_to_remote_directory_changed_contents( local_workspace.gen( {"data": {"foo": "not_foo", "foo2": "foo", "bar": {"baz2": "baz2"}}} ) - stage = dvc.update(stage.path, to_remote=True) + (updated,) = dvc.update(stage.path, to_remote=True) + + assert stage.deps[0].hash_info != updated.deps[0].hash_info + assert stage.outs[0].hash_info != updated.outs[0].hash_info dvc.pull("data") assert (tmp_dir / "data").read_text() == { @@ -441,7 +450,10 @@ def test_update_import_url_to_remote_directory_same_hash( stage = dvc.imp_url("remote://workspace/data", to_remote=True) local_workspace.gen({"data": {"foo": "baz", "bar": {"baz": "foo"}, "same": "same"}}) - stage = dvc.update(stage.path, to_remote=True) + (updated,) = dvc.update(stage.path, to_remote=True) + + assert stage.deps[0].hash_info != updated.deps[0].hash_info + assert stage.outs[0].hash_info != updated.outs[0].hash_info dvc.pull("data") assert (tmp_dir / "data").read_text() == {