install-ebuild-deps: new script

This commit is contained in:
Maciej Barć 2020-09-27 10:59:01 +02:00
parent 9ac429ba7a
commit 6d24e50a38
No known key found for this signature in database
GPG Key ID: 031C9FE65BED714A

99
src/install-ebuild-deps Executable file
View File

@ -0,0 +1,99 @@
#!/usr/bin/env python3
"""
Install Ebuild Dependencies
This script is strictly for working with ebuild files.
In normal situaltion when we already have a repository (/var/db/repos/repo),
to emerge dependencies we would just do "emerge --oneshot --onlydeps PKG".
Original author: XGQT
Copyright (c) 2020, src_prepare group
Licensed under the ISC License
"""
import argparse
from subprocess import call
parser = argparse.ArgumentParser(
description="Install Ebuild Dependencies",
epilog="Copyright (c) 2020, src_prepare group (License: ISC)"
)
parser.add_argument(
"ebuild",
nargs="*",
type=str
)
args = parser.parse_args()
def pkg_name(pkg_str):
"""Parse string and return a pkg name"""
# TODO: don't strip but force
proper = ""
# Strip required use
for i in pkg_str:
if i in ["["]:
break
proper += i
# Strip conditional use
for i in ["$", "DEPEND", "||", "!", "?", "(", ")"]:
if i in proper:
proper = ""
return proper
def ebuild_deps(ebuild_file):
"""Returns dependencies from a ebuild file"""
deps = []
adddeps = False
with open(ebuild_file) as ebuild:
for line in ebuild.read().splitlines():
if adddeps:
# TODO: Find a better pkg match method
if "/" in line:
deps.append(
pkg_name(line.strip())
)
elif "\"" in line:
adddeps = False
# TODO: Find a better way to find the depend "block"
elif "DEPEND" in line:
adddeps = True
return deps
def main():
"""The main function"""
print("Ebuilds:", args.ebuild)
all_deps = []
for ebuild in args.ebuild:
all_deps += ebuild_deps(ebuild)
print("Dependencies:", all_deps)
# TODO: Maybe use Portage API
call(
[
"emerge",
"--autounmask",
"--noreplace",
"--oneshot"
]
+
list(filter(None, all_deps))
)
if __name__ == "__main__":
main()