X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fdbconn.py;h=bf77b2a7b50401eb6f3430dd8b77f96ab7583d97;hb=e2ab59085f36e9fec253cb2b473595409ba99bd2;hp=4c6f38340676670e27b41373e7780aa81b5ce1cf;hpb=35eea3b7e76b202f70ef627db6547d334e8c91ed;p=dak.git diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 4c6f3834..bf77b2a7 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -493,7 +493,7 @@ class DBBinary(ORMObject): def properties(self): return ['package', 'version', 'maintainer', 'source', 'architecture', \ 'poolfile', 'binarytype', 'fingerprint', 'install_date', \ - 'suites_count', 'binary_id', 'contents_count'] + 'suites_count', 'binary_id', 'contents_count', 'extra_sources'] def not_null_constraints(self): return ['package', 'version', 'maintainer', 'source', 'poolfile', \ @@ -2465,6 +2465,16 @@ def add_deb_to_db(u, filename, session=None): bin.source_id = bin_sources[0].source_id + if entry.has_key("built-using"): + for srcname, version in entry["built-using"]: + exsources = get_sources_from_name(srcname, version, session=session) + if len(exsources) != 1: + raise NoSourceFieldError, "Unable to find source package (%s = %s) in Built-Using for %s (%s), %s, file %s, type %s, signed by %s" % \ + (srcname, version, bin.package, bin.version, entry["architecture"], + filename, bin.binarytype, u.pkg.changes["fingerprint"]) + + bin.extra_sources.append(exsources[0]) + # Add and flush object so it has an ID session.add(bin) @@ -2849,6 +2859,7 @@ class DBConn(object): 'changes_pending_files_map', 'changes_pending_source_files', 'changes_pool_files', + 'extra_src_references', # TODO: the maintainer column in table override should be removed. 'override', 'suite_architectures', @@ -2942,7 +2953,9 @@ class DBConn(object): fingerprint = relation(Fingerprint), install_date = self.tbl_binaries.c.install_date, suites = relation(Suite, secondary=self.tbl_bin_associations, - backref=backref('binaries', lazy='dynamic'))), + backref=backref('binaries', lazy='dynamic')), + extra_sources = relation(DBSource, secondary=self.tbl_extra_src_references, + backref=backref('extra_binary_references', lazy='dynamic'))), extension = validator) mapper(BinaryACL, self.tbl_binary_acl, @@ -3164,18 +3177,18 @@ class DBConn(object): def __createconn(self): from config import Config cnf = Config() - if cnf["DB::Service"]: + if cnf.has_key("DB::Service"): connstr = "postgresql://service=%s" % cnf["DB::Service"] - elif cnf["DB::Host"]: + elif cnf.has_key("DB::Host"): # TCP/IP connstr = "postgresql://%s" % cnf["DB::Host"] - if cnf["DB::Port"] and cnf["DB::Port"] != "-1": + if cnf.has_key("DB::Port") and cnf["DB::Port"] != "-1": connstr += ":%s" % cnf["DB::Port"] connstr += "/%s" % cnf["DB::Name"] else: # Unix Socket connstr = "postgresql:///%s" % cnf["DB::Name"] - if cnf["DB::Port"] and cnf["DB::Port"] != "-1": + if cnf.has_key("DB::Port") and cnf["DB::Port"] != "-1": connstr += "?port=%s" % cnf["DB::Port"] engine_args = { 'echo': self.debug } @@ -3210,19 +3223,15 @@ class DBConn(object): self.__setuptables() self.__setupmappers() + self.pid = os.getpid() def session(self): + # reinitialize DBConn in new processes + if self.pid != os.getpid(): + clear_mappers() + self.__createconn() return self.db_smaker() - def reset(self): - ''' - Resets the DBConn object. This function must be called by subprocesses - created by the multiprocessing module. See tests/dbtest_multiproc.py - for an example. - ''' - clear_mappers() - self.__createconn() - __all__.append('DBConn')