X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fqueue.py;h=66424d86eb6a5e30424026bb3f851ae49ef5819c;hb=bf38dcbe75f32f221887eeda8fce0e81e64db115;hp=be9451bcba4b27b9ce090d913b883bba143ae82e;hpb=3c3cf6b0861825abdc771e9b4c676ac52db56744;p=dak.git diff --git a/daklib/queue.py b/daklib/queue.py index be9451bc..66424d86 100755 --- a/daklib/queue.py +++ b/daklib/queue.py @@ -288,6 +288,7 @@ class Upload(object): for title, messages in msgs: if messages: msg += '\n\n%s:\n%s' % (title, '\n'.join(messages)) + msg += '\n' return msg @@ -437,12 +438,6 @@ class Upload(object): self.pkg.changes["chopversion"] = re_no_epoch.sub('', self.pkg.changes["version"]) self.pkg.changes["chopversion2"] = re_no_revision.sub('', self.pkg.changes["chopversion"]) - # Check there isn't already a changes file of the same name in one - # of the queue directories. - base_filename = os.path.basename(filename) - if get_knownchange(base_filename): - self.rejects.append("%s: a file with this name already exists." % (base_filename)) - # Check the .changes is non-empty if not self.pkg.files: self.rejects.append("%s: nothing to do (Files field is empty)." % (base_filename)) @@ -725,7 +720,6 @@ class Upload(object): def per_suite_file_checks(self, f, suite, session): cnf = Config() entry = self.pkg.files[f] - archive = utils.where_am_i() # Skip byhand if entry.has_key("byhand"): @@ -769,9 +763,9 @@ class Upload(object): # Determine the location location = cnf["Dir::Pool"] - l = get_location(location, entry["component"], archive, session) + l = get_location(location, entry["component"], session=session) if l is None: - self.rejects.append("[INTERNAL ERROR] couldn't determine location (Component: %s, Archive: %s)" % (entry["component"], archive)) + self.rejects.append("[INTERNAL ERROR] couldn't determine location (Component: %)" % entry["component"]) entry["location id"] = -1 else: entry["location id"] = l.location_id @@ -814,28 +808,31 @@ class Upload(object): os.chdir(cwd) - # Check there isn't already a .changes file of the same name in - # the proposed-updates "CopyChanges" storage directories. + # check we already know the changes file # [NB: this check must be done post-suite mapping] base_filename = os.path.basename(self.pkg.changes_file) - for suite in self.pkg.changes["distribution"].keys(): - copychanges = "Suite::%s::CopyChanges" % (suite) - if cnf.has_key(copychanges) and \ - os.path.exists(os.path.join(cnf[copychanges], base_filename)): - self.rejects.append("%s: a file with this name already exists in %s" \ - % (base_filename, cnf[copychanges])) + session = DBConn().session() + + try: + dbc = session.query(DBChange).filter_by(changesname=base_filename).one() + # if in the pool or in a queue other than unchecked, reject + if (dbc.in_queue is None) \ + or (dbc.in_queue is not None + and dbc.in_queue.queue_name != 'unchecked'): + self.rejects.append("%s file already known to dak" % base_filename) + except NoResultFound, e: + # not known, good + pass has_binaries = False has_source = False - session = DBConn().session() - for f, entry in self.pkg.files.items(): # Ensure the file does not already exist in one of the accepted directories - for d in [ "Accepted", "Byhand", "New", "ProposedUpdates", "OldProposedUpdates", "Embargoed", "Unembargoed" ]: + for d in [ "Byhand", "New", "ProposedUpdates", "OldProposedUpdates", "Embargoed", "Unembargoed" ]: if not cnf.has_key("Dir::Queue::%s" % (d)): continue - if os.path.exists(cnf["Dir::Queue::%s" % (d) ] + '/' + f): + if os.path.exists(os.path.join(cnf["Dir::Queue::%s" % (d) ], f)): self.rejects.append("%s file already exists in the %s directory." % (f, d)) if not re_taint_free.match(f): @@ -1845,15 +1842,19 @@ distribution.""" print "Installing." self.logger.log(["installing changes", self.pkg.changes_file]) + poolfiles = [] + # Add the .dsc file to the DB first for newfile, entry in self.pkg.files.items(): if entry["type"] == "dsc": - dsc_component, dsc_location_id = add_dsc_to_db(self, newfile, session) + dsc_component, dsc_location_id, pfs = add_dsc_to_db(self, newfile, session) + for j in pfs: + poolfiles.append(j) # Add .deb / .udeb files to the DB (type is always deb, dbtype is udeb/deb) for newfile, entry in self.pkg.files.items(): if entry["type"] == "deb": - add_deb_to_db(self, newfile, session) + poolfiles.append(add_deb_to_db(self, newfile, session)) # If this is a sourceful diff only upload that is moving # cross-component we need to copy the .orig files into the new @@ -1888,6 +1889,8 @@ distribution.""" session.add(dscf) session.flush() + poolfiles.append(newf) + # Install the files into the pool for newfile, entry in self.pkg.files.items(): destination = os.path.join(cnf["Dir::Pool"], entry["pool name"], newfile) @@ -1961,11 +1964,14 @@ distribution.""" os.rename(temp_filename, filename) os.chmod(filename, 0644) - # auto-build queue -# res = get_or_set_queue('buildd', session).autobuild_upload(self.pkg, session) -# if res: -# utils.fubar(res) -# now_date = datetime.now() + session.commit() + + # Set up our copy queues (e.g. buildd queues) + for suite_name in self.pkg.changes["distribution"].keys(): + suite = get_suite(suite_name, session) + for q in suite.copyqueues: + for f in poolfiles: + q.add_file_from_pool(f) session.commit() @@ -2020,22 +2026,22 @@ distribution.""" os.unlink(os.path.join(from_dir, f)) if os.path.exists(os.path.join(h.holding_dir, f)): os.unlink(os.path.join(h.holding_dir, f)) - + os.unlink(os.path.join(from_dir, self.pkg.changes_file)) if os.path.exists(os.path.join(h.holding_dir, self.pkg.changes_file)): os.unlink(os.path.join(h.holding_dir, self.pkg.changes_file)) ########################################################################### - def move_to_dir (self, dest, perms=0660, changesperms=0664): + def move_to_queue (self, queue): """ - Move files to dest with certain perms/changesperms + Move files to a destination queue using the permissions in the table """ h = Holding() utils.move(os.path.join(h.holding_dir, self.pkg.changes_file), - dest, perms=changesperms) + dest, perms=int(queue.changesperms, 8)) for f in self.pkg.files.keys(): - utils.move(os.path.join(h.holding_dir, f), dest, perms=perms) + utils.move(os.path.join(h.holding_dir, f), dest, perms=int(queue.perms, 8)) ########################################################################### @@ -2426,6 +2432,7 @@ distribution.""" # This would fix the stupidity of changing something we often iterate over # whilst we're doing it del self.pkg.files[dsc_name] + dsc_entry["files id"] = i.file_id if not orig_files.has_key(dsc_name): orig_files[dsc_name] = {} orig_files[dsc_name]["path"] = os.path.join(i.location.path, i.filename)