diff options
| author | Julian Andres Klode <jak@debian.org> | 2009-08-21 16:55:11 +0200 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2009-08-21 16:55:11 +0200 |
| commit | dea3fad6d30e85f184d34e80490ad24ac89a9438 (patch) | |
| tree | cc437e0777a88423199bcd15ac464e400b35ffe8 /apt | |
| parent | e3c630140e6595126046866a40e11e90c74278f2 (diff) | |
| parent | 63ea10b9f81725c9304aa729de4a3768a28b4c81 (diff) | |
| download | python-apt-dea3fad6d30e85f184d34e80490ad24ac89a9438.tar.gz | |
Merge 0.7.13.0 from unstable.
Diffstat (limited to 'apt')
| -rw-r--r-- | apt/__init__.py | 2 | ||||
| -rw-r--r-- | apt/cache.py | 40 | ||||
| -rw-r--r-- | apt/package.py | 36 |
3 files changed, 69 insertions, 9 deletions
diff --git a/apt/__init__.py b/apt/__init__.py index a75218a8..677a625b 100644 --- a/apt/__init__.py +++ b/apt/__init__.py @@ -22,7 +22,7 @@ import apt_pkg # import some fancy classes from apt.package import Package -from apt.cache import Cache +from apt.cache import Cache, ProblemResolver from apt.cdrom import Cdrom if apt_pkg._COMPAT_0_7: diff --git a/apt/cache.py b/apt/cache.py index ae4254e0..eff07ef8 100644 --- a/apt/cache.py +++ b/apt/cache.py @@ -278,7 +278,7 @@ class Cache(object): return providers @deprecated_args - def update(self, fetch_progress=None): + def update(self, fetch_progress=None, pulse_interval=0): """Run the equivalent of apt-get update. The first parameter *fetch_progress* may be set to an instance of @@ -287,13 +287,15 @@ class Cache(object): """ lockfile = apt_pkg.config.find_dir("Dir::State::Lists") + "lock" lock = apt_pkg.get_lock(lockfile) + if lock < 0: raise LockFailedException("Failed to lock %s" % lockfile) try: if fetch_progress is None: fetch_progress = apt.progress.FetchProgress() - return self._cache.update(fetch_progress, self._list) + return self._cache.update(fetch_progress, self._list, + pulse_interval) finally: os.close(lock) @@ -434,6 +436,40 @@ class Cache(object): cachePreChange = function_deprecated_by(cache_pre_change) +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.ProblemResolver(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.install_protect() + + 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.resolve_by_keep() + + # ----------------------------- experimental interface diff --git a/apt/package.py b/apt/package.py index 50b57760..8c9770e9 100644 --- a/apt/package.py +++ b/apt/package.py @@ -66,14 +66,16 @@ class BaseDependency(object): name - The name of the dependency relation - The relation (>,>=,==,<,<=,) version - The version depended on + rawtype - The type of the dependendy (e.g. 'Recommends') pre_depend - Boolean value whether this is a pre-dependency. """ - def __init__(self, name, rel, ver, pre): + def __init__(self, name, rel, ver, pre, rawtype=None): self.name = name self.relation = rel self.version = ver self.pre_depend = pre + self.rawtype = rawtype def __repr__(self): return ('<BaseDependency: name:%r relation:%r version:%r preDepend:%r>' @@ -377,9 +379,8 @@ class Version(object): """Return a Record() object for this version.""" return Record(self._records.record) - @property - def dependencies(self): - """Return the dependencies of the package version.""" + def get_dependencies(self, *types): + """Return a list of Dependency objects for the given types.""" depends_list = [] depends = self._cand.depends_list for type_ in ["PreDepends", "Depends"]: @@ -389,13 +390,24 @@ class Version(object): for dep_or in dep_ver_list: base_deps.append(BaseDependency(dep_or.target_pkg.name, dep_or.comp_type, dep_or.target_ver, - (type_ == "PreDepends"))) + (type_ == "PreDepends"), + rawtype=type_)) depends_list.append(Dependency(base_deps)) except KeyError: pass return depends_list @property + def dependencies(self): + """Return the dependencies of the package version.""" + return self.get_dependencies("PreDepends", "Depends") + + @property + def recommends(self): + """Return the recommends of the package version.""" + return self.get_dependencies("Recommends") + + @property def origins(self): """Return a list of origins for the package version.""" origins = [] @@ -1100,6 +1112,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 mark_keep(self): @@ -1158,7 +1180,8 @@ class Package(object): def mark_upgrade(self): """Mark a package for upgrade.""" if self.is_upgradable: - self.mark_install() + from_user = not self._pcache._depcache.is_auto_installed(self._pkg) + self.mark_install(from_user=from_user) else: # FIXME: we may want to throw a exception here sys.stderr.write(("MarkUpgrade() called on a non-upgrable pkg: " @@ -1250,6 +1273,7 @@ def _test(): print "InstalledSize: %s " % pkg.candidate.installed_size print "PackageSize: %s " % pkg.candidate.size print "Dependencies: %s" % pkg.installed.dependencies + print "Recommends: %s" % pkg.installed.recommends for dep in pkg.candidate.dependencies: print ",".join("%s (%s) (%s) (%s)" % (o.name, o.version, o.relation, o.pre_depend) for o in dep.or_dependencies) |
