Add default tracking configuration

This commit is contained in:
2021-12-23 18:33:14 +01:00
parent 27586b5ff0
commit b183590096
6 changed files with 382 additions and 48 deletions

View File

@@ -4,38 +4,266 @@ from helpers import *
import git
import os.path
def test_worktree_add_simple():
with TempGitRepositoryWorktree() as base_dir:
cmd = grm(["wt", "add", "test"], cwd=base_dir)
assert cmd.returncode == 0
for remote_branch_already_exists in (True, False):
for has_config in (True, False):
for has_default in (True, False):
for has_prefix in (True, False):
with TempGitRepositoryWorktree() as base_dir:
if has_config:
with open(os.path.join(base_dir, "grm.toml"), "w") as f:
f.write(
f"""
[track]
default = {str(has_default).lower()}
default_remote = "origin"
"""
)
if has_prefix:
f.write(
"""
default_remote_prefix = "myprefix"
"""
)
files = os.listdir(base_dir)
assert len(files) == 2
assert set(files) == {".git-main-working-tree", "test"}
if remote_branch_already_exists:
shell(
f"""
cd {base_dir}
git --git-dir ./.git-main-working-tree worktree add tmp
(
cd tmp
touch change
git add change
git commit -m commit
git push origin HEAD:test
#git reset --hard 'HEAD@{1}'
git branch -va
)
git --git-dir ./.git-main-working-tree worktree remove tmp
"""
)
cmd = grm(["wt", "add", "test"], cwd=base_dir)
assert cmd.returncode == 0
repo = git.Repo(os.path.join(base_dir, "test"))
assert not repo.bare
assert not repo.is_dirty()
assert str(repo.active_branch) == "test"
assert repo.active_branch.tracking_branch() is None
files = os.listdir(base_dir)
if has_config is True:
assert len(files) == 3
assert set(files) == {
".git-main-working-tree",
"grm.toml",
"test",
}
else:
assert len(files) == 2
assert set(files) == {".git-main-working-tree", "test"}
repo = git.Repo(os.path.join(base_dir, "test"))
assert not repo.bare
assert not repo.is_dirty()
if has_config and has_default:
if has_prefix and not remote_branch_already_exists:
assert (
str(repo.active_branch.tracking_branch())
== "origin/myprefix/test"
)
else:
assert (
str(repo.active_branch.tracking_branch())
== "origin/test"
)
else:
assert repo.active_branch.tracking_branch() is None
def test_worktree_add_with_tracking():
with TempGitRepositoryWorktree() as base_dir:
cmd = grm(["wt", "add", "test", "--track", "origin/test"], cwd=base_dir)
print(cmd.stderr)
assert cmd.returncode == 0
for remote_branch_already_exists in (True, False):
for has_config in (True, False):
for has_default in (True, False):
for has_prefix in (True, False):
with TempGitRepositoryWorktree() as base_dir:
if has_config:
with open(os.path.join(base_dir, "grm.toml"), "w") as f:
f.write(
f"""
[track]
default = {str(has_default).lower()}
default_remote = "origin"
"""
)
if has_prefix:
f.write(
"""
default_remote_prefix = "myprefix"
"""
)
files = os.listdir(base_dir)
assert len(files) == 2
assert set(files) == {".git-main-working-tree", "test"}
if remote_branch_already_exists:
shell(
f"""
cd {base_dir}
git --git-dir ./.git-main-working-tree worktree add tmp
(
cd tmp
touch change
git add change
git commit -m commit
git push origin HEAD:test
#git reset --hard 'HEAD@{1}'
git branch -va
)
git --git-dir ./.git-main-working-tree worktree remove tmp
"""
)
cmd = grm(
["wt", "add", "test", "--track", "origin/test"],
cwd=base_dir,
)
print(cmd.stderr)
assert cmd.returncode == 0
repo = git.Repo(os.path.join(base_dir, "test"))
assert not repo.bare
assert not repo.is_dirty()
assert str(repo.active_branch) == "test"
assert str(repo.active_branch.tracking_branch()) == "origin/test"
files = os.listdir(base_dir)
if has_config is True:
assert len(files) == 3
assert set(files) == {
".git-main-working-tree",
"grm.toml",
"test",
}
else:
assert len(files) == 2
assert set(files) == {".git-main-working-tree", "test"}
repo = git.Repo(os.path.join(base_dir, "test"))
assert not repo.bare
assert not repo.is_dirty()
assert str(repo.active_branch) == "test"
assert (
str(repo.active_branch.tracking_branch()) == "origin/test"
)
def test_worktree_add_with_explicit_no_tracking():
for has_config in (True, False):
for has_default in (True, False):
for has_prefix in (True, False):
for track in (True, False):
with TempGitRepositoryWorktree() as base_dir:
if has_config:
with open(os.path.join(base_dir, "grm.toml"), "w") as f:
f.write(
f"""
[track]
default = {str(has_default).lower()}
default_remote = "origin"
"""
)
if has_prefix:
f.write(
"""
default_remote_prefix = "myprefix"
"""
)
if track is True:
cmd = grm(
[
"wt",
"add",
"test",
"--track",
"origin/test",
"--no-track",
],
cwd=base_dir,
)
else:
cmd = grm(["wt", "add", "test", "--no-track"], cwd=base_dir)
print(cmd.stderr)
assert cmd.returncode == 0
files = os.listdir(base_dir)
if has_config is True:
assert len(files) == 3
assert set(files) == {
".git-main-working-tree",
"grm.toml",
"test",
}
else:
assert len(files) == 2
assert set(files) == {".git-main-working-tree", "test"}
repo = git.Repo(os.path.join(base_dir, "test"))
assert not repo.bare
assert not repo.is_dirty()
assert str(repo.active_branch) == "test"
assert repo.active_branch.tracking_branch() is None
def test_worktree_add_with_config():
for remote_branch_already_exists in (True, False):
for has_default in (True, False):
for has_prefix in (True, False):
with TempGitRepositoryWorktree() as base_dir:
with open(os.path.join(base_dir, "grm.toml"), "w") as f:
f.write(
f"""
[track]
default = {str(has_default).lower()}
default_remote = "origin"
"""
)
if has_prefix:
f.write(
"""
default_remote_prefix = "myprefix"
"""
)
if remote_branch_already_exists:
shell(
f"""
cd {base_dir}
git --git-dir ./.git-main-working-tree worktree add tmp
(
cd tmp
touch change
git add change
git commit -m commit
git push origin HEAD:test
#git reset --hard 'HEAD@{1}'
git branch -va
)
git --git-dir ./.git-main-working-tree worktree remove tmp
"""
)
cmd = grm(["wt", "add", "test"], cwd=base_dir)
print(cmd.stderr)
assert cmd.returncode == 0
files = os.listdir(base_dir)
assert len(files) == 3
assert set(files) == {".git-main-working-tree", "grm.toml", "test"}
repo = git.Repo(os.path.join(base_dir, "test"))
assert not repo.bare
assert not repo.is_dirty()
assert str(repo.active_branch) == "test"
if has_default:
if has_prefix and not remote_branch_already_exists:
assert (
str(repo.active_branch.tracking_branch())
== "origin/myprefix/test"
)
else:
assert (
str(repo.active_branch.tracking_branch())
== "origin/test"
)
else:
assert repo.active_branch.tracking_branch() is None
def test_worktree_delete():