e2e: Add tests for nested repository checkouts
This commit is contained in:
@@ -133,6 +133,50 @@ templates = {
|
|||||||
"""
|
"""
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
"nested_trees": {
|
||||||
|
"toml": """
|
||||||
|
[[trees]]
|
||||||
|
root = "{root}"
|
||||||
|
|
||||||
|
[[trees.repos]]
|
||||||
|
name = "outer"
|
||||||
|
|
||||||
|
[[trees.repos.remotes]]
|
||||||
|
name = "origin"
|
||||||
|
url = "file://{remote1}"
|
||||||
|
type = "file"
|
||||||
|
|
||||||
|
[[trees]]
|
||||||
|
root = "{root}/subdir"
|
||||||
|
|
||||||
|
[[trees.repos]]
|
||||||
|
name = "inner"
|
||||||
|
|
||||||
|
[[trees.repos.remotes]]
|
||||||
|
name = "origin"
|
||||||
|
url = "file://{remote2}"
|
||||||
|
type = "file"
|
||||||
|
""",
|
||||||
|
"yaml": textwrap.dedent(
|
||||||
|
"""
|
||||||
|
trees:
|
||||||
|
- root: "{root}"
|
||||||
|
repos:
|
||||||
|
- name: outer
|
||||||
|
remotes:
|
||||||
|
- name: origin
|
||||||
|
url: "file://{remote1}"
|
||||||
|
type: "file"
|
||||||
|
- root: "{root}/subdir"
|
||||||
|
repos:
|
||||||
|
- name: inner
|
||||||
|
remotes:
|
||||||
|
- name: origin
|
||||||
|
url: "file://{remote2}"
|
||||||
|
type: "file"
|
||||||
|
"""
|
||||||
|
),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -275,6 +319,51 @@ def test_repos_sync_normal_clone(configtype):
|
|||||||
assert urls[0] == f"file://{remote2}"
|
assert urls[0] == f"file://{remote2}"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("configtype", ["toml", "yaml"])
|
||||||
|
def test_repos_sync_nested_clone(configtype):
|
||||||
|
with tempfile.TemporaryDirectory() as target:
|
||||||
|
with TempGitFileRemote() as (remote1, remote1_head_commit_sha):
|
||||||
|
with TempGitFileRemote() as (remote2, remote2_head_commit_sha):
|
||||||
|
with tempfile.NamedTemporaryFile() as config:
|
||||||
|
with open(config.name, "w") as f:
|
||||||
|
f.write(
|
||||||
|
templates["nested_trees"][configtype].format(
|
||||||
|
root=target, remote1=remote1, remote2=remote2
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
cmd = grm(["repos", "sync", "config", "--config", config.name])
|
||||||
|
assert cmd.returncode == 0
|
||||||
|
|
||||||
|
def validate(git_dir, sha, remote):
|
||||||
|
assert os.path.exists(git_dir)
|
||||||
|
with git.Repo(git_dir) as repo:
|
||||||
|
assert not repo.bare
|
||||||
|
assert not repo.is_dirty()
|
||||||
|
assert set([str(r) for r in repo.remotes]) == {"origin"}
|
||||||
|
assert str(repo.active_branch) == "master"
|
||||||
|
assert str(repo.head.commit) == sha
|
||||||
|
|
||||||
|
assert len(repo.remotes) == 1
|
||||||
|
urls = list(repo.remote("origin").urls)
|
||||||
|
assert len(urls) == 1
|
||||||
|
assert urls[0] == f"file://{remote}"
|
||||||
|
|
||||||
|
validate(
|
||||||
|
os.path.join(target, "outer"), remote1_head_commit_sha, remote1
|
||||||
|
)
|
||||||
|
validate(
|
||||||
|
os.path.join(target, "subdir", "inner"),
|
||||||
|
remote2_head_commit_sha,
|
||||||
|
remote2,
|
||||||
|
)
|
||||||
|
|
||||||
|
cmd = grm(["repos", "sync", "config", "--config", config.name])
|
||||||
|
print(cmd.stdout)
|
||||||
|
print(cmd.stderr)
|
||||||
|
assert not "found unmanaged repository" in cmd.stderr.lower()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("configtype", ["toml", "yaml"])
|
@pytest.mark.parametrize("configtype", ["toml", "yaml"])
|
||||||
def test_repos_sync_normal_init(configtype):
|
def test_repos_sync_normal_init(configtype):
|
||||||
with tempfile.TemporaryDirectory() as target:
|
with tempfile.TemporaryDirectory() as target:
|
||||||
|
|||||||
Reference in New Issue
Block a user