]> git.decadent.org.uk Git - dak.git/commitdiff
Merge branch 'merge'
authorJoerg Jaspert <joerg@debian.org>
Wed, 28 Oct 2009 15:30:25 +0000 (16:30 +0100)
committerJoerg Jaspert <joerg@debian.org>
Wed, 28 Oct 2009 15:30:25 +0000 (16:30 +0100)
* merge:
  Fix return type.
  Don't call check_* due when we are running with No-Action
  While we're at it, split out another version of ensure_orig_files.
  check_lintian needs all the source, otherwise we can't check the package.
  Factor out symlink stuff from get_changelog_versions => ensure_all_source_exists

dak/process_unchecked.py
daklib/dbconn.py
daklib/queue.py
daklib/utils.py

index 5688e83f2b873fd3b77eab15b3a857c297375d91..5463f1a6521a7219332614396359719b13aca514 100755 (executable)
@@ -497,7 +497,7 @@ def process_it(changes_file):
                 u.check_distributions()
                 u.check_files(not Options["No-Action"])
                 valid_dsc_p = u.check_dsc(not Options["No-Action"])
-                if valid_dsc_p:
+                if valid_dsc_p and not Options["No-Action"]:
                     u.check_source()
                     u.check_lintian()
                 u.check_hashes()
index 6d5497fc2d5f4b096d972631637e284eb2ce00aa..9421b28f2a8d2de8f660c93865358172439477c8 100755 (executable)
@@ -1414,47 +1414,26 @@ class Queue(object):
 
                 session.add(qb)
 
-            # If the .orig tarballs are in the pool, create a symlink to
-            # them (if one doesn't already exist)
-            for dsc_file in changes.dsc_files.keys():
-                # Skip all files except orig tarballs
-                from daklib.regexes import re_is_orig_source
-                if not re_is_orig_source.match(dsc_file):
-                    continue
-                # Skip orig files not identified in the pool
-                if not (changes.orig_files.has_key(dsc_file) and
-                        changes.orig_files[dsc_file].has_key("id")):
-                    continue
-                orig_file_id = changes.orig_files[dsc_file]["id"]
-                dest = os.path.join(dest_dir, dsc_file)
-
-                # If it doesn't exist, create a symlink
-                if not os.path.exists(dest):
-                    q = session.execute("SELECT l.path, f.filename FROM location l, files f WHERE f.id = :id and f.location = l.id",
-                                        {'id': orig_file_id})
-                    res = q.fetchone()
-                    if not res:
-                        return "[INTERNAL ERROR] Couldn't find id %s in files table." % (orig_file_id)
-
-                    src = os.path.join(res[0], res[1])
-                    os.symlink(src, dest)
+            exists, symlinked = utils.ensure_orig_files(changes, dest, session)
 
-                    # Add it to the list of packages for later processing by apt-ftparchive
-                    qb = QueueBuild()
-                    qb.suite_id = s.suite_id
-                    qb.queue_id = self.queue_id
-                    qb.filename = dest
+            # Add symlinked files to the list of packages for later processing
+            # by apt-ftparchive
+            for filename in symlinked:
+                qb = QueueBuild()
+                qb.suite_id = s.suite_id
+                qb.queue_id = self.queue_id
+                qb.filename = filename
+                qb.in_queue = True
+                session.add(qb)
+
+            # Update files to ensure they are not removed prematurely
+            for filename in exists:
+                qb = get_queue_build(filename, s.suite_id, session)
+                if qb is None:
                     qb.in_queue = True
+                    qb.last_used = None
                     session.add(qb)
 
-                # If it does, update things to ensure it's not removed prematurely
-                else:
-                    qb = get_queue_build(dest, s.suite_id, session)
-                    if qb is None:
-                        qb.in_queue = True
-                        qb.last_used = None
-                        session.add(qb)
-
         if privatetrans:
             session.commit()
             session.close()
index 1d2a3275fc43ac8f29d062affa974a3f3efc6d6f..f7d999a3da7220135d89d522ac87948775182199 100755 (executable)
@@ -1025,21 +1025,16 @@ class Upload(object):
 
     ###########################################################################
 
-    def get_changelog_versions(self, source_dir):
-        """Extracts a the source package and (optionally) grabs the
-        version history out of debian/changelog for the BTS."""
-
-        cnf = Config()
+    def ensure_all_source_exists(self, dest_dir=None):
+        """
+        Ensure that dest_dir contains all the orig tarballs for the specified
+        changes. If it does not, symlink them into place.
 
-        # Find the .dsc (again)
-        dsc_filename = None
-        for f in self.pkg.files.keys():
-            if self.pkg.files[f]["type"] == "dsc":
-                dsc_filename = f
+        If dest_dir is None, populate the current directory.
+        """
 
-        # If there isn't one, we have nothing to do. (We have reject()ed the upload already)
-        if not dsc_filename:
-            return
+        if dest_dir is None:
+            dest_dir = os.getcwd()
 
         # Create a symlink mirror of the source files in our temporary directory
         for f in self.pkg.files.keys():
@@ -1064,6 +1059,26 @@ class Upload(object):
             dest = os.path.join(os.getcwd(), os.path.basename(orig_file))
             os.symlink(self.pkg.orig_files[orig_file]["path"], dest)
 
+    ###########################################################################
+
+    def get_changelog_versions(self, source_dir):
+        """Extracts a the source package and (optionally) grabs the
+        version history out of debian/changelog for the BTS."""
+
+        cnf = Config()
+
+        # Find the .dsc (again)
+        dsc_filename = None
+        for f in self.pkg.files.keys():
+            if self.pkg.files[f]["type"] == "dsc":
+                dsc_filename = f
+
+        # If there isn't one, we have nothing to do. (We have reject()ed the upload already)
+        if not dsc_filename:
+            return
+
+        self.ensure_all_source_exists()
+
         # Extract the source
         cmd = "dpkg-source -sn -x %s" % (dsc_filename)
         (result, output) = commands.getstatusoutput(cmd)
@@ -1207,6 +1222,8 @@ class Upload(object):
         if not valid_dist:
             return
 
+        self.ensure_all_source_exists()
+
         cnf = Config()
         tagfile = cnf.get("Dinstall::LintianTags")
         if tagfile is None:
index 2b243b85f9d6e19796dd7ec46e33c7f055cefdc4..5bbd61a1492ae17db0ff36292ec51044e0feb43e 100755 (executable)
@@ -45,7 +45,8 @@ from dak_exceptions import *
 from textutils import fix_maintainer
 from regexes import re_html_escaping, html_escaping, re_single_line_field, \
                     re_multi_line_field, re_srchasver, re_taint_free, \
-                    re_gpg_uid, re_re_mark, re_whitespace_comment, re_issource
+                    re_gpg_uid, re_re_mark, re_whitespace_comment, re_issource, \
+                    re_is_orig_source
 
 from srcformats import get_format_from_string
 from collections import defaultdict
@@ -1507,3 +1508,48 @@ if which_conf_file() != default_config:
     apt_pkg.ReadConfigFileISC(Cnf,which_conf_file())
 
 ###############################################################################
+
+def ensure_orig_files(changes, dest_dir, session):
+    """
+    Ensure that dest_dir contains all the orig tarballs for the specified
+    changes. If it does not, symlink them into place.
+
+    Returns a 2-tuple (already_exists, symlinked) containing a list of files
+    that were already there and a list of files that were symlinked into place.
+    """
+
+    exists, symlinked = [], []
+
+    for dsc_file in changes.dsc_files:
+
+        # Skip all files that are not orig tarballs
+        if not re_is_orig_source.match(dsc_file):
+            continue
+
+        # Skip orig files not identified in the pool
+        if not (dsc_file in changes.orig_files and
+                'id' in changes.orig_files[dsc_file]):
+            continue
+
+        dest = os.path.join(dest_dir, dsc_file)
+
+        if os.path.exists(dest):
+            exists.append(dest)
+            continue
+
+        orig_file_id = changes.orig_files[dsc_file]['id']
+
+        c = session.execute(
+            'SELECT l.path, f.filename FROM location l, files f WHERE f.id = :id and f.location = l.id',
+            {'id': orig_file_id}
+        )
+
+        res = c.fetchone()
+        if not res:
+            return "[INTERNAL ERROR] Couldn't find id %s in files table." % orig_file_id
+
+        src = os.path.join(res[0], res[1])
+        os.symlink(src, dest)
+        symlinked.append(dest)
+
+    return (exists, symlinked)