def test(self): self.swap_foo_with_bar() stages = self.dvc.reproduce(self.foo_stage.path) self.assertTrue(filecmp.cmp(self.FOO, self.BAR, shallow=False)) self.assertEqual(stages[0].outs[0].hash_info.value, file_md5(self.BAR, self.dvc.fs))
def test_state(tmp_dir, dvc): tmp_dir.gen("foo", "foo content") path = tmp_dir / "foo" hash_info = HashInfo("md5", file_md5(path, dvc.fs)) state = State(dvc.root_dir, dvc.tmp_dir, dvc.dvcignore) state.save(path, dvc.fs, hash_info) assert state.get(path, dvc.fs)[1] == hash_info path.unlink() path.write_text("1") assert state.get(path, dvc.fs) == (None, None) hash_info = HashInfo("md5", file_md5(path, dvc.fs)) state.save(path, dvc.fs, hash_info) assert state.get(path, dvc.fs)[1] == hash_info
def test_add(tmp_dir, dvc): (stage, ) = tmp_dir.dvc_gen({"foo": "foo"}) md5 = file_md5("foo", dvc.fs) assert stage is not None assert isinstance(stage, Stage) assert os.path.isfile(stage.path) assert len(stage.outs) == 1 assert len(stage.deps) == 0 assert stage.cmd is None assert stage.outs[0].hash_info == HashInfo("md5", md5) assert stage.md5 is None assert (tmp_dir / "foo.dvc").parse() == { "outs": [{ "md5": "acbd18db4cc2f85cedef654fccc4a4d8", "path": "foo", "size": 3, }] }
def test(self): cmd = "python {} {} {}".format(self.CODE, self.FOO, "out") deps = [self.FOO, self.CODE] outs = [os.path.join(self.dvc.root_dir, "out")] outs_no_cache = [] fname = "out.dvc" self.dvc.add(self.FOO) stage = self.dvc.run( cmd=cmd, deps=deps, outs=outs, outs_no_cache=outs_no_cache, fname=fname, single_stage=True, ) self.assertTrue(filecmp.cmp(self.FOO, "out", shallow=False)) self.assertTrue(os.path.isfile(stage.path)) self.assertEqual(stage.cmd, cmd) self.assertEqual(len(stage.deps), len(deps)) self.assertEqual(len(stage.outs), len(outs + outs_no_cache)) self.assertEqual(stage.outs[0].fspath, outs[0]) self.assertEqual(stage.outs[0].hash_info.value, file_md5(self.FOO, self.dvc.fs)) self.assertTrue(stage.path, fname) with self.assertRaises(OutputDuplicationError): self.dvc.run( cmd=cmd, deps=deps, outs=outs, outs_no_cache=outs_no_cache, fname="duplicate" + fname, single_stage=True, )
def test_pre_push_hook(self, tmp_dir, scm, dvc, tmp_path_factory): temp = tmp_path_factory.mktemp("external") git_remote = temp / "project.git" storage_path = temp / "dvc_storage" with dvc.config.edit() as conf: conf["remote"]["store"] = {"url": os.fspath(storage_path)} conf["core"]["remote"] = "store" tmp_dir.dvc_gen("file", "file_content", "commit message") file_checksum = file_md5("file", dvc.fs) expected_storage_path = ( storage_path / file_checksum[:2] / file_checksum[2:] ) scm.gitpython.repo.clone(os.fspath(git_remote)) scm.gitpython.repo.create_remote("origin", os.fspath(git_remote)) dvc.install() assert not expected_storage_path.is_file() scm.gitpython.repo.git.push("origin", "master") assert expected_storage_path.is_file() assert expected_storage_path.read_text() == "file_content"