mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
external repo: checkout rev before initializing repo
This commit is contained in:
+12
-3
@@ -61,11 +61,12 @@ def _external_repo(url=None, rev=None, cache_dir=None):
|
||||
REPO_CACHE[url, None, None] = clean_clone_path
|
||||
|
||||
# Adjust new clone/copy to fit rev and cache_dir
|
||||
|
||||
# Checkout first in case of non dvc master
|
||||
checkout_revision(new_path, rev)
|
||||
|
||||
repo = Repo(new_path)
|
||||
try:
|
||||
if rev is not None:
|
||||
repo.scm.checkout(rev)
|
||||
|
||||
if cache_dir is not None:
|
||||
cache_config = CacheConfig(repo.config)
|
||||
cache_config.set_dir(cache_dir, level=Config.LEVEL_LOCAL)
|
||||
@@ -77,6 +78,14 @@ def _external_repo(url=None, rev=None, cache_dir=None):
|
||||
return new_path
|
||||
|
||||
|
||||
def checkout_revision(repo_path, revision):
|
||||
if revision is not None:
|
||||
from dvc.scm import Git
|
||||
|
||||
git = Git(repo_path)
|
||||
git.checkout(revision)
|
||||
|
||||
|
||||
def clean_repos():
|
||||
# Outside code should not see cache while we are removing
|
||||
repo_paths = list(REPO_CACHE.values())
|
||||
|
||||
@@ -8,6 +8,7 @@ import pytest
|
||||
from dvc.config import Config
|
||||
from dvc.exceptions import GetDVCFileError
|
||||
from dvc.exceptions import UrlNotDvcRepoError
|
||||
from dvc.remote import RemoteConfig
|
||||
from dvc.repo import Repo
|
||||
from dvc.system import System
|
||||
from dvc.utils import makedirs
|
||||
@@ -87,3 +88,33 @@ def test_get_to_dir(dname, erepo):
|
||||
|
||||
assert os.path.isdir(dname)
|
||||
assert filecmp.cmp(erepo.FOO, dst, shallow=False)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def erepo_no_dvc_master(git_erepo):
|
||||
dvc_branch = "dvc_test"
|
||||
git_erepo.git.git.checkout("master", b=dvc_branch)
|
||||
git_erepo.dvc_branch = dvc_branch
|
||||
|
||||
dvc_repo = Repo.init(git_erepo._root_dir)
|
||||
stage, = dvc_repo.add([git_erepo.FOO])
|
||||
dvc_repo.scm.add([".dvc", stage.relpath])
|
||||
|
||||
rconfig = RemoteConfig(dvc_repo.config)
|
||||
rconfig.add("upstream", dvc_repo.cache.local.cache_dir, default=True)
|
||||
dvc_repo.scm.add([dvc_repo.config.config_file])
|
||||
|
||||
dvc_repo.scm.commit("dvc branch initial")
|
||||
|
||||
git_erepo.git.git.checkout("master")
|
||||
os.chdir(git_erepo._saved_dir)
|
||||
yield git_erepo
|
||||
|
||||
|
||||
def test_get_from_non_dvc_master(empty_dir, erepo_no_dvc_master):
|
||||
Repo.get(
|
||||
erepo_no_dvc_master._root_dir,
|
||||
"foo",
|
||||
out="foo",
|
||||
rev=erepo_no_dvc_master.dvc_branch,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user