diff options
-rw-r--r-- | src/matchbox/__init__.py | 32 | ||||
-rw-r--r-- | src/tinderbox/__init__.py | 13 |
2 files changed, 43 insertions, 2 deletions
diff --git a/src/matchbox/__init__.py b/src/matchbox/__init__.py index 7ca0b53..f55fd91 100644 --- a/src/matchbox/__init__.py +++ b/src/matchbox/__init__.py @@ -3,7 +3,12 @@ import thread import protocol import pickle import StringIO +import os +import portage +import random +import db +from db import DjangoDB class MatchboxServer(object): @@ -11,6 +16,8 @@ class MatchboxServer(object): self.host = host self.port = port self.sock = None + self.db = DjangoDB() + self.portsettings = portage.config(clone=portage.settings) def start_server(self): try: @@ -52,7 +59,8 @@ class MatchboxServer(object): if type(command) is protocol.GetNextPackage: print "returning next package to compile" # TODO get real package from database with missing info - repl = protocol.GetNextPackageReply('games-misc/fortune-mod-cs','1.6.9','-unicode') + repl = protocol.GetNextPackageReply(self._get_next_package(),None,None) + client_socket.sendall(pickle.dumps(repl)) elif type(command) is protocol.AddPackageInfo: for pi in command.package_infos: @@ -62,9 +70,10 @@ class MatchboxServer(object): print pi.use_flags print pi.emerge_info print pi.attachments - + print len(pi.content) print pi.content.keys() + # TODO else: print "unknown command: %s" % command @@ -73,5 +82,24 @@ class MatchboxServer(object): print "closing client connection" client_socket.close() + def _get_next_package(self): + categories = os.listdir(self.portsettings["PORTDIR"]) + cat_ind = random.randint(0,len(categories)-1) + selcat = categories[cat_ind] + checkdir = "%s/%s" % (self.portsettings["PORTDIR"], selcat) + if not os.path.isdir(checkdir): + return self._get_next_package() + + + packages = os.listdir(checkdir) + pkg_ind = random.randint(0,len(packages)-1) + selpkg = packages[pkg_ind] + + checkdir = "%s/%s/%s" % (self.portsettings["PORTDIR"], selcat, selpkg) + if not os.path.isdir(checkdir): + return self._get_next_package() + + return "%s/%s" % (selcat,selpkg) + diff --git a/src/tinderbox/__init__.py b/src/tinderbox/__init__.py index 863a848..a64f88e 100644 --- a/src/tinderbox/__init__.py +++ b/src/tinderbox/__init__.py @@ -106,6 +106,7 @@ class Tinderbox(object): # setup logging! os.chroot(config.WORK_CHROOT) init_logging() + package.version = "-".join(portage.pkgsplit(pkg)[1:]) self._emerge_package_subprocess(pkg, ebuild, dep_groups, package) sys.exit(0) @@ -233,6 +234,18 @@ class Tinderbox(object): self._save_info('package_infos', package_infos) + def _add_attachment(self, pkg, path): + try: + attfile = open(path,"r") + except IOError, (errno, strerror): + print "Unable to read file %s: %d: %s" % (path, errno, strerror) + log.warning("Unable to read file (%s) %d: %s" % (path, errno, strerror)) + pkg.attachments[os.path.basename(path)] = "Unable to read file %s" % path + else: + pkg.attachments[os.path.basename(path)] = attfile.read() + attfile.close() + del attfile + def _save_info(self, key, data): """ Save data inside CHROOT_LOGS directory, under name 'key'. This |