X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fqueue.py;h=72804059ce940f307477060787758ab7e2d82d38;hb=a78532e60380e5a7935f8e5f6760c430b05eba4f;hp=a01a1e5ba620eea7c888fde260535924308e5228;hpb=0933fbc6c1cb7f84f143aaa6ca0aedfb83fb628c;p=dak.git diff --git a/daklib/queue.py b/daklib/queue.py index a01a1e5b..72804059 100755 --- a/daklib/queue.py +++ b/daklib/queue.py @@ -288,6 +288,8 @@ class Upload(object): self.warnings = [] self.notes = [] + self.later_check_files = [] + self.pkg.reset() def package_info(self): @@ -305,7 +307,7 @@ class Upload(object): for title, messages in msgs: if messages: msg += '\n\n%s:\n%s' % (title, '\n'.join(messages)) - msg += '\n' + msg += '\n\n' return msg @@ -820,8 +822,7 @@ class Upload(object): for f in file_keys: ret = holding.copy_to_holding(f) if ret is not None: - # XXX: Should we bail out here or try and continue? - self.rejects.append(ret) + self.warnings.append('Could not copy %s to holding; will attempt to find in DB later' % f) os.chdir(cwd) @@ -863,7 +864,9 @@ class Upload(object): if os.path.exists(f): self.rejects.append("Can't read `%s'. [permission denied]" % (f)) else: - self.rejects.append("Can't read `%s'. [file not found]" % (f)) + # Don't directly reject, mark to check later to deal with orig's + # we can find in the pool + self.later_check_files.append(f) entry["type"] = "unreadable" continue @@ -1008,6 +1011,10 @@ class Upload(object): self.check_dsc_against_db(dsc_filename, session) session.close() + # Finally, check if we're missing any files + for f in self.later_check_files: + self.rejects.append("Could not find file %s references in changes" % f) + return True ########################################################################### @@ -2071,17 +2078,17 @@ distribution.""" try: dest_fd = os.open(dest_file, os.O_RDWR | os.O_CREAT | os.O_EXCL, 0644) except OSError, e: - # File exists? Let's try and move it to the morgue + # File exists? Let's find a new name by adding a number if e.errno == errno.EEXIST: - morgue_file = os.path.join(cnf["Dir::Morgue"], cnf["Dir::MorgueReject"], file_entry) try: - morgue_file = utils.find_next_free(morgue_file) + dest_file = utils.find_next_free(dest_file, 255) except NoFreeFilenameError: # Something's either gone badly Pete Tong, or # someone is trying to exploit us. - utils.warn("**WARNING** failed to move %s from the reject directory to the morgue." % (file_entry)) + utils.warn("**WARNING** failed to find a free filename for %s in %s." % (file_entry, cnf["Dir::Queue::Reject"])) return - utils.move(dest_file, morgue_file, perms=0660) + + # Make sure we really got it try: dest_fd = os.open(dest_file, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0644) except OSError, e: @@ -2439,6 +2446,13 @@ distribution.""" orig_files[dsc_name]["path"] = os.path.join(i.location.path, i.filename) match = 1 + # Don't bitch that we couldn't find this file later + try: + self.later_check_files.remove(dsc_name) + except ValueError: + pass + + if not match: self.rejects.append("can not overwrite existing copy of '%s' already in the archive." % (dsc_name))