def install_git(self, package: Package) -> None: from poetry.core.packages.package import Package from poetry.core.vcs.git import Git src_dir = self._env.path / "src" / package.name if src_dir.exists(): safe_rmtree(str(src_dir)) src_dir.parent.mkdir(exist_ok=True) git = Git() git.clone(package.source_url, src_dir) reference = package.source_resolved_reference if not reference: reference = package.source_reference git.checkout(reference, src_dir) # Now we just need to install from the source directory pkg = Package(package.name, package.version) pkg._source_type = "directory" pkg._source_url = str(src_dir) pkg.develop = package.develop self.install_directory(pkg)
def get_package_from_vcs( cls, vcs, url, branch=None, tag=None, rev=None, name=None ): # type: (str, str, Optional[str], Optional[str], Optional[str], Optional[str]) -> Package if vcs != "git": raise ValueError("Unsupported VCS dependency {}".format(vcs)) tmp_dir = Path( mkdtemp(prefix="pypoetry-git-{}".format(url.split("/")[-1].rstrip(".git"))) ) try: git = Git() git.clone(url, tmp_dir) reference = branch or tag or rev if reference is not None: git.checkout(reference, tmp_dir) else: reference = "HEAD" revision = git.rev_parse(reference, tmp_dir).strip() package = cls.get_package_from_directory(tmp_dir, name=name) package._source_type = "git" package._source_url = url package._source_reference = reference package._source_resolved_reference = revision except Exception: raise finally: safe_rmtree(str(tmp_dir)) return package
def _install_git(self, operation): from poetry.core.vcs import Git package = operation.package operation_message = self.get_operation_message(operation) message = " <fg=blue;options=bold>•</> {message}: <info>Cloning...</info>".format( message=operation_message, ) self._write(operation, message) src_dir = self._env.path / "src" / package.name if src_dir.exists(): safe_rmtree(str(src_dir)) src_dir.parent.mkdir(exist_ok=True) git = Git() git.clone(package.source_url, src_dir) git.checkout(package.source_reference, src_dir) # Now we just need to install from the source directory package._source_url = str(src_dir) return self._install_directory(operation)
def _install_git(self, operation: Union["Install", "Update"]) -> int: from poetry.core.vcs import Git package = operation.package operation_message = self.get_operation_message(operation) message = ( f" <fg=blue;options=bold>•</> {operation_message}: <info>Cloning...</info>" ) self._write(operation, message) src_dir = self._env.path / "src" / package.name if src_dir.exists(): safe_rmtree(str(src_dir)) src_dir.parent.mkdir(exist_ok=True) git = Git() git.clone(package.source_url, src_dir) reference = package.source_resolved_reference if not reference: reference = package.source_reference git.checkout(reference, src_dir) # Now we just need to install from the source directory original_url = package.source_url package._source_url = str(src_dir) status_code = self._install_directory(operation) package._source_url = original_url return status_code
def remove(self, package): # If we have a VCS package, remove its source directory if package.source_type == "git": src_dir = self._env.path / "src" / package.name if src_dir.exists(): safe_rmtree(str(src_dir)) try: self.run("uninstall", package.name, "-y") except CalledProcessError as e: if "not installed" in str(e): return raise
def _remove(self, operation: Uninstall) -> int: package = operation.package # If we have a VCS package, remove its source directory if package.source_type == "git": src_dir = self._env.path / "src" / package.name if src_dir.exists(): safe_rmtree(str(src_dir)) try: return self.run_pip("uninstall", package.name, "-y") except CalledProcessError as e: if "not installed" in str(e): return 0 raise
def remove(self, package: "Package") -> None: try: self.run("uninstall", package.name, "-y") except CalledProcessError as e: if "not installed" in str(e): return raise # This is a workaround for https://github.com/pypa/pip/issues/4176 for nspkg_pth_file in self._env.site_packages.find(f"{package.name}-nspkg.pth"): nspkg_pth_file.unlink() # If we have a VCS package, remove its source directory if package.source_type == "git": src_dir = self._env.path / "src" / package.name if src_dir.exists(): safe_rmtree(str(src_dir))
def search_for_vcs(self, dependency): # type: (VCSDependency) -> List[Package] """ Search for the specifications that match the given VCS dependency. Basically, we clone the repository in a temporary directory and get the information we need by checking out the specified reference. """ if dependency.vcs != "git": raise ValueError("Unsupported VCS dependency {}".format( dependency.vcs)) tmp_dir = Path( mkdtemp(prefix="pypoetry-git-{}".format(dependency.name))) try: git = Git() git.clone(dependency.source, tmp_dir) git.checkout(dependency.reference, tmp_dir) revision = git.rev_parse(dependency.reference, tmp_dir).strip() if dependency.tag or dependency.rev: revision = dependency.reference directory_dependency = DirectoryDependency( dependency.name, tmp_dir, category=dependency.category, optional=dependency.is_optional(), ) for extra in dependency.extras: directory_dependency.extras.append(extra) package = self.search_for_directory(directory_dependency)[0] package.source_type = "git" package.source_url = dependency.source package.source_reference = revision except Exception: raise finally: safe_rmtree(str(tmp_dir)) return [package]
def install_git(self, package): from poetry.packages import Package from poetry.vcs import Git src_dir = self._env.path / "src" / package.name if src_dir.exists(): safe_rmtree(str(src_dir)) src_dir.parent.mkdir(exist_ok=True) git = Git() git.clone(package.source_url, src_dir) git.checkout(package.source_reference, src_dir) # Now we just need to install from the source directory pkg = Package(package.name, package.version) pkg.source_type = "directory" pkg.source_url = str(src_dir) pkg.develop = True self.install_directory(pkg)
def get_package_from_vcs( cls, vcs: str, url: str, branch: Optional[str] = None, tag: Optional[str] = None, rev: Optional[str] = None, name: Optional[str] = None, ) -> "Package": if vcs != "git": raise ValueError(f"Unsupported VCS dependency {vcs}") suffix = url.split("/")[-1].rstrip(".git") tmp_dir = Path(mkdtemp(prefix=f"pypoetry-git-{suffix}")) try: git = Git() git.clone(url, tmp_dir) reference = branch or tag or rev if reference is not None: git.checkout(reference, tmp_dir) else: reference = "HEAD" revision = git.rev_parse(reference, tmp_dir).strip() package = cls.get_package_from_directory(tmp_dir, name=name) package._source_type = "git" package._source_url = url package._source_reference = reference package._source_resolved_reference = revision except Exception: raise finally: safe_rmtree(str(tmp_dir)) return package