Skip to content

Commit 9b2ef00

Browse files
authored
Stage: create: reset repo after new stage creation (#3349)
1 parent a9161af commit 9b2ef00

File tree

4 files changed

+26
-0
lines changed

4 files changed

+26
-0
lines changed

dvc/repo/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def locked(f):
2424
@wraps(f)
2525
def wrapper(repo, *args, **kwargs):
2626
with repo.lock, repo.state:
27+
repo._reset()
2728
ret = f(repo, *args, **kwargs)
2829
# Our graph cache is no longer valid after we release the repo.lock
2930
repo._reset()

dvc/repo/add.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ def _create_stages(repo, targets, fname, pbar=None):
126126
stage = Stage.create(
127127
repo, outs=[out], accompany_outs=True, fname=fname
128128
)
129+
repo._reset()
129130

130131
if not stage:
131132
if pbar is not None:

tests/func/test_add.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,3 +655,10 @@ def test_add_from_data_dir(tmp_dir, scm, dvc):
655655
"tracked output: 'dir'.\n"
656656
"To include '{out}' in 'dir', run 'dvc commit dir.dvc'"
657657
).format(out=os.path.join("dir", "file2"))
658+
659+
660+
def test_not_raises_on_re_add(tmp_dir, dvc):
661+
tmp_dir.dvc_gen("file", "file content")
662+
663+
tmp_dir.gen({"file2": "file2 content", "file": "modified file"})
664+
dvc.add(["file2", "file"])

tests/unit/repo/test_repo.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import pytest
44

5+
from dvc.repo import locked
6+
57

68
def test_is_dvc_internal(dvc):
79
assert dvc.is_dvc_internal(os.path.join("path", "to", ".dvc", "file"))
@@ -49,3 +51,18 @@ def test_used_cache(tmp_dir, dvc, path):
4951
used_cache._items == expected._items
5052
and used_cache.external == expected.external
5153
)
54+
55+
56+
def test_locked(mocker):
57+
repo = mocker.MagicMock()
58+
repo.method = locked(repo.method)
59+
60+
args = {}
61+
kwargs = {}
62+
repo.method(repo, args, kwargs)
63+
64+
assert repo.method_calls == [
65+
mocker.call._reset(),
66+
mocker.call.method(repo, args, kwargs),
67+
mocker.call._reset(),
68+
]

0 commit comments

Comments
 (0)