diff --git a/stubs/portage/@tests/stubtest_allowlist.txt b/stubs/portage/@tests/stubtest_allowlist.txt new file mode 100644 index 000000000000..7b6030f2e00f --- /dev/null +++ b/stubs/portage/@tests/stubtest_allowlist.txt @@ -0,0 +1,19 @@ +portage.tests.* +portage.(VERSION|abssymlink|archlist|auxdbkeys|bsd_chflags|create_trees|eapi_is_supported|endversion|endversion_keys|getcwd|getpid|groups|lchown|load_mod|mtimedbfile|ostype|pickle_write|pkglines|portage_gid|portage_uid|portageexit|prelink_capable|profiledir|secpass|selinux|selinux_enabled|thirdpartymirrors|uid|userland|userpriv_groups|utf8_mode|wheelgid) +portage.(binpkg|checksum|const|cvstree|data|debug|dispatch_conf|eapi|eclass_cache|exception|getbinpkg|glsa|gpg|gpkg|installation|localization|locks|mail|manifest|metadata|module|news|output|process|progress|update|xpak) +portage.(binrepo|cache|dep|elog|emaint|env|proxy|repository|sync|util|xml)(..*)? +portage._compat_upgrade..* +portage._emirrordist..* +portage._sets..* +portage.dbapi.(DummyTree|IndexedPortdb|IndexedVardb|bintree|cpv_expand|dep_expand|vartree|virtual) +portage.dbapi.__all__ +portage.dbapi.dbapi..* +portage.dbapi.porttree..* +portage.package.ebuild.(deprecated_profile_check|digestcheck|digestgen|fetch|getmaskingreason|getmaskingstatus|prepare_build_dirs|profile_iuse) +portage.package.ebuild._config..* +portage.package.ebuild._ipc..* +portage.package.ebuild._parallel_manifest..* +portage.package.ebuild.config..* +portage.package.ebuild.doebuild..* +portage.versions.(best|catsplit|cpv_getkey|cpv_getversion|cpv_sort_key|pkgcmp|pkgsplit|ververify) +portage.versions.__all__ diff --git a/stubs/portage/METADATA.toml b/stubs/portage/METADATA.toml new file mode 100644 index 000000000000..42899c7e5c08 --- /dev/null +++ b/stubs/portage/METADATA.toml @@ -0,0 +1,5 @@ +version = "3.0.*" +upstream_repository = "https://gitweb.gentoo.org/proj/portage.git" + +[tool.stubtest] +ci_platforms = ["linux"] diff --git a/stubs/portage/portage/__init__.pyi b/stubs/portage/portage/__init__.pyi new file mode 100644 index 000000000000..1f34f5f1ad57 --- /dev/null +++ b/stubs/portage/portage/__init__.pyi @@ -0,0 +1,15 @@ +from collections.abc import Mapping +from typing import Any, TypedDict, type_check_only + +from .dbapi.porttree import portagetree +from .package.ebuild.config import config + +@type_check_only +class DBRootDict(TypedDict): + bintree: Any + porttree: portagetree + virtuals: Any + +db: Mapping[str, DBRootDict] +root: str +settings: config diff --git a/stubs/portage/portage/dbapi/__init__.pyi b/stubs/portage/portage/dbapi/__init__.pyi new file mode 100644 index 000000000000..5be1f8c5d70c --- /dev/null +++ b/stubs/portage/portage/dbapi/__init__.pyi @@ -0,0 +1,49 @@ +from typing import Literal + +class dbapi: + def aux_get( + self, + mycpv: str, + mylist: list[ + Literal[ + "DEFINED_PHASES", + "DEPEND", + "EAPI", + "HDEPEND", + "HOMEPAGE", + "INHERITED", + "IUSE", + "KEYWORDS", + "LICENSE", + "PDEPEND", + "PROPERTIES", + "PROVIDE", + "RDEPEND", + "REQUIRED_USE", + "repository", + "RESTRICT", + "SRC_URI", + "SLOT", + ] + ], + mytree: str | None = ..., + myrepo: str | None = ..., + ) -> list[str]: ... + def xmatch( + self, + level: Literal[ + "bestmatch-visible", + "match-all-cpv-only", + "match-all", + "match-visible", + "minimum-all", + "minimum-visible", + "minimum-all-ignore-profile", + ], + origdep: str, + ) -> list[str] | str: ... + def findname(self, mycpv: str, mytree: str | None = ..., myrepo: str | None = ...) -> str: ... + def findname2( + self, mycpv: str, mytree: str | None = ..., myrepo: str | None = ... + ) -> tuple[None, Literal[0]] | tuple[str, str] | tuple[str, None]: ... + def match(self, mydep: str, use_cache: Literal[0, 1] = ...) -> list[str] | str: ... diff --git a/stubs/portage/portage/dbapi/porttree.pyi b/stubs/portage/portage/dbapi/porttree.pyi new file mode 100644 index 000000000000..7fb352d06e4f --- /dev/null +++ b/stubs/portage/portage/dbapi/porttree.pyi @@ -0,0 +1,11 @@ +from collections.abc import Sequence + +from portage.dbapi import dbapi + +class portdbapi(dbapi): + def getFetchMap( + self, mypkg: str, useflags: Sequence[str] | None = ..., mytree: str | None = ... + ) -> dict[str, tuple[str, ...]]: ... + +class portagetree: + dbapi: portdbapi diff --git a/stubs/portage/portage/package/__init__.pyi b/stubs/portage/portage/package/__init__.pyi new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/stubs/portage/portage/package/ebuild/__init__.pyi b/stubs/portage/portage/package/ebuild/__init__.pyi new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/stubs/portage/portage/package/ebuild/config.pyi b/stubs/portage/portage/package/ebuild/config.pyi new file mode 100644 index 000000000000..d7acba7b1230 --- /dev/null +++ b/stubs/portage/portage/package/ebuild/config.pyi @@ -0,0 +1,24 @@ +from typing import Any + +class config: + def __init__( + self, + clone: config | None = ..., + mycpv: str | None = ..., + config_profile_path: str | None = ..., + config_incrementals: dict[str, str] | None = ..., + config_root: str | None = ..., + target_root: str | None = ..., + sysroot: str | None = ..., + eprefix: str | None = ..., + local_config: bool = True, + env: dict[str, str] | None = ..., + _unmatched_removal: bool = ..., + repositories: list[str] | None = ..., + ) -> None: ... + def __getitem__(self, key: str) -> str: ... + def __setitem__(self, key: str, value: str) -> None: ... + def __delitem__(self, key: str) -> None: ... + def __iter__(self) -> str: ... + def get(self, k: str, x: Any = ...) -> Any: ... + def __len__(self) -> int: ... diff --git a/stubs/portage/portage/package/ebuild/doebuild.pyi b/stubs/portage/portage/package/ebuild/doebuild.pyi new file mode 100644 index 000000000000..3c62b90371b6 --- /dev/null +++ b/stubs/portage/portage/package/ebuild/doebuild.pyi @@ -0,0 +1,54 @@ +from typing import Any, Literal + +from portage.dbapi.porttree import portdbapi + +from .config import config + +def doebuild( + myebuild: str, + mydo: Literal[ + "clean", + "cleanrm", + "compile", + "config", + "configure", + "depend", + "digest", + "fetch", + "fetchall", + "help", + "info", + "install", + "instprep", + "manifest", + "merge", + "nofetch", + "package", + "postinst", + "postrm", + "preinst", + "prepare", + "prerm", + "pretend", + "qmerge", + "rpm", + "setup", + "test", + "unmerge", + "unpack", + ], + settings: config | None = ..., + debug: Literal[0, 1] = ..., + listonly: Literal[0, 1] = ..., + fetchonly: Literal[0, 1] = ..., + cleanup: Literal[0, 1] = ..., + use_cache: Literal[0, 1] = ..., + fetchall: Literal[0, 1] = ..., + tree: Literal["vartree", "porttree", "bintree"] = ..., + mydbapi: portdbapi | None = ..., + vartree: Any = ..., + prev_mtimes: dict[str, Any] | None = ..., + fd_pipes: dict[str, str] | None = ..., + returnproc: int | bool = ..., +) -> Literal[0, 1] | bool | list[int]: # Missing portage.process.MultiprocessingProcess + ... diff --git a/stubs/portage/portage/versions.pyi b/stubs/portage/portage/versions.pyi new file mode 100644 index 000000000000..caeec5507f2b --- /dev/null +++ b/stubs/portage/portage/versions.pyi @@ -0,0 +1,44 @@ +from typing import Any, Literal +from typing_extensions import Self + +def vercmp(ver1: str, ver2: str, silent: Literal[0, 1] = ...) -> int | None: ... + +class _pkg_str(str): + @property + def stable(self) -> bool: ... + def __new__( + cls, + cpv: str, + metadata: dict[str, Any] | None = ..., + settings: Any = ..., + eapi: Any = ..., + repo: str | None = ..., + slot: str | None = ..., + build_time: int | None = ..., + build_id: str | None = ..., + file_size: int | None = ..., + mtime: int | None = ..., + db: Any = ..., + repoconfig: Any = ..., + ) -> Self: ... + def __init__( + self, + cpv: str, + metadata: dict[str, Any] | None = ..., + settings: Any = ..., + eapi: Any = ..., + repo: str | None = ..., + slot: str | None = ..., + build_time: int | None = ..., + build_id: str | None = ..., + file_size: int | None = ..., + mtime: int | None = ..., + db: Any = ..., + repoconfig: Any = ..., + ) -> None: ... + @staticmethod + def _long(var: Any, default: int) -> int: ... + +def catpkgsplit( + mydata: str | _pkg_str, silent: Literal[0, 1] = ..., eapi: str | None = ... +) -> tuple[str | None, str, str, str] | None: ...