SOFT The upper boundary for soft dependencies.
MIN The lower boundary for soft dependencies.
"""
- __slots__ = ("__weakref__", "satisfied", "buildtime", "runtime", "runtime_post")
+ __slots__ = ("__weakref__", "satisfied", "buildtime", "runtime", "runtime_post", "rebuild")
MEDIUM = -1
MEDIUM_SOFT = -2
SOFT = -3
- MIN = -5
+ MIN = -6
def __init__(self, **kwargs):
for myattr in self.__slots__:
if myattr == "__weakref__":
return -1
if self.runtime_post:
return -2
- if self.buildtime:
+ if self.rebuild:
return -3
- if self.runtime:
+ if self.buildtime:
return -4
- if self.runtime_post:
+ if self.runtime:
return -5
- return -5
+ if self.runtime_post:
+ return -6
+ return -6
def __lt__(self, other):
return self.__int__() < other
def __le__(self, other):
#"no downgrade" emerge
"""
mytype, myroot, mykey = mybigkey
- existing_node = None
- if addme:
- existing_node = self.pkg_node_map[myroot].get(mykey)
- if existing_node:
- self._parent_child_digraph.add(existing_node, myparent)
- if existing_node != myparent:
- # Refuse to make a node depend on itself so that the we don't
- # don't create a bogus circular dependency in self.altlist().
- if rev_dep and myparent:
- self.digraph.addnode(myparent, existing_node,
- priority=priority)
- else:
- self.digraph.addnode(existing_node, myparent,
- priority=priority)
- return 1
-
- if "--nodeps" not in self.myopts:
- self.spinner.update()
+
if mytype == "blocks":
if myparent and \
"--buildpkgonly" not in self.myopts and \
return 0
del e
+ # normal arg, not system or world
+ if arg and len(self._sets) == 1 and \
+ "selective" not in self.myparams:
+ # For revdep-rebuild, dependencies on packages specified as
+ # arguments are given higher priority since the currently
+ # installed version has been rendered useless by ABI breakage.
+ # It's okay to increase the priority here even if the caller
+ # is not revdep-rebuild.
+ if priority.satisfied:
+ priority.rebuild = True
+
+ existing_node = None
+ if addme:
+ existing_node = self.pkg_node_map[myroot].get(mykey)
+ if existing_node:
+ self._parent_child_digraph.add(existing_node, myparent)
+ if existing_node != myparent:
+ # Refuse to make a node depend on itself so that the we don't
+ # don't create a bogus circular dependency in self.altlist().
+ if rev_dep and myparent:
+ self.digraph.addnode(myparent, existing_node,
+ priority=priority)
+ else:
+ self.digraph.addnode(existing_node, myparent,
+ priority=priority)
+ return 1
+
+ if "--nodeps" not in self.myopts:
+ self.spinner.update()
+
reinstall_for_flags = None
merging=1
if mytype == "installed":
if x.startswith("dir"):
skip = False
for ext in dir_extensions:
- if x == "dir" + ext:
+ if x == "dir" + ext or \
+ x == "dir" + ext + ".old":
skip = True
break
if skip:
list2.append(int(vlist2[i]))
# now we have to use floats so 1.02 compares correctly against 1.1
else:
- list1.append(float("0."+vlist1[i]))
- list2.append(float("0."+vlist2[i]))
+ # list1.append(float("0."+vlist1[i]))
+ # list2.append(float("0."+vlist2[i]))
+ # Since python floats have limited range, we multiply both
+ # floating point representations by a constant so that they are
+ # transformed into whole numbers. This allows the practically
+ # infinite range of a python int to be exploited. The
+ # multiplication is done by padding both literal strings with
+ # zeros as necessary to ensure equal length.
+ max_len = max(len(vlist1[i]), len(vlist2[i]))
+ list1.append(int(vlist1[i].ljust(max_len, "0")))
+ list2.append(int(vlist2[i].ljust(max_len, "0")))
# and now the final letter
if len(match1.group(5)):