summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt/cache.py9
-rw-r--r--apt/package.py5
-rw-r--r--apt/progress/__init__.py5
-rw-r--r--data/templates/Ubuntu.info.in61
-rw-r--r--debian/changelog24
-rw-r--r--doc/source/apt_pkg/cache.rst9
-rw-r--r--doc/source/apt_pkg/index.rst5
-rw-r--r--python/apt_pkgmodule.cc2
-rw-r--r--python/cache.cc27
-rw-r--r--tests/test_enhances.py17
10 files changed, 150 insertions, 14 deletions
diff --git a/apt/cache.py b/apt/cache.py
index fa6c404c..ae6f2fcc 100644
--- a/apt/cache.py
+++ b/apt/cache.py
@@ -43,7 +43,14 @@ class Cache(object):
"""Dictionary-like package cache.
This class has all the packages that are available in it's
- dictionary
+ dictionary.
+
+ Keyword arguments:
+ progress -- a OpProgress object
+ rootdir -- a alternative root directory. if that is given
+ the system sources.list and system lists/ files are
+ not read, only files relative to the given rootdir
+ memonly -- build the cache in memory only
"""
def __init__(self, progress=None, rootdir=None, memonly=False):
diff --git a/apt/package.py b/apt/package.py
index 8d3be1b0..f33871c6 100644
--- a/apt/package.py
+++ b/apt/package.py
@@ -379,6 +379,11 @@ class Version(object):
return depends_list
@property
+ def enhances(self):
+ """Return the list of enhances for the package version."""
+ return self.get_dependencies("Enhances")
+
+ @property
def dependencies(self):
"""Return the dependencies of the package version."""
return self.get_dependencies("PreDepends", "Depends")
diff --git a/apt/progress/__init__.py b/apt/progress/__init__.py
index 8a9eb86f..8694de77 100644
--- a/apt/progress/__init__.py
+++ b/apt/progress/__init__.py
@@ -246,7 +246,10 @@ class InstallProgress(DumbInstallProgress):
return
try:
while not self.read.endswith("\n"):
- self.read += os.read(self.statusfd.fileno(), 1)
+ r = os.read(self.statusfd.fileno(), 1)
+ if not r:
+ return
+ self.read += r
except OSError, (errno_, errstr):
# resource temporarly unavailable is ignored
if errno_ != errno.EAGAIN and errno_ != errno.EWOULDBLOCK:
diff --git a/data/templates/Ubuntu.info.in b/data/templates/Ubuntu.info.in
index a8993d8a..2335454f 100644
--- a/data/templates/Ubuntu.info.in
+++ b/data/templates/Ubuntu.info.in
@@ -1,5 +1,66 @@
_ChangelogURI: http://changelogs.ubuntu.com/changelogs/pool/%s/%s/%s/%s_%s/changelog
+Suite: lucid
+RepositoryType: deb
+BaseURI: http://archive.ubuntu.com/ubuntu/
+MatchURI: archive.ubuntu.com/ubuntu
+BaseURI-powerpc: http://ports.ubuntu.com/
+MatchURI-powerpc: ports.ubuntu.com|archive.ubuntu.com
+BaseURI-lpia: http://ports.ubuntu.com/
+MatchURI-lpia: ports.ubuntu.com|archive.ubuntu.com
+MirrorsFile-amd64: /usr/share/python-apt/templates/Ubuntu.mirrors
+MirrorsFile-i386: /usr/share/python-apt/templates/Ubuntu.mirrors
+_Description: Ubuntu 10.04 'Lucid Lynx'
+Component: main
+_CompDescription: Officially supported
+_CompDescriptionLong: Canonical-supported Open Source software
+Component: universe
+_CompDescription: Community-maintained
+_CompDescriptionLong: Community-maintained Open Source software
+Component: restricted
+_CompDescription: Non-free drivers
+_CompDescriptionLong: Proprietary drivers for devices
+Component: multiverse
+_CompDescription: Restricted software
+_CompDescriptionLong: Software restricted by copyright or legal issues
+
+Suite: lucid
+MatchName: .*
+BaseURI: cdrom:\[Ubuntu.*10.04
+MatchURI: cdrom:\[Ubuntu.*10.04
+_Description: Cdrom with Ubuntu 10.04 'Lucid Lynx'
+Available: False
+Component: main
+_CompDescription: Officially supported
+Component: restricted
+_CompDescription: Restricted copyright
+
+Suite: lucid-security
+ParentSuite: lucid
+RepositoryType: deb
+BaseURI: http://security.ubuntu.com/ubuntu/
+MatchURI: archive.ubuntu.com/ubuntu|security.ubuntu.com
+BaseURI-powerpc: http://ports.ubuntu.com/
+MatchURI-powerpc: ports.ubuntu.com/ubuntu
+BaseURI-lpia: http://ports.ubuntu.com/
+MatchURI-lpia: ports.ubuntu.com/ubuntu
+_Description: Important security updates
+
+Suite: lucid-updates
+ParentSuite: lucid
+RepositoryType: deb
+_Description: Recommended updates
+
+Suite: lucid-proposed
+ParentSuite: lucid
+RepositoryType: deb
+_Description: Pre-released updates
+
+Suite: lucid-backports
+ParentSuite: lucid
+RepositoryType: deb
+_Description: Unsupported updates
+
Suite: karmic
RepositoryType: deb
BaseURI: http://archive.ubuntu.com/ubuntu/
diff --git a/debian/changelog b/debian/changelog
index f34b62c4..fa87d5a4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,27 @@
+python-apt (0.7.13.5) UNRELEASED; urgency=low
+
+ [ Colin Watson ]
+ * apt/progress/__init__.py:
+ - Fix InstallProgress.updateInterface() to cope with read() returning 0
+ on non-blocking file descriptors (LP: #491027).
+
+ [ Michael Vogt ]
+ * apt/cache.py:
+ - improved docstring for the cache
+ - add "enhances" property
+ * data/templates/Ubuntu.info.in:
+ - add lucid
+ * python/cache.cc:
+ - add UntranslatedDepType attribute to DependencyType
+ - add DepTypeEnum that returns a value from
+ {DepDepends, DepPreDepends, ...}
+ * python/apt_pkgmodule.cc:
+ - add DepDpkgBreaks, DepEnhances constants
+ * doc/source/apt_pkg/{cache.rst, index.rst}:
+ - update documentation as well
+
+ -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 02 Dec 2009 16:50:55 +0100
+
python-apt (0.7.13.4) unstable; urgency=low
[ Michael Vogt ]
diff --git a/doc/source/apt_pkg/cache.rst b/doc/source/apt_pkg/cache.rst
index 334b7869..ca9f8b49 100644
--- a/doc/source/apt_pkg/cache.rst
+++ b/doc/source/apt_pkg/cache.rst
@@ -596,8 +596,17 @@ Example:
.. attribute:: DepType
+ The type of the dependency, as translated string, eg. "Depends".
+
+ .. attribute:: UntranslatedDepType
+
The type of the dependency, as string, eg. "Depends".
+ .. attribute:: DepTypeEnum
+
+ The type of the dependency, as integer that matches a value
+ of :ref:`Dependency types <DependencyTypes>`.
+
.. attribute:: ID
The ID of the package, as integer.
diff --git a/doc/source/apt_pkg/index.rst b/doc/source/apt_pkg/index.rst
index 6e7b772e..4256d971 100644
--- a/doc/source/apt_pkg/index.rst
+++ b/doc/source/apt_pkg/index.rst
@@ -329,19 +329,22 @@ Package States
.. data:: CurStateNotInstalled
.. data:: CurStateUnPacked
-
+.. _DependencyTypes:
Dependency types
^^^^^^^^^^^^^^^^
.. data:: DepConflicts
.. data:: DepDepends
+.. data:: DepDpkgBreaks
+.. data:: DepEnhances
.. data:: DepObsoletes
.. data:: DepPreDepends
.. data:: DepRecommends
.. data:: DepReplaces
.. data:: DepSuggests
+
.. _InstStates:
Installed states
diff --git a/python/apt_pkgmodule.cc b/python/apt_pkgmodule.cc
index 86732781..bfa1227e 100644
--- a/python/apt_pkgmodule.cc
+++ b/python/apt_pkgmodule.cc
@@ -504,6 +504,8 @@ extern "C" void initapt_pkg()
AddInt(Dict,"DepConflicts",pkgCache::Dep::Conflicts);
AddInt(Dict,"DepReplaces",pkgCache::Dep::Replaces);
AddInt(Dict,"DepObsoletes",pkgCache::Dep::Obsoletes);
+ AddInt(Dict,"DepDpkgBreaks",pkgCache::Dep::DpkgBreaks);
+ AddInt(Dict,"DepEnhances",pkgCache::Dep::Enhances);
AddInt(Dict,"PriImportant",pkgCache::State::Important);
AddInt(Dict,"PriRequired",pkgCache::State::Required);
diff --git a/python/cache.cc b/python/cache.cc
index a88490bd..023cf041 100644
--- a/python/cache.cc
+++ b/python/cache.cc
@@ -27,6 +27,17 @@
class pkgSourceList;
+// must be in sync with pkgCache::DepType in libapt
+// it sucks to have it here duplicated, but we get it
+// translated from libapt and that is certainly not what
+// we want in a programing interface
+const char *UntranslatedDepTypes[] =
+{
+ "", "Depends","PreDepends","Suggests",
+ "Recommends","Conflicts","Replaces",
+ "Obsoletes", "Breaks", "Enhances"
+};
+
/*}}}*/
struct PkgListStruct
{
@@ -495,17 +506,7 @@ static PyObject *MakeDepends(PyObject *Owner,pkgCache::VerIterator &Ver,
// Switch/create a new dict entry
if (LastDepType != Start->Type || LastDep != 0)
{
- // must be in sync with pkgCache::DepType in libapt
- // it sucks to have it here duplicated, but we get it
- // translated from libapt and that is certainly not what
- // we want in a programing interface
- const char *Types[] =
- {
- "", "Depends","PreDepends","Suggests",
- "Recommends","Conflicts","Replaces",
- "Obsoletes", "Breaks", "Enhances"
- };
- PyObject *Dep = PyString_FromString(Types[Start->Type]);
+ PyObject *Dep = PyString_FromString(UntranslatedDepTypes[Start->Type]);
LastDepType = Start->Type;
LastDep = PyDict_GetItem(Dict,Dep);
if (LastDep == 0)
@@ -823,6 +824,10 @@ static PyObject *DependencyAttr(PyObject *Self,char *Name)
return PyString_FromString(Dep.CompType());
else if (strcmp("DepType",Name) == 0)
return PyString_FromString(Dep.DepType());
+ else if (strcmp("UntranslatedDepType",Name) == 0)
+ return PyString_FromString(UntranslatedDepTypes[Dep->Type]);
+ else if (strcmp("DepTypeEnum",Name) == 0)
+ return Py_BuildValue("i", Dep->Type);
else if (strcmp("ID",Name) == 0)
return Py_BuildValue("i",Dep->ID);
diff --git a/tests/test_enhances.py b/tests/test_enhances.py
new file mode 100644
index 00000000..3eced9f9
--- /dev/null
+++ b/tests/test_enhances.py
@@ -0,0 +1,17 @@
+#!/usr/bin/python
+
+import apt
+
+cache = apt.Cache()
+
+for pkg in cache:
+ if pkg.installed and pkg.installed.enhances:
+ s = "%s enhances:" % pkg.name
+ for or_list in pkg.installed.enhances:
+ for enhances in or_list.or_dependencies:
+ s += " %s" % enhances.name
+ if (cache.has_key(enhances.name) and
+ not cache[enhances.name].isInstalled):
+ s += "(*missing*) "
+ s += ","
+ print s[:-1]