"""Module describing the planemo ``clone`` command."""
from typing import Callable
import click
from planemo import (
github_util,
options,
)
from planemo.cli import command_function
from planemo.config import planemo_option
CLONE_GITHUB_TARGETS = {
"tools-iuc": "galaxyproject/tools-iuc",
"tools-devteam": "galaxyproject/tools-devteam",
"galaxy": "galaxyproject/galaxy",
"planemo": "galaxyproject/planemo",
"tools-galaxyp": "galaxyproteomics/tools-galaxyp",
"bioconda-recipes": "bioconda/bioconda-recipes",
"homebrew-science": "Homebrew/homebrew-science",
"workflows": "common-workflow-language/workflows",
}
[docs]def clone_target_arg() -> Callable:
"""Represent target to clone/branch."""
return click.argument(
"target",
metavar="TARGET",
type=click.STRING,
)
@click.command("clone")
@planemo_option(
"--fork/--skip_fork",
default=True,
is_flag=True,
)
@planemo_option("--branch", type=click.STRING, default=None, help="Create a named branch on result.")
@clone_target_arg()
@options.optional_project_arg(exists=None, default="__NONE__")
@command_function
def cli(ctx, target, path, **kwds):
"""Short-cut to quickly clone, fork, and branch a relevant Github repo.
For instance, the following will clone, fork, and branch the tools-iuc
repository to allow a subsequent pull request to fix a problem with bwa.
\b
$ planemo clone --branch bwa-fix tools-iuc
$ cd tools-iuc
$ # Make changes.
$ git add -p # Add desired changes.
$ git commit -m "Fix bwa problem."
$ planemo pull_request -m "Fix bwa problem."
These changes do require that a github access token is
specified in ~/.planemo.yml. An access token can be generated by going
to https://github.com/settings/tokens.
"""
if target in CLONE_GITHUB_TARGETS:
target = "https://github.com/%s" % CLONE_GITHUB_TARGETS[target]
# Pretty hacky that this path isn't treated as None.
if path is None or path.endswith("__NONE__"):
path = target.split("/")[-1]
github_util.clone_fork_branch(ctx, target, path, **kwds)