]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/rm.py
Merge remote-tracking branch 'nthykier/auto-decruft'
[dak.git] / daklib / rm.py
index 7dda5239c633433c594affc897eac0baf5ab695f..e6940d53de99fce1268c2588842ddc04cdcb346d 100644 (file)
 
 ################################################################################
 
-# TODO: Insert "random dak quote" here
+# From: Andrew Morton <akpm@osdl.org>
+# Subject: 2.6.6-mm5
+# To: linux-kernel@vger.kernel.org
+# Date: Sat, 22 May 2004 01:36:36 -0700
+# X-Mailer: Sylpheed version 0.9.7 (GTK+ 1.2.10; i386-redhat-linux-gnu)
+#
+# [...]
+#
+# Although this feature has been around for a while it is new code, and the
+# usual cautions apply.  If it munches all your files please tell Jens and
+# he'll type them in again for you.
 
 ################################################################################
 
 import commands
 import apt_pkg
+import fcntl
 from re import sub
 from collections import defaultdict
 from regexes import re_build_dep_arch
@@ -67,18 +78,18 @@ class ReverseDependencyChecker(object):
         self._session = session
         dbsuite = get_suite(suite, session)
         suite_archs2id = dict((x.arch_string, x.arch_id) for x in get_suite_architectures(suite))
-        package_dependencies, arch_providors_of, arch_provided_by = self._load_package_information(session,
+        package_dependencies, arch_providers_of, arch_provided_by = self._load_package_information(session,
                                                                                                    dbsuite.suite_id,
                                                                                                    suite_archs2id)
         self._package_dependencies = package_dependencies
-        self._arch_providors_of = arch_providors_of
+        self._arch_providers_of = arch_providers_of
         self._arch_provided_by = arch_provided_by
         self._archs_in_suite = set(suite_archs2id)
 
     @staticmethod
     def _load_package_information(session, suite_id, suite_archs2id):
         package_dependencies = defaultdict(lambda: defaultdict(set))
-        arch_providors_of = defaultdict(lambda: defaultdict(set))
+        arch_providers_of = defaultdict(lambda: defaultdict(set))
         arch_provided_by = defaultdict(lambda: defaultdict(set))
         source_deps = defaultdict(set)
         metakey_d = get_or_set_metadatakey("Depends", session)
@@ -98,7 +109,7 @@ class ReverseDependencyChecker(object):
             deps = defaultdict(set)
             providers_of = defaultdict(set)
             provided_by = defaultdict(set)
-            arch_providors_of[architecture] = providers_of
+            arch_providers_of[architecture] = providers_of
             arch_provided_by[architecture] = provided_by
             package_dependencies[architecture] = deps
 
@@ -167,7 +178,7 @@ class ReverseDependencyChecker(object):
                 except ValueError as e:
                     print "Error for package %s: %s" % (source, e)
 
-        return package_dependencies, arch_providors_of, arch_provided_by
+        return package_dependencies, arch_providers_of, arch_provided_by
 
     def check_reverse_depends(self, removal_requests):
         """Bulk check reverse dependencies
@@ -195,7 +206,7 @@ class ReverseDependencyChecker(object):
         removals_by_arch = defaultdict(set)
         affected_virtual_by_arch = defaultdict(set)
         package_dependencies = self._package_dependencies
-        arch_providors_of = self._arch_providors_of
+        arch_providers_of = self._arch_providers_of
         arch_provided_by = self._arch_provided_by
         arch_provides2removal = defaultdict(lambda: defaultdict(set))
         dep_problems = defaultdict(set)
@@ -217,7 +228,7 @@ class ReverseDependencyChecker(object):
                     arch_all_removals.add(pkg)
                     continue
                 removals_by_arch[arch].add(pkg)
-                if pkg in arch_providors_of[arch]:
+                if pkg in arch_providers_of[arch]:
                     affected_virtual_by_arch[arch].add(pkg)
 
         if arch_all_removals:
@@ -226,7 +237,7 @@ class ReverseDependencyChecker(object):
                     continue
                 removals_by_arch[arch].update(arch_all_removals)
                 for pkg in arch_all_removals:
-                    if pkg in arch_providors_of[arch]:
+                    if pkg in arch_providers_of[arch]:
                         affected_virtual_by_arch[arch].add(pkg)
 
         if not removals_by_arch:
@@ -342,7 +353,7 @@ def remove(session, reason, suites, removals,
     suite_ids_list = []
     suites_list = utils.join_with_commas_and(suites)
     cnf = utils.get_conf()
-    con_components = None
+    con_components = ''
 
     #######################################################################################################
 
@@ -361,7 +372,7 @@ def remove(session, reason, suites, removals,
     if date is None:
         date = commands.getoutput("date -R")
 
-    if partial:
+    if partial and components:
 
         component_ids_list = []
         for componentname in components:
@@ -370,7 +381,8 @@ def remove(session, reason, suites, removals,
                 raise ValueError("component '%s' not recognised." % componentname)
             else:
                 component_ids_list.append(component.component_id)
-        con_components = "AND component IN (%s)" % ", ".join([str(i) for i in component_ids_list])
+        if component_ids_list:
+            con_components = "AND component IN (%s)" % ", ".join([str(i) for i in component_ids_list])
 
     for i in removals:
         package = i[0]
@@ -383,7 +395,7 @@ def remove(session, reason, suites, removals,
         if architecture not in d[package][version]:
             d[package][version].append(architecture)
 
-    for package in sorted(removals):
+    for package in sorted(d):
         versions = sorted(d[package], cmp=apt_pkg.version_compare)
         for version in versions:
             d[package][version].sort(utils.arch_compare_sw)
@@ -412,6 +424,9 @@ def remove(session, reason, suites, removals,
     log_filename = cnf["Rm::LogFile"]
     log822_filename = cnf["Rm::LogFile822"]
     with utils.open_file(log_filename, "a") as logfile, utils.open_file(log822_filename, "a") as logfile822:
+        fcntl.lockf(logfile, fcntl.LOCK_EX)
+        fcntl.lockf(logfile822, fcntl.LOCK_EX)
+
         logfile.write("=========================================================================\n")
         logfile.write("[Date: %s] [ftpmaster: %s]\n" % (date, whoami))
         logfile.write("Removed the following packages from %s:\n\n%s" % (suites_list, summary))
@@ -450,7 +465,7 @@ def remove(session, reason, suites, removals,
                     session.execute("DELETE FROM bin_associations WHERE bin = :packageid AND suite = :suiteid",
                                     {'packageid': package_id, 'suiteid': suite_id})
                 # Delete from the override file
-                if partial:
+                if not partial:
                     if architecture == "source":
                         type_id = dsc_type_id
                     else: