Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions dvc/dependency/repo.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,5 +142,10 @@ def download(self, to):
)

def update(self):
with self._make_repo(rev_lock=None) as repo:
self.def_repo[self.PARAM_REV_LOCK] = repo.scm.get_rev()
try:
with self._make_repo(rev_lock=None) as repo:
rev = repo.scm.get_rev()
except NotDvcRepoError:
clone_path = cached_clone(**self.def_repo)
rev = SCM(clone_path).get_rev()
self.def_repo[self.PARAM_REV_LOCK] = rev
28 changes: 27 additions & 1 deletion tests/dir_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,15 @@
from dvc.compat import fspath, fspath_py35


__all__ = ["tmp_dir", "scm", "dvc", "repo_template", "run_copy", "erepo_dir"]
__all__ = [
"tmp_dir",
"scm",
"dvc",
"repo_template",
"run_copy",
"erepo_dir",
"external_git_dir",
]
REPO_TEMPLATE = {
"foo": "foo",
"bar": "bar",
Expand Down Expand Up @@ -285,3 +293,21 @@ def erepo_dir(tmp_path_factory, monkeypatch):
path.dvc.close()

return path


@pytest.fixture
def external_git_dir(tmp_path_factory, monkeypatch):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Making a new fixture for a single test is an overkill, doing some copy-paste inside is even worse. You may simply use erepo_dir and remove .dvc dir there.

from dvc.scm.git import Git

path = TmpDir(fspath_py35(tmp_path_factory.mktemp("external_git_dir")))

# Create git repo
with path.chdir():
_git_init()

try:
path.scm = Git(fspath(path))
path.scm.commit("initial commit to create the master branch")
yield path
finally:
path.scm.close()
32 changes: 15 additions & 17 deletions tests/func/test_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,27 +61,25 @@ def test_status_non_dvc_repo_import(tmp_dir, dvc, erepo_dir):
}


def test_status_before_and_after_dvc_init(tmp_dir, dvc, erepo_dir):
with erepo_dir.chdir():
erepo_dir.scm.repo.index.remove([".dvc"], r=True)
shutil.rmtree(".dvc")
erepo_dir.scm_gen("file", "first version")
erepo_dir.scm.add(["file"])
erepo_dir.scm.commit("first version")
old_rev = erepo_dir.scm.get_rev()
def test_status_before_and_after_dvc_init(tmp_dir, dvc, external_git_dir):
with external_git_dir.chdir():
external_git_dir.scm_gen(
"file", "first version", commit="first version"
)
old_rev = external_git_dir.scm.get_rev()

dvc.imp(fspath(erepo_dir), "file", "file")
dvc.imp(fspath(external_git_dir), "file", "file")

assert dvc.status(["file.dvc"]) == {}

with erepo_dir.chdir():
Repo.init()
erepo_dir.scm.repo.index.remove(["file"])
with external_git_dir.chdir():
external_git_dir.dvc = Repo.init()
external_git_dir.scm.repo.index.remove(["file"])
os.remove("file")
erepo_dir.dvc_gen("file", "second version")
erepo_dir.scm.add([".dvc", "file.dvc"])
erepo_dir.scm.commit("version with dvc")
new_rev = erepo_dir.scm.get_rev()
external_git_dir.dvc_gen("file", "second version")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding the commit kwarg is equivalent to add + commit.

Suggested change
external_git_dir.dvc_gen("file", "second version")
external_git_dir.dvc_gen("file", "second version", commit="version with dvc")

external_git_dir.scm.add([".dvc", "file.dvc"])
external_git_dir.scm.commit("version with dvc")
new_rev = external_git_dir.scm.get_rev()

assert old_rev != new_rev

Expand All @@ -93,6 +91,6 @@ def test_status_before_and_after_dvc_init(tmp_dir, dvc, erepo_dir):

assert status == {
"changed deps": {
"file ({})".format(fspath(erepo_dir)): "update available"
"file ({})".format(fspath(external_git_dir)): "update available"
}
}
25 changes: 25 additions & 0 deletions tests/func/test_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,3 +172,28 @@ def test_update_import_url(tmp_dir, dvc, tmp_path_factory):

assert dst.is_file()
assert dst.read_text() == "updated file content"


def test_update_git_tracked(tmp_dir, dvc, external_git_dir):
with external_git_dir.chdir():
external_git_dir.scm_gen("file", "first version", commit="create")

tmp_dir.dvc.imp(fspath(external_git_dir), "file", "file")

# Just to make sure it doesn't crash
tmp_dir.dvc.update("file.dvc")

assert (tmp_dir / "file").read_text() == "first version"

with external_git_dir.chdir():
external_git_dir.scm_gen(
"file", "second version", commit="update file"
)

# Caching in external repos doesn't see upstream updates within single
# cli call, so we need to clean the caches to see the changes.
clean_repos()

tmp_dir.dvc.update("file.dvc")

assert (tmp_dir / "file").read_text() == "second version"