This should make AnyDependency work

Now

pisi it installs the first dependency of AnyDependency if none of them is installed

pisi rm package removes the reverse dependency of any other package in AnyDependency,
in other words, AnyDependency siblings of the to be removed package, is installed and
satisfies AnyDependency, then rev dep is not removed.
This commit is contained in:
Faik Uygur
2009-08-20 12:32:51 +00:00
parent 1831c400e6
commit 7a76b6ff1c
4 changed files with 34 additions and 7 deletions
+22 -6
View File
@@ -88,6 +88,9 @@ class InstallDB(lazydb.LazyDB):
if deps:
for dep in deps.tags("Dependency"):
revdeps.setdefault(dep.firstChild().data(), set()).add((name, dep.toString()))
for anydep in deps.tags("AnyDependency"):
for dep in anydep.tags("Dependency"):
revdeps.setdefault(dep.firstChild().data(), set()).add((name, anydep.toString()))
def __generate_revdeps(self):
revdeps = {}
@@ -197,18 +200,31 @@ class InstallDB(lazydb.LazyDB):
ctime)
return info
def __make_dependency(self, depStr):
node = piksemel.parseString(depStr)
dependency = pisi.dependency.Dependency()
dependency.package = node.firstChild().data()
if node.attributes():
attr = node.attributes()[0]
dependency.__dict__[attr] = node.getAttribute(attr)
return dependency
def __create_dependency(self, depStr):
if "<AnyDependency>" in depStr:
anydependency = pisi.specfile.AnyDependency()
for dep in re.compile('(<Dependency>.*?</Dependency>)').findall(depStr):
anydependency.dependencies.append(self.__make_dependency(dep))
return anydependency
else:
return self.__make_dependency(depStr)
def get_rev_deps(self, name):
rev_deps = []
if self.rev_deps_db.has_key(name):
for pkg, dep in self.rev_deps_db[name]:
node = piksemel.parseString(dep)
dependency = pisi.dependency.Dependency()
dependency.package = node.firstChild().data()
if node.attributes():
attr = node.attributes()[0]
dependency.__dict__[attr] = node.getAttribute(attr)
dependency = self.__create_dependency(dep)
rev_deps.append((pkg, dependency))
return rev_deps
+4
View File
@@ -56,3 +56,7 @@ class Dependency(pisi.relation.Relation):
else:
pkg = packagedb.get_package(self.package)
return self.satisfies_relation(pkg.version, pkg.release)
# Added for AnyDependency, single Dependency always returns False
def satisfied_by_any_installed_other_than(self, package):
return False
+2 -1
View File
@@ -104,7 +104,8 @@ def plan_remove(A):
for (rev_dep, depinfo) in rev_deps:
# we don't deal with uninstalled rev deps
# and unsatisfied dependencies (this is important, too)
if installdb.has_package(rev_dep) and depinfo.satisfied_by_installed():
# satisfied_by_any_installed_other_than is for AnyDependency
if installdb.has_package(rev_dep) and depinfo.satisfied_by_installed() and not depinfo.satisfied_by_any_installed_other_than(x):
if not rev_dep in G_f.vertices():
Bp.add(rev_dep)
G_f.add_plain_dep(rev_dep, x)
+6
View File
@@ -197,6 +197,12 @@ class AnyDependency:
return True
return False
def satisfied_by_any_installed_other_than(self, package):
for dependency in self.dependencies:
if dependency.package != package and dependency.satisfied_by_installed():
return True
return False
def satisfied_by_installed(self):
for dependency in self.dependencies:
if dependency.satisfied_by_installed():