Fix default clone branch and error handling [ci skip]

This commit is contained in:
Ines Montani 2021-02-01 22:29:04 +11:00
parent acabb284dd
commit b46073234a
2 changed files with 14 additions and 3 deletions

View File

@ -372,7 +372,11 @@ def git_checkout(
cmd = f"git -C {tmp_dir} clone {repo} . -b {branch}" cmd = f"git -C {tmp_dir} clone {repo} . -b {branch}"
run_command(cmd, capture=True) run_command(cmd, capture=True)
# We need Path(name) to make sure we also support subdirectories # We need Path(name) to make sure we also support subdirectories
try:
shutil.copytree(str(tmp_dir / Path(subpath)), str(dest)) shutil.copytree(str(tmp_dir / Path(subpath)), str(dest))
except FileNotFoundError:
err = f"Can't clone {subpath}. Make sure the directory exists in the repo (branch '{branch}')"
msg.fail(err, repo, exits=1)
def git_sparse_checkout(repo, subpath, dest, branch): def git_sparse_checkout(repo, subpath, dest, branch):

View File

@ -9,14 +9,18 @@ from ...util import ensure_path
from .._util import project_cli, Arg, Opt, COMMAND, PROJECT_FILE from .._util import project_cli, Arg, Opt, COMMAND, PROJECT_FILE
from .._util import git_checkout, get_git_version from .._util import git_checkout, get_git_version
DEFAULT_REPO = about.__projects__
DEFAULT_PROJECTS_BRANCH = about.__projects_branch__
DEFAULT_BRANCH = "master"
@project_cli.command("clone") @project_cli.command("clone")
def project_clone_cli( def project_clone_cli(
# fmt: off # fmt: off
name: str = Arg(..., help="The name of the template to clone"), name: str = Arg(..., help="The name of the template to clone"),
dest: Optional[Path] = Arg(None, help="Where to clone the project. Defaults to current working directory", exists=False), dest: Optional[Path] = Arg(None, help="Where to clone the project. Defaults to current working directory", exists=False),
repo: str = Opt(about.__projects__, "--repo", "-r", help="The repository to clone from"), repo: str = Opt(DEFAULT_REPO, "--repo", "-r", help="The repository to clone from"),
branch: str = Opt(about.__projects_branch__, "--branch", "-b", help="The branch to clone from"), branch: Optional[str] = Opt(None, "--branch", "-b", help="The branch to clone from"),
sparse_checkout: bool = Opt(False, "--sparse", "-S", help="Use sparse Git checkout to only check out and clone the files needed. Requires Git v22.2+.") sparse_checkout: bool = Opt(False, "--sparse", "-S", help="Use sparse Git checkout to only check out and clone the files needed. Requires Git v22.2+.")
# fmt: on # fmt: on
): ):
@ -29,6 +33,9 @@ def project_clone_cli(
""" """
if dest is None: if dest is None:
dest = Path.cwd() / Path(name).parts[-1] dest = Path.cwd() / Path(name).parts[-1]
if branch is None:
# If it's a user repo, we want to default to other branch
branch = DEFAULT_PROJECTS_BRANCH if repo == DEFAULT_REPO else DEFAULT_BRANCH
project_clone(name, dest, repo=repo, branch=branch, sparse_checkout=sparse_checkout) project_clone(name, dest, repo=repo, branch=branch, sparse_checkout=sparse_checkout)