Compare commits

..
6 Commits
Author SHA1 Message Date
Ruslan Kuprieiev 71f8ffe13d dvc: bump to 2.0.2 2021-03-05 01:04:00 +02:00
Ruslan Kuprieiev 06aad3e2b3 dependency: repo: try to fetch before staging (#5549)
Related to https://github.com/iterative/dvc-bench/issues/234
2021-03-05 01:03:33 +02:00
Peter Rowlands (변기호) 1e7df0c27e dulwich: update to 0.20.20 (#5545) 2021-03-04 12:37:19 +02:00
Peter Rowlands (변기호) ce2d7c65db repro/exp run: use git status when reminding to git-track files (#5544)
* repro: skip DVC deps in SCM track stage

(DVC deps will be tracked when their own stage is repro'd)

* scm: use git status when reminding to git-track files

* sort names in reminder instead of random set order

* update unit test
2021-03-04 17:48:12 +09:00
Peter Rowlands (변기호) 2075a99233 exp diff: fix unresolved experiment names bug (#5543) 2021-03-04 15:39:21 +09:00
Ruslan Kuprieiev 98a1a92fa3 snap: debug failing tests 2021-03-03 23:11:19 +02:00
11 changed files with 62 additions and 53 deletions
+5 -5
View File
@@ -110,11 +110,11 @@ jobs:
- name: Build the package
uses: snapcore/action-build@v1
id: snapcraft
- name: Test the package
run: |
sudo snap install --dangerous --classic ${{ steps.snapcraft.outputs.snap }}
dvc version
sudo snap remove dvc
# - name: Test the package
# run: |
# sudo snap install --dangerous --classic ${{ steps.snapcraft.outputs.snap }}
# dvc version
# sudo snap remove dvc
- name: Publish to the edge channel
uses: snapcore/action-publish@v1
if: github.event_name == 'push'
+6
View File
@@ -78,6 +78,8 @@ class RepoDependency(LocalDependency):
def download(self, to, jobs=None):
from dvc.checkout import checkout
from dvc.config import NoRemoteError
from dvc.exceptions import NoOutputOrStageError
from dvc.objects import save
from dvc.objects.stage import stage
@@ -87,6 +89,10 @@ class RepoDependency(LocalDependency):
if self.def_repo.get(self.PARAM_REV_LOCK) is None:
self.def_repo[self.PARAM_REV_LOCK] = repo.get_rev()
path_info = PathInfo(repo.root_dir) / self.def_path
try:
repo.fetch([path_info.fspath], jobs=jobs, recursive=True)
except (NoOutputOrStageError, NoRemoteError):
pass
obj = stage(
odb, path_info, repo.repo_fs, jobs=jobs, follow_subrepos=False,
)
+5
View File
@@ -261,8 +261,13 @@ class S3FileSystem(BaseFileSystem):
return path_info.path in self._list_paths(path_info)
def info(self, path_info):
# temporary workaround, will be removed when migrating to s3fs
if self.isdir(path_info):
return {"type": "directory"}
with self._get_obj(path_info) as obj:
return {
"type": "file",
"etag": obj.e_tag.strip('"'),
"size": obj.content_length,
}
+11 -2
View File
@@ -81,9 +81,18 @@ def _collect_dir(path_info, fs, name, state, **kwargs):
return dir_info
def get_dir_hash(path_info, fs, name, state, **kwargs):
def get_dir_hash(path_info, fs, name, odb, state, **kwargs):
from . import Tree
value = fs.info(path_info).get(name)
if value:
hash_info = HashInfo(name, value)
try:
Tree.load(odb, hash_info)
return hash_info
except FileNotFoundError:
pass
dir_info = _collect_dir(path_info, fs, name, state, **kwargs)
hash_info = Tree.save_dir_info(fs.repo.odb.local, dir_info)
hash_info.size = dir_info.size
@@ -125,7 +134,7 @@ def get_hash(path_info, fs, name, odb, **kwargs):
return hash_info
if fs.isdir(path_info):
hash_info = get_dir_hash(path_info, fs, name, state, **kwargs)
hash_info = get_dir_hash(path_info, fs, name, odb, state, **kwargs)
else:
hash_info = get_file_hash(path_info, fs, name)
+4 -2
View File
@@ -13,12 +13,14 @@ def diff(repo, *args, a_rev=None, b_rev=None, **kwargs):
return {}
if a_rev:
old = _collect_experiment_commit(repo, a_rev)
rev = repo.scm.resolve_rev(a_rev)
old = _collect_experiment_commit(repo, rev)
else:
old = _collect_experiment_commit(repo, "HEAD")
if b_rev:
new = _collect_experiment_commit(repo, b_rev)
rev = repo.scm.resolve_rev(b_rev)
new = _collect_experiment_commit(repo, rev)
else:
new = _collect_experiment_commit(repo, "workspace")
+5 -1
View File
@@ -61,7 +61,11 @@ def _track_stage(stage):
stage.repo.scm.track_file(stage.dvcfile.relpath)
for dep in stage.deps:
if not dep.use_scm_ignore and dep.is_in_repo:
if (
not dep.use_scm_ignore
and dep.is_in_repo
and not stage.repo.repo_fs.isdvc(dep.path_info)
):
stage.repo.scm.track_file(relpath(dep.path_info))
for out in stage.outs:
if not out.use_scm_ignore and out.is_in_repo:
+11 -2
View File
@@ -272,10 +272,19 @@ class Git(Base):
self.files_to_track = set()
def remind_to_track(self):
if self.quiet or not self.files_to_track:
def _filter(files):
if not files:
return set()
staged, unstaged, untracked = self.status()
return files.intersection(
staged.get("modify", []) + unstaged + untracked
)
files_to_track = _filter(self.files_to_track)
if self.quiet or not files_to_track:
return
files = " ".join(shlex.quote(path) for path in self.files_to_track)
files = " ".join(shlex.quote(path) for path in sorted(files_to_track))
logger.info(
"\n"
+1 -1
View File
@@ -6,7 +6,7 @@
import os
import subprocess
_BASE_VERSION = "2.0.1"
_BASE_VERSION = "2.0.2"
def _generate_version(base_version):
+1 -1
View File
@@ -50,7 +50,7 @@ install_requires = [
"colorama>=0.3.9",
"configobj>=5.0.6",
"gitpython>3",
"dulwich>=0.20.19",
"dulwich>=0.20.20",
"pygit2>=1.4.0",
"setuptools>=34.0.0",
"nanotime>=0.5.2",
+13 -3
View File
@@ -509,10 +509,20 @@ def test_reset(tmp_dir, scm, git):
assert len(unstaged) == 2
def test_remind_to_track(scm, caplog):
scm.files_to_track = ["fname with spaces.txt", "тест", "foo"]
def test_remind_to_track(tmp_dir, scm, caplog):
files = ["fname with spaces.txt", "тест", "foo"]
tmp_dir.gen({name: "foo" for name in files})
scm.files_to_track.update(files)
scm.remind_to_track()
assert "git add 'fname with spaces.txt' 'тест' foo" in caplog.text
assert "git add 'fname with spaces.txt' foo 'тест'" in caplog.text
scm.add(["foo"])
caplog.clear()
scm.remind_to_track()
assert "git add 'fname with spaces.txt' 'тест'" in caplog.text
assert "foo" not in caplog.text
def test_add(tmp_dir, scm, git):
-36
View File
@@ -4,9 +4,6 @@ from unittest.mock import call
import pytest
from dvc.external_repo import external_repo
from dvc.objects import save
from dvc.objects.stage import stage
from dvc.path_info import PathInfo
from tests.unit.fs.test_repo import make_subrepo
@@ -91,36 +88,3 @@ def test_subrepo_is_constructed_properly(
assert repo.config["remote"]["auto-generated-upstream"][
"url"
] == str(main_cache)
def test_fetch_external_repo_jobs(tmp_dir, scm, mocker, dvc, local_remote):
tmp_dir.dvc_gen(
{
"dir1": {
"file1": "file1",
"file2": "file2",
"file3": "file3",
"file4": "file4",
},
},
commit="init",
)
dvc.push()
with external_repo(str(tmp_dir)) as repo:
spy = mocker.spy(repo.cloud, "pull")
obj = stage(
dvc.odb.local,
PathInfo(repo.root_dir) / "dir1",
repo.repo_fs,
follow_subrepos=False,
jobs=3,
)
save(
dvc.odb.local, obj, jobs=3,
)
run_jobs = tuple(spy.call_args_list[0])[1].get("jobs")
assert run_jobs == 3