install-ebuild-deps: new script
This commit is contained in:
parent
9ac429ba7a
commit
6d24e50a38
99
src/install-ebuild-deps
Executable file
99
src/install-ebuild-deps
Executable 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()
|
Loading…
Reference in New Issue
Block a user