summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--po/python-apt.pot10
-rw-r--r--python/cache.cc7
-rw-r--r--tests/test_lp659438.py68
3 files changed, 78 insertions, 7 deletions
diff --git a/po/python-apt.pot b/po/python-apt.pot
index bde5f9c1..00637f52 100644
--- a/po/python-apt.pot
+++ b/po/python-apt.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-06 14:56+0100\n"
+"POT-Creation-Date: 2012-04-17 21:15+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -455,11 +455,11 @@ msgstr ""
msgid "Invalid unicode in description for '%s' (%s). Please report."
msgstr ""
-#: ../apt/package.py:1085 ../apt/package.py:1191
+#: ../apt/package.py:1088 ../apt/package.py:1194
msgid "The list of changes is not available"
msgstr ""
-#: ../apt/package.py:1197
+#: ../apt/package.py:1200
#, python-format
msgid ""
"The list of changes is not available yet.\n"
@@ -468,7 +468,7 @@ msgid ""
"until the changes become available or try again later."
msgstr ""
-#: ../apt/package.py:1204
+#: ../apt/package.py:1207
msgid ""
"Failed to download the list of changes. \n"
"Please check your Internet connection."
@@ -606,6 +606,6 @@ msgstr ""
msgid "Please insert a Disc in the drive and press enter"
msgstr ""
-#: ../apt/cache.py:158
+#: ../apt/cache.py:157
msgid "Building data structures"
msgstr ""
diff --git a/python/cache.cc b/python/cache.cc
index 52ce32e3..c51bd4af 100644
--- a/python/cache.cc
+++ b/python/cache.cc
@@ -197,11 +197,11 @@ static PyObject *PkgCacheOpen(PyObject *Self,PyObject *Args)
return HandleErrors();
}
+ //std::cout << "new cache is " << (pkgCache*)(*Cache) << std::endl;
+
// ensure that the states are correct (LP: #659438)
pkgApplyStatus(*Cache);
- //std::cout << "new cache is " << (pkgCache*)(*Cache) << std::endl;
-
// update the cache pointer after the cache was rebuild
((CppPyObject<pkgCache*> *)Self)->Object = (pkgCache*)(*Cache);
@@ -403,6 +403,9 @@ static PyObject *PkgCacheNew(PyTypeObject *type,PyObject *Args,PyObject *kwds)
return HandleErrors();
}
+ // ensure that the states are correct (LP: #659438)
+ pkgApplyStatus(*Cache);
+
CppPyObject<pkgCacheFile*> *CacheFileObj =
CppPyObject_NEW<pkgCacheFile*>(0,&PyCacheFile_Type, Cache);
diff --git a/tests/test_lp659438.py b/tests/test_lp659438.py
new file mode 100644
index 00000000..25a6278f
--- /dev/null
+++ b/tests/test_lp659438.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Regression test for LP: #981896, LP: #659438"""
+# Copyright (C) 2012 Sebastian Heinlein <devel@glatzor.de>
+#
+# Licensed under the GNU General Public License Version 2
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Licensed under the GNU General Public License Version 2
+
+__author__ = "Sebastian Heinlein <devel@glatzor.de>"
+
+import os
+import shutil
+import tempfile
+import unittest
+
+import apt_pkg
+import apt
+
+
+class RegressionTestCase(unittest.TestCase):
+
+ """Test suite for LP: #981896, LP: #659438
+ 'Cannot locate a file for package X'
+ """
+
+ def setUp(self):
+ apt_pkg.init_config()
+ chroot_path = tempfile.mkdtemp()
+ self.addCleanup(lambda: shutil.rmtree(chroot_path))
+ # Create a damaged status file
+ self.cache = apt.cache.Cache(rootdir=chroot_path)
+ with open(apt_pkg.config.find_file("Dir::State::status"),
+ "a") as status:
+ status.write("""Package: abrowser
+Status: install reinstreq half-installed
+Priority: optional
+Section: admin
+Version: 3.6.9+build1+nobinonly-0ubuntu1""")
+ sources_list_path = apt_pkg.config.find_file("Dir::Etc::sourcelist")
+ repo_path = os.path.abspath("./data/test-repo")
+ with open(sources_list_path, "w") as sources_list:
+ sources_list.write("deb copy:%s /\n" % repo_path)
+ # os.makedirs(os.path.join(chroot_path, "etc/apt/sources.list.d/"))
+ self.cache.update(sources_list=sources_list_path)
+ self.cache.open()
+
+ def test_survive_reqreinst(self):
+ """Test that we survive a package in require reinstallation state"""
+ self.assertEqual(self.cache.required_download, 82324L)
+
+if __name__ == "__main__":
+ unittest.main()
+
+# vim: ts=4 et sts=4