summaryrefslogtreecommitdiffstats
path: root/pym/portage/_sets/shell.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/portage/_sets/shell.py')
-rw-r--r--pym/portage/_sets/shell.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/pym/portage/_sets/shell.py b/pym/portage/_sets/shell.py
new file mode 100644
index 000000000..658353ef2
--- /dev/null
+++ b/pym/portage/_sets/shell.py
@@ -0,0 +1,45 @@
+# Copyright 2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+import subprocess
+
+from portage import os
+from portage import _unicode_decode
+from portage.sets.base import PackageSet
+from portage.sets import SetConfigError
+
+__all__ = ["CommandOutputSet"]
+
+class CommandOutputSet(PackageSet):
+ """This class creates a PackageSet from the output of a shell command.
+ The shell command should produce one atom per line, that is:
+
+ >>> atom1
+ atom2
+ ...
+ atomN
+
+ Args:
+ name: A string that identifies the set.
+ command: A string or sequence identifying the command to run
+ (see the subprocess.Popen documentaion for the format)
+ """
+ _operations = ["merge", "unmerge"]
+
+ def __init__(self, command):
+ super(CommandOutputSet, self).__init__()
+ self._command = command
+ self.description = "Package set generated from output of '%s'" % self._command
+
+ def load(self):
+ pipe = subprocess.Popen(self._command, stdout=subprocess.PIPE, shell=True)
+ stdout, stderr = pipe.communicate()
+ if pipe.wait() == os.EX_OK:
+ self._setAtoms(_unicode_decode(stdout).splitlines())
+
+ def singleBuilder(self, options, settings, trees):
+ if not "command" in options:
+ raise SetConfigError("no command specified")
+ return CommandOutputSet(options["command"])
+ singleBuilder = classmethod(singleBuilder)