[Piuparts-commits] [SCM] piuparts git repository branch, master, updated. 0.53-32-g1b2cc02

Holger Levsen holger at layer-acht.org
Tue Jul 30 09:13:20 UTC 2013


The following commit has been merged in the master branch:
commit f83395bb45a1b3381494cbf5c1380e7959b0d135
Author: David Steele <dsteele at gmail.com>
Date:   Sat Jun 15 13:24:48 2013 -0400

    piupartslib/packagesdb.py - Add rdep chain length metric calc.
    
    Provide a means for detecting packages which support a long chain
    of reverse dependencies, so that testing priorities can concentrate
    on whittling them down.
    
    -------------------------------

diff --git a/debian/changelog b/debian/changelog
index d5d6c00..73db490 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -12,6 +12,7 @@ piuparts (0.54) UNRELEASED; urgency=low
     - Reworked rdep metrics (block_count, rrdep_count, waiting_count) to
       calculate on-demand. Access methods are moved from Package to
       PackagesDB.
+    - Add a metric for the worst-case reverse-dependency chain length.
 
  -- Holger Levsen <holger at debian.org>  Tue, 11 Jun 2013 15:05:03 +0200
 
diff --git a/piupartslib/packagesdb.py b/piupartslib/packagesdb.py
index 613dd89..ab47ab7 100644
--- a/piupartslib/packagesdb.py
+++ b/piupartslib/packagesdb.py
@@ -66,6 +66,7 @@ class Package(UserDict.UserDict):
         self.rrdep_cnt = None
         self.block_cnt = None
         self.waiting_cnt = None
+        self.rdep_chain_len = None
 
     def _parse_dependencies(self, header_name):
         if header_name in self._parsed_deps:
@@ -762,8 +763,10 @@ class PackagesDB:
         rrdep_set = set()
         rdeps = self._get_rdep_dict()
         next_level = set([pkg_name])
+        chain_len = 0
 
         while next_level:
+            chain_len += 1
             rrdep_set |= next_level
             new_pkgs = next_level
             next_level = set([y for x in new_pkgs if x in rdeps for y in rdeps[x]])
@@ -790,6 +793,8 @@ class PackagesDB:
         else:
             pkg.waiting_cnt = 0
 
+        pkg.rdep_chain_len = chain_len
+
     def block_count(self, pkg):
         if pkg.block_cnt is None:
             self._calc_rrdep_pkg_counts(pkg)
@@ -808,5 +813,11 @@ class PackagesDB:
 
         return pkg.waiting_cnt
 
+    def rdep_chain_len(self, pkg):
+        if pkg.rdep_chain_len is None:
+            self.calc_rrdep_pkg_counts(pkg)
+
+        return pkg.rdep_chain_len
+
 
 # vi:set et ts=4 sw=4 :

-- 
piuparts git repository



More information about the Piuparts-commits mailing list