Example #1
0
    def _install_plugin(
        self, plugins: dict, installed_plugins: dict, active_plugins: List[str]
    ) -> None:
        if self.local:
            abspath = self.local.absolute()
            if not abspath.exists():
                raise plug.PlugError(f"no such file or directory: '{abspath}'")

            _install_local_plugin(abspath, installed_plugins)
        elif self.git_url:
            _install_plugin_from_git_repo(self.git_url, installed_plugins)
        else:
            plug.echo("Available plugins:")

            if self.plugin_spec:
                # non-interactive install
                name, version = self._split_plugin_spec(
                    self.plugin_spec, plugins
                )
            else:
                # interactive install
                _list_all_plugins(plugins, installed_plugins, active_plugins)
                name, version = _select_plugin(plugins)

            if name in installed_plugins:
                _uninstall_plugin(name, installed_plugins)

            plug.echo(f"Installing {name}{PLUGIN_SPEC_SEP}{version}")
            _install_plugin(name, version, plugins)

            plug.echo(f"Successfully installed {name}@{version}")

            installed_plugins[name] = dict(version=version)
            disthelpers.write_installed_plugins(installed_plugins)
Example #2
0
    def command(self) -> None:
        """Install a plugin."""
        plugins = disthelpers.get_plugins_json()
        installed_plugins = disthelpers.get_installed_plugins()
        active_plugins = disthelpers.get_active_plugins()

        if self.local:
            abspath = self.local.absolute()
            if not abspath.exists():
                raise plug.PlugError(f"no such file or directory: '{abspath}'")

            _install_local_plugin(abspath, installed_plugins)
        else:
            plug.echo("Available plugins:")
            _list_all_plugins(plugins, installed_plugins, active_plugins)
            name, version = _select_plugin(plugins)

            if name in installed_plugins:
                _uninstall_plugin(name, installed_plugins)

            plug.echo(f"Installing {name}@{version}")
            _install_plugin(name, version, plugins)

            plug.echo(f"Successfully installed {name}@{version}")

            installed_plugins[name] = dict(version=version)
            disthelpers.write_installed_plugins(installed_plugins)
Example #3
0
def _uninstall_plugin(plugin_name: str, installed_plugins: dict):
    plugin_version = installed_plugins[plugin_name]["version"]
    plug.echo(f"Uninstalling {plugin_name}@{plugin_version}")
    if not installed_plugins[plugin_name].get("single_file"):
        _pip_uninstall_plugin(plugin_name)

    del installed_plugins[plugin_name]
    disthelpers.write_installed_plugins(installed_plugins)
    disthelpers.write_active_plugins([
        name for name in disthelpers.get_active_plugins()
        if name != plugin_name
    ])
    plug.echo(f"Successfully uninstalled {plugin_name}")
Example #4
0
def _install_plugin_from_git_repo(
    repo_url: str, installed_plugins: dict
) -> None:
    url, *version = repo_url.split(PLUGIN_SPEC_SEP)
    plugin_name = _parse_plugin_name_from_git_url(url)

    install_url = f"git+{repo_url}"
    install_proc = _install_plugin_from_url_nocheck(install_url)
    if install_proc.returncode != 0:
        raise plug.PlugError(f"could not install plugin from {repo_url}")

    install_info = dict(name=url, version=repo_url)
    installed_plugins[plugin_name] = install_info
    disthelpers.write_installed_plugins(installed_plugins)
    plug.echo(f"Installed {plugin_name} from {repo_url}")
Example #5
0
def _install_local_plugin(plugin_path: pathlib.Path, installed_plugins: dict):
    install_info: Dict[str, Any] = dict(version="local", path=str(plugin_path))

    if plugin_path.is_dir():
        _check_has_plugin_prefix(plugin_path.name)

        disthelpers.pip(
            "install",
            "-e",
            str(plugin_path),
            f"repobee=={__version__}",
            upgrade=True,
        )
        ident = plugin_path.name[len(PLUGIN_PREFIX) :]
    else:
        ident = str(plugin_path)
        install_info["single_file"] = True

    installed_plugins[ident] = install_info
    disthelpers.write_installed_plugins(installed_plugins)
    plug.echo(f"Installed {ident}")
Example #6
0
def _install_local_plugin(plugin_path: pathlib.Path, installed_plugins: dict):
    install_info: Dict[str, Any] = dict(version="local", path=str(plugin_path))

    if plugin_path.is_dir():
        if not plugin_path.name.startswith("repobee-"):
            raise plug.PlugError(
                "RepoBee plugin package names must be prefixed with "
                "'repobee-'")

        disthelpers.pip(
            "install",
            "-e",
            str(plugin_path),
            f"repobee=={__version__}",
            upgrade=True,
        )
        ident = plugin_path.name[len("repobee-"):]
    else:
        ident = str(plugin_path)
        install_info["single_file"] = True

    installed_plugins[ident] = install_info
    disthelpers.write_installed_plugins(installed_plugins)
    plug.echo(f"Installed {ident}")