diff --git a/spacy/cli/_util.py b/spacy/cli/_util.py index db7320745..e66420024 100644 --- a/spacy/cli/_util.py +++ b/spacy/cli/_util.py @@ -372,7 +372,11 @@ def git_checkout( cmd = f"git -C {tmp_dir} clone {repo} . -b {branch}" run_command(cmd, capture=True) # We need Path(name) to make sure we also support subdirectories - shutil.copytree(str(tmp_dir / Path(subpath)), str(dest)) + try: + 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): diff --git a/spacy/cli/project/clone.py b/spacy/cli/project/clone.py index e4edd4a73..72d4004f8 100644 --- a/spacy/cli/project/clone.py +++ b/spacy/cli/project/clone.py @@ -9,14 +9,18 @@ from ...util import ensure_path from .._util import project_cli, Arg, Opt, COMMAND, PROJECT_FILE 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") def project_clone_cli( # fmt: off 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), - repo: str = Opt(about.__projects__, "--repo", "-r", help="The repository to clone from"), - branch: str = Opt(about.__projects_branch__, "--branch", "-b", help="The branch to clone from"), + repo: str = Opt(DEFAULT_REPO, "--repo", "-r", help="The repository 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+.") # fmt: on ): @@ -29,6 +33,9 @@ def project_clone_cli( """ if dest is None: 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)