diff options
| author | Michael Vogt <michael.vogt@ubuntu.com> | 2009-08-24 13:42:22 +0200 |
|---|---|---|
| committer | Michael Vogt <michael.vogt@ubuntu.com> | 2009-08-24 13:42:22 +0200 |
| commit | bf4f2623d4002d60053d06251caabaa266272402 (patch) | |
| tree | c59aa9f644363cd254e19b34d39ce2cbf7243bdc /apt | |
| parent | 8c708ec819333e0360b815bbbb504460e9f15d9a (diff) | |
| parent | 353d2494c234d87cb63affd07a927d1030fa9721 (diff) | |
| download | python-apt-bf4f2623d4002d60053d06251caabaa266272402.tar.gz | |
merge from the debian-sid branch
Diffstat (limited to 'apt')
| -rw-r--r-- | apt/__init__.py | 2 | ||||
| -rw-r--r-- | apt/cache.py | 43 | ||||
| -rw-r--r-- | apt/package.py | 15 |
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: " |
