summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2009-08-21 15:18:33 +0200
committerJulian Andres Klode <jak@debian.org>2009-08-21 15:18:33 +0200
commite2d814ffc20e231a3b8201f7d66145939c99174c (patch)
treeff62cd5fadea27d6a7b3324b2a196ea6d1403701
parent200249fc4f0fccd19e12e1abcb718c08df0bf752 (diff)
downloadpython-apt-e2d814ffc20e231a3b8201f7d66145939c99174c.tar.gz
* apt/cache.py: Introduce ProblemResolver class (Closes: #542705)
-rw-r--r--apt/__init__.py2
-rw-r--r--apt/cache.py35
-rw-r--r--debian/changelog4
-rw-r--r--doc/source/apt/cache.rst5
-rw-r--r--doc/source/apt/index.rst3
5 files changed, 46 insertions, 3 deletions
diff --git a/apt/__init__.py b/apt/__init__.py
index ae2abbf2..4b3e6bf2 100644
--- a/apt/__init__.py
+++ b/apt/__init__.py
@@ -23,7 +23,7 @@ import os
# import some fancy classes
from apt.package import Package
-from apt.cache import Cache
+from apt.cache import Cache, ProblemResolver
from apt.progress import (
OpProgress, FetchProgress, InstallProgress, CdromProgress)
from apt.cdrom import Cdrom
diff --git a/apt/cache.py b/apt/cache.py
index c1e2428c..33d55368 100644
--- a/apt/cache.py
+++ b/apt/cache.py
@@ -91,7 +91,6 @@ class Cache(object):
for f in files:
if not os.path.exists(rootdir+f):
open(rootdir+f,"w")
-
def _runCallbacks(self, name):
""" internal helper to run a callback """
@@ -363,6 +362,40 @@ class Cache(object):
return self._depcache.keep_count
+class ProblemResolver(object):
+ """Resolve problems due to dependencies and conflicts.
+
+ The first argument 'cache' is an instance of apt.Cache.
+ """
+
+ def __init__(self, cache):
+ self._resolver = apt_pkg.GetPkgProblemResolver(cache._depcache)
+
+ def clear(self, package):
+ """Reset the package to the default state."""
+ self._resolver.Clear(package._pkg)
+
+ def install_protect(self):
+ """mark protected packages for install or removal."""
+ self._resolver.InstallProtect()
+
+ def protect(self, package):
+ """Protect a package so it won't be removed."""
+ self._resolver.Protect(package._pkg)
+
+ def remove(self, package):
+ """Mark a package for removal."""
+ self._resolver.Remove(package._pkg)
+
+ def resolve(self):
+ """Resolve dependencies, try to remove packages where needed."""
+ self._resolver.Resolve()
+
+ def resolve_by_keep(self):
+ """Resolve dependencies, do not try to remove packages."""
+ self._resolver.ResolveByKeep()
+
+
# ----------------------------- experimental interface
diff --git a/debian/changelog b/debian/changelog
index d91b90a5..bf5a6036 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-python-apt (0.7.12.2) UNRELEASED; urgency=low
+python-apt (0.7.13.0) UNRELEASED; urgency=low
[ Michael Vogt ]
* apt/package.py:
@@ -10,6 +10,8 @@ python-apt (0.7.12.2) UNRELEASED; urgency=low
of dependencies and returns a list of Dependency objects.
- Do not mark the package as manually installed on upgrade (Closes: #542699)
- Add Package.is_now_broken and Package.is_inst_broken.
+ * apt/cache.py:
+ - Introduce ProblemResolver class (Closes: #542705)
-- Julian Andres Klode <jak@debian.org> Fri, 21 Aug 2009 14:57:08 +0200
diff --git a/doc/source/apt/cache.rst b/doc/source/apt/cache.rst
index d96cba97..beae74a2 100644
--- a/doc/source/apt/cache.rst
+++ b/doc/source/apt/cache.rst
@@ -70,6 +70,11 @@ packages whose state has been changed, eg. packages marked for installation::
>>> print len(changed) == len(cache.GetChanges()) # Both need to have same length
True
+The ProblemResolver class
+--------------------------
+
+.. autoclass:: ProblemResolver
+ :members:
Exceptions
----------
diff --git a/doc/source/apt/index.rst b/doc/source/apt/index.rst
index 5047a0fd..bf39354f 100644
--- a/doc/source/apt/index.rst
+++ b/doc/source/apt/index.rst
@@ -56,3 +56,6 @@ in the package.
Please see :class:`apt.package.Package` for documentation.
+.. class:: ProblemResolver
+
+ Please see :class:`apt.cache.ProblemResolver` for documentation.