summaryrefslogtreecommitdiff
path: root/apt
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2009-08-24 13:42:22 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2009-08-24 13:42:22 +0200
commitbf4f2623d4002d60053d06251caabaa266272402 (patch)
treec59aa9f644363cd254e19b34d39ce2cbf7243bdc /apt
parent8c708ec819333e0360b815bbbb504460e9f15d9a (diff)
parent353d2494c234d87cb63affd07a927d1030fa9721 (diff)
downloadpython-apt-bf4f2623d4002d60053d06251caabaa266272402.tar.gz
merge from the debian-sid branch
Diffstat (limited to 'apt')
-rw-r--r--apt/__init__.py2
-rw-r--r--apt/cache.py43
-rw-r--r--apt/package.py15
3 files changed, 52 insertions, 8 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 d46cd078..59fe7664 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 """
@@ -354,22 +353,56 @@ class Cache(object):
@property
def broken_count(self):
"""Return the number of packages with broken dependencies."""
- return self._depcache.broken_count
+ return self._depcache.BrokenCount
@property
def delete_count(self):
"""Return the number of packages marked for deletion."""
- return self._depcache.del_count
+ return self._depcache.DelCount
@property
def install_count(self):
"""Return the number of packages marked for installation."""
- return self._depcache.inst_count
+ return self._depcache.InstCount
@property
def keep_count(self):
"""Return the number of packages marked as keep."""
- return self._depcache.keep_count
+ return self._depcache.KeepCount
+
+
+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/apt/package.py b/apt/package.py
index 7322bb94..d639f31f 100644
--- a/apt/package.py
+++ b/apt/package.py
@@ -365,7 +365,7 @@ class Version(object):
"""Return a list of Dependency objects for the given types."""
depends_list = []
depends = self._cand.DependsList
- for t in ["PreDepends", "Depends"]:
+ for t in types:
try:
for depVerList in depends[t]:
base_deps = []
@@ -1008,6 +1008,16 @@ class Package(object):
"""
return VersionList(self)
+ @property
+ def is_inst_broken(self):
+ """Return True if the to-be-installed package is broken."""
+ return self._pcache._depcache.IsInstBroken(self._pkg)
+
+ @property
+ def is_now_broken(self):
+ """Return True if the installed package is broken."""
+ return self._pcache._depcache.IsNowBroken(self._pkg)
+
# depcache actions
def markKeep(self):
@@ -1064,7 +1074,8 @@ class Package(object):
def markUpgrade(self):
"""Mark a package for upgrade."""
if self.isUpgradable:
- self.markInstall()
+ fromUser = not self._pcache._depcache.IsAutoInstalled(self._pkg)
+ self.markInstall(fromUser=fromUser)
else:
# FIXME: we may want to throw a exception here
sys.stderr.write(("MarkUpgrade() called on a non-upgrable pkg: "