From d914d4c1e241f8e511361b9ce98993ca8e1b98af Mon Sep 17 00:00:00 2001 From: Sebastian Heinlein Date: Tue, 25 Aug 2009 08:41:26 +0200 Subject: apt/package.py: Export if a package is an essential one (Closes: #543428) --- apt/package.py | 5 +++++ debian/changelog | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/apt/package.py b/apt/package.py index d639f31f..27e0dc90 100644 --- a/apt/package.py +++ b/apt/package.py @@ -652,6 +652,11 @@ class Package(object): This returns the same value as ID, which is unique.""" return self._pkg.ID + @property + def essential(self): + """Return True if the package is an essential part of the system.""" + return self._pkg.Essential + @DeprecatedProperty def installedVersion(self): """Return the installed version as string. diff --git a/debian/changelog b/debian/changelog index 00900dad..bfba50e0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,10 @@ python-apt (0.7.13.3) UNRELEASED; urgency=low * apt/cache.py: - add actiongroup() method (backport from 0.7.92) + [ Sebastian Heinlein ] + * apt/package.py: + - Export if a package is an essential one (Closes: #543428) + [ Julian Andres Klode ] * python/depcache.cc: - Make ActionGroups context managers so apt.Cache.actiongroup() has -- cgit v1.2.3 From 0aa3f4f3ce25a499a332c23f9493e629f30013dc Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 2 Sep 2009 20:45:52 +0200 Subject: re-work the logic in commit() to fail if installArchives() returns a unexpected result --- apt/cache.py | 6 +++++- debian/changelog | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apt/cache.py b/apt/cache.py index 828b167b..bb944041 100644 --- a/apt/cache.py +++ b/apt/cache.py @@ -314,8 +314,12 @@ class Cache(object): res = self.installArchives(pm, installProgress) if res == pm.ResultCompleted: break - if res == pm.ResultFailed: + elif res == pm.ResultFailed: raise SystemError("installArchives() failed") + elif res == pm.ResultIncomplete: + pass + else: + raise SystemError("internal-error: unknown result code from InstallArchives: %s" % res) # reload the fetcher for media swaping fetcher.Shutdown() return (res == pm.ResultCompleted) diff --git a/debian/changelog b/debian/changelog index bfba50e0..ada400bb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,8 @@ python-apt (0.7.13.3) UNRELEASED; urgency=low [ Michael Vogt ] * apt/cache.py: - add actiongroup() method (backport from 0.7.92) + - re-work the logic in commit() to fail if installArchives() returns + a unexpected result [ Sebastian Heinlein ] * apt/package.py: -- cgit v1.2.3 From 0d4a8172a7bceac5bdca37cc199d9bfba889cc4f Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 3 Sep 2009 08:46:33 +0200 Subject: apt/progress/__init__.py: doc update --- apt/progress/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apt/progress/__init__.py b/apt/progress/__init__.py index 337bd161..3a6b3f91 100644 --- a/apt/progress/__init__.py +++ b/apt/progress/__init__.py @@ -284,7 +284,11 @@ class InstallProgress(DumbInstallProgress): return os.fork() def waitChild(self): - """Wait for child progress to exit.""" + """Wait for child progress to exit. + + The return values is the full status returned from os.waitpid() + (not only the return code). + """ while True: try: select.select([self.statusfd], [], [], self.selectTimeout) -- cgit v1.2.3 From 2ca7c7acd3f47dc7da07fd8ad77df8c0c6c84735 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 3 Sep 2009 15:01:01 +0200 Subject: * apt/progress/__init__.py: - catch exceptions in pm.DoInstall() --- apt/progress/__init__.py | 11 +++++++++-- debian/changelog | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/apt/progress/__init__.py b/apt/progress/__init__.py index 3a6b3f91..97090643 100644 --- a/apt/progress/__init__.py +++ b/apt/progress/__init__.py @@ -311,8 +311,15 @@ class InstallProgress(DumbInstallProgress): """Start installing.""" pid = self.fork() if pid == 0: - # child - res = pm.DoInstall(self.writefd) + # pm.DoInstall might raise a exception, + # when this happens, we need to catch + # it, otherwise os._exit() is not run + # and the execution continues in the + # parent code leading to very confusing bugs + try: + res = pm.DoInstall(self.writefd) + except Exception, e: + os._exit(pm.ResultFailed) os._exit(res) self.child_pid = pid res = self.waitChild() diff --git a/debian/changelog b/debian/changelog index ada400bb..3f23a368 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,8 @@ python-apt (0.7.13.3) UNRELEASED; urgency=low - add actiongroup() method (backport from 0.7.92) - re-work the logic in commit() to fail if installArchives() returns a unexpected result + * apt/progress/__init__.py: + - catch exceptions in pm.DoInstall() [ Sebastian Heinlein ] * apt/package.py: -- cgit v1.2.3 From 7acb16fc4baa43cf2cbbc4de948973bdc099d878 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 3 Sep 2009 15:21:23 +0200 Subject: apt/progress/__init__.py: doc string update for run() --- apt/progress/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apt/progress/__init__.py b/apt/progress/__init__.py index 97090643..ca60810f 100644 --- a/apt/progress/__init__.py +++ b/apt/progress/__init__.py @@ -308,7 +308,11 @@ class InstallProgress(DumbInstallProgress): return res def run(self, pm): - """Start installing.""" + """Start installing. + + Returns the PackageManager status: + (pm.ResultCompleted, pm.ResultFailed, pm.ResultIncomplete) + """ pid = self.fork() if pid == 0: # pm.DoInstall might raise a exception, -- cgit v1.2.3