Fix DepPriority.__int__() to return distinguishable values, for use when
authorZac Medico <zmedico@gentoo.org>
Sat, 2 May 2009 08:04:17 +0000 (08:04 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 2 May 2009 08:04:17 +0000 (08:04 -0000)
measuring hardness for the circular dependency display. This fixes a problem
visible in bug #268038, comment #0, where buildtime dependencies are
incorrectly displayed as runtime dependencies.

svn path=/main/trunk/; revision=13589

pym/_emerge/__init__.py

index fc58198f66d088808290b3fe5ce3dcb50647156d..baa4ef2679973d3f0a9094cfd82104b9b57a86e4 100644 (file)
@@ -936,6 +936,43 @@ class DepPriority(AbstractDepPriority):
        __slots__ = ("satisfied", "optional", "rebuild")
 
        def __int__(self):
+               """
+               Note: These priorities are only used for measuring hardness
+               in the circular dependency display via digraph.debug_print(),
+               and nothing more. For actual merge order calculations, the
+               measures defined by the DepPriorityNormalRange and
+               DepPrioritySatisfiedRange classes are used.
+
+               Attributes                            Hardness
+
+               not satisfied and buildtime            8
+               not satisfied and runtime              7
+               not satisfied and runtime_post         6
+               satisfied and buildtime and rebuild    5
+               satisfied and buildtime                4
+               satisfied and runtime                  3
+               satisfied and runtime_post             2
+               optional                               1
+               (none of the above)                    0
+
+               """
+               if not self.satisfied:
+                       if self.buildtime:
+                               return 8
+                       if self.runtime:
+                               return 7
+                       if self.runtime_post:
+                               return 6
+               if self.buildtime:
+                       if self.rebuild:
+                               return 5
+                       return 4
+               if self.runtime:
+                       return 3
+               if self.runtime_post:
+                       return 2
+               if self.optional:
+                       return 1
                return 0
 
        def __str__(self):