summaryrefslogtreecommitdiff
path: root/src/backend/solvedeps.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/solvedeps.py')
-rw-r--r--src/backend/solvedeps.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/backend/solvedeps.py b/src/backend/solvedeps.py
new file mode 100644
index 0000000..256d588
--- /dev/null
+++ b/src/backend/solvedeps.py
@@ -0,0 +1,69 @@
+#!/usr/bin/python3
+
+import animation
+import subprocess
+import io
+
+@animation.wait('resolving dependencies')
+def package(pkgList):
+ areBinaries = []
+ areSources = []
+ needsConfig = int()
+ portageExec = subprocess.Popen(['emerge', '--quiet', '--pretend', '--getbinpkg', '--rebuilt-binaries', '--misspell-suggestion=n', '--fuzzy-search=n'] + pkgList, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+ for portageOutput in io.TextIOWrapper(portageExec.stderr, encoding="utf-8"):
+ if "The following keyword changes are necessary to proceed:" in portageOutput.rstrip():
+ needsConfig = int(1)
+
+ if "The following mask changes are necessary to proceed:" in portageOutput.rstrip():
+ needsConfig = int(1)
+
+ if "The following USE changes are necessary to proceed:" in portageOutput.rstrip():
+ needsConfig = int(1)
+
+ if "The following REQUIRED_USE flag constraints are unsatisfied:" in portageOutput.rstrip():
+ needsConfig = int(1)
+
+ for portageOutput in io.TextIOWrapper(portageExec.stdout, encoding="utf-8"):
+ if "[binary" in portageOutput.rstrip():
+ isBinary = str(portageOutput.rstrip().split("]")[1].split("[")[0].strip("\ "))
+ areBinaries.append(isBinary)
+
+ if "[ebuild" in portageOutput.rstrip():
+ isSource = str(portageOutput.rstrip().split("]")[1].split("[")[0].strip("\ "))
+ areSources.append(isSource)
+
+ portageExec.wait()
+ return areBinaries,areSources,needsConfig
+
+@animation.wait('resolving dependencies')
+def world():
+ areBinaries = []
+ areSources = []
+ needsConfig = int()
+ portageExec = subprocess.Popen(['emerge', '--quiet', '--update', '--deep', '--newuse', '--pretend', '--getbinpkg', '--rebuilt-binaries', '--backtrack=100', '--with-bdeps=y', '--misspell-suggestion=n', '--fuzzy-search=n', '@world'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+ for portageOutput in io.TextIOWrapper(portageExec.stderr, encoding="utf-8"):
+ if "The following keyword changes are necessary to proceed:" in portageOutput.rstrip():
+ needsConfig = int(1)
+
+ if "The following mask changes are necessary to proceed:" in portageOutput.rstrip():
+ needsConfig = int(1)
+
+ if "The following USE changes are necessary to proceed:" in portageOutput.rstrip():
+ needsConfig = int(1)
+
+ if "The following REQUIRED_USE flag constraints are unsatisfied:" in portageOutput.rstrip():
+ needsConfig = int(1)
+
+ for portageOutput in io.TextIOWrapper(portageExec.stdout, encoding="utf-8"):
+ if "[binary" in portageOutput.rstrip():
+ isBinary = str(portageOutput.rstrip().split("]")[1].split("[")[0].strip("\ "))
+ areBinaries.append(isBinary)
+
+ if "[ebuild" in portageOutput.rstrip():
+ isSource = str(portageOutput.rstrip().split("]")[1].split("[")[0].strip("\ "))
+ areSources.append(isSource)
+
+ portageExec.wait()
+ return areBinaries,areSources,needsConfig