]> git.decadent.org.uk Git - dak.git/blobdiff - dak/check_archive.py
Add database fields to override compression methods.
[dak.git] / dak / check_archive.py
index 3e537d805c1073d811c9ac9a1edbc1ed6a24885b..a47febbd229768a952812e5537061f35cc243893 100755 (executable)
@@ -479,11 +479,40 @@ def check_build_depends():
 
 ################################################################################
 
+_add_missing_source_checksums_query = R"""
+INSERT INTO source_metadata
+  (src_id, key_id, value)
+SELECT
+  s.id,
+  :checksum_key,
+  E'\n' ||
+    (SELECT STRING_AGG(' ' || tmp.checksum || ' ' || tmp.size || ' ' || tmp.basename, E'\n' ORDER BY tmp.basename)
+     FROM
+       (SELECT
+            CASE :checksum_type
+              WHEN 'Files' THEN f.md5sum
+              WHEN 'Checksums-Sha1' THEN f.sha1sum
+              WHEN 'Checksums-Sha256' THEN f.sha256sum
+            END AS checksum,
+            f.size,
+            SUBSTRING(f.filename FROM E'/([^/]*)\\Z') AS basename
+          FROM files f JOIN dsc_files ON f.id = dsc_files.file
+          WHERE dsc_files.source = s.id AND f.id != s.file
+       ) AS tmp
+    )
+
+  FROM
+    source s
+  WHERE NOT EXISTS (SELECT 1 FROM source_metadata md WHERE md.src_id=s.id AND md.key_id = :checksum_key);
+"""
+
 def add_missing_source_checksums():
     """ Add missing source checksums to source_metadata """
     session = DBConn().session()
     for checksum in ['Files', 'Checksums-Sha1', 'Checksums-Sha256']:
-        rows = session.execute('SELECT source_metadata_add_missing_checksum(:type)', {'type': checksum}).scalar()
+        checksum_key = get_or_set_metadatakey(checksum, session).key_id
+        rows = session.execute(_add_missing_source_checksums_query,
+            {'checksum_key': checksum_key, 'checksum_type': checksum}).rowcount
         if rows > 0:
             print "Added {0} missing entries for {1}".format(rows, checksum)
     session.commit()
@@ -500,9 +529,9 @@ def main ():
         if not cnf.has_key("Check-Archive::Options::%s" % (i)):
             cnf["Check-Archive::Options::%s" % (i)] = ""
 
-    args = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
+    args = apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv)
 
-    Options = cnf.SubTree("Check-Archive::Options")
+    Options = cnf.subtree("Check-Archive::Options")
     if Options["Help"]:
         usage()