Merge lp:~pitti/aptdaemon/pkcompat-enhancements into lp:aptdaemon

Proposed by Martin Pitt
Status: Merged
Merged at revision: 823
Proposed branch: lp:~pitti/aptdaemon/pkcompat-enhancements
Merge into: lp:aptdaemon
Diff against target: 218 lines (+102/-15)
3 files modified
README.PackageKit (+2/-2)
aptdaemon/pkcompat.py (+27/-9)
tests/test_pk.py (+73/-4)
To merge this branch: bzr merge lp:~pitti/aptdaemon/pkcompat-enhancements
Reviewer Review Type Date Requested Status
Michael Vogt Approve
Review via email: mp+108156@code.launchpad.net

Description of the change

Implement RepoEnable() for enable==True.

It does not yet implement removing a repository (enable==False), as that is
more tricky to do.

To post a comment you must log in.
Revision history for this message
Michael Vogt (mvo) wrote :

Looks good to me, thanks pitti.

review: Approve
Revision history for this message
Martin Pitt (pitti) wrote :

Pushed to trunk, thanks!

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'README.PackageKit'
--- README.PackageKit 2012-05-31 09:36:38 +0000
+++ README.PackageKit 2012-05-31 13:11:18 +0000
@@ -51,14 +51,14 @@
51 - GetDistroUpgrades51 - GetDistroUpgrades
52 - UpgradeSystem52 - UpgradeSystem
53 - WhatProvides (no builtin handling, only plugins)53 - WhatProvides (no builtin handling, only plugins)
54 - RepoEnable: (only enabling, not disabling)
5455
55Not yet supported roles:56Not yet supported roles:
5657
57 - GetCategories: Curently groups are still used, would be nice to reuse the58 - GetCategories: Curently groups are still used, would be nice to reuse the
58 categories from software-center59 categories from software-center
59 - GetRepoList: not implemented in the worker60 - GetRepoList: not implemented in the worker
60 - RepoEnable: not implemented in the worker)61 - RepoSetData: not implemented in the worker
61 - RepoSetData: not implemented in the worker)
62 - InstallFiles: not implemented in the worker62 - InstallFiles: not implemented in the worker
63 - SimulateInstallFiles: not implemented in the worker63 - SimulateInstallFiles: not implemented in the worker
64 sessioninstaller.64 sessioninstaller.
6565
=== modified file 'aptdaemon/pkcompat.py'
--- aptdaemon/pkcompat.py 2012-05-13 02:22:25 +0000
+++ aptdaemon/pkcompat.py 2012-05-31 13:11:18 +0000
@@ -262,6 +262,7 @@
262 pk_enums.ROLE_SEARCH_GROUP,262 pk_enums.ROLE_SEARCH_GROUP,
263 pk_enums.ROLE_SEARCH_FILE,263 pk_enums.ROLE_SEARCH_FILE,
264 pk_enums.ROLE_WHAT_PROVIDES,264 pk_enums.ROLE_WHAT_PROVIDES,
265 pk_enums.ROLE_REPO_ENABLE,
265 pk_enums.ROLE_DOWNLOAD_PACKAGES]266 pk_enums.ROLE_DOWNLOAD_PACKAGES]
266 if META_RELEASE_SUPPORT:267 if META_RELEASE_SUPPORT:
267 SUPPORTED_ROLES.append(pk_enums.ROLE_GET_DISTRO_UPGRADES)268 SUPPORTED_ROLES.append(pk_enums.ROLE_GET_DISTRO_UPGRADES)
@@ -1776,18 +1777,21 @@
1776 self.role = pk_enums.ROLE_REPO_SET_DATA1777 self.role = pk_enums.ROLE_REPO_SET_DATA
1777 GObject.idle_add(self._fail_not_implemented)1778 GObject.idle_add(self._fail_not_implemented)
17781779
1779 @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,1780 @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
1780 in_signature="sb", out_signature="",1781 in_signature="sb", out_signature="",
1781 sender_keyword="sender")1782 sender_keyword="sender")
1782 def RepoEnable(self, repo_id, enabled, sender):1783 def RepoEnable(self, repo_id, enabled, sender):
1783 """This method enables the repository specified.1784 """This method enables the repository specified.
17841785
1785 :param repo_id:1786 :param repo_id:
1786 A repository identifier, e.g. fedora-development-debuginfo1787 A repository identifier, e.g. fedora-development-debuginfo or an
1788 apt source ("deb http://... unstable main")
1787 :param enabled: true if enabled, false if disabled.1789 :param enabled: true if enabled, false if disabled.
1788 """1790 """
1789 self.role = pk_enums.ROLE_REPO_ENABLE1791 self.role = pk_enums.ROLE_REPO_ENABLE
1790 GObject.idle_add(self._fail_not_implemented)1792 kwargs = {"repo_id": repo_id,
1793 "enabled": enabled}
1794 return self._run_query(kwargs, sender)
17911795
1792 @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,1796 @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
1793 in_signature="s", out_signature="",1797 in_signature="s", out_signature="",
@@ -1981,6 +1985,8 @@
1981 self.download_packages(trans, **trans.kwargs)1985 self.download_packages(trans, **trans.kwargs)
1982 elif trans.pktrans.role == pk_enums.ROLE_WHAT_PROVIDES:1986 elif trans.pktrans.role == pk_enums.ROLE_WHAT_PROVIDES:
1983 self.what_provides(trans, **trans.kwargs)1987 self.what_provides(trans, **trans.kwargs)
1988 elif trans.pktrans.role == pk_enums.ROLE_REPO_ENABLE:
1989 self.repo_enable(trans, **trans.kwargs)
1984 else:1990 else:
1985 raise TransactionFailed(aptd_enums.ERROR_UNKNOWN,1991 raise TransactionFailed(aptd_enums.ERROR_UNKNOWN,
1986 "Role %s isn't supported",1992 "Role %s isn't supported",
@@ -2556,10 +2562,7 @@
2556 trans.emit_files(id, files)2562 trans.emit_files(id, files)
25572563
2558 def what_provides(self, trans, filters, type, values):2564 def what_provides(self, trans, filters, type, values):
2559 """Emit all dependencies of the given package ids.2565 """Emit all packages which provide the given type and search value."""
2560
2561 Doesn't support recursive dependency resolution.
2562 """
2563 self._init_plugins()2566 self._init_plugins()
25642567
2565 supported_type = False2568 supported_type = False
@@ -2580,6 +2583,21 @@
2580 raise TransactionFailed(aptd_enums.ERROR_NOT_SUPPORTED,2583 raise TransactionFailed(aptd_enums.ERROR_NOT_SUPPORTED,
2581 "Query type '%s' is not supported" % type)2584 "Query type '%s' is not supported" % type)
25822585
2586 def repo_enable(self, trans, repo_id, enabled):
2587 """Enable or disable a repository."""
2588
2589 if not enabled:
2590 raise TransactionFailed(aptd_enums.ERROR_NOT_SUPPORTED,
2591 "Disabling repositories is not implemented")
2592
2593 fields = repo_id.split()
2594 if len(fields) < 3 or fields[0] not in ('deb', 'deb-src'):
2595 raise TransactionFailed(aptd_enums.ERROR_NOT_SUPPORTED,
2596 "Unknown repository ID format: %s" % repo_id)
2597
2598 self.add_repository(trans, fields[0], fields[1], fields[2],
2599 fields[3:], '', None)
2600
25832601
2584 # Helpers2602 # Helpers
25852603
25862604
=== modified file 'tests/test_pk.py'
--- tests/test_pk.py 2012-05-12 16:04:00 +0000
+++ tests/test_pk.py 2012-05-31 13:11:18 +0000
@@ -57,7 +57,6 @@
5757
58 def test_install(self):58 def test_install(self):
59 """Test installing a package."""59 """Test installing a package."""
60 self.chroot.add_test_repository()
61 pkg_name = "silly-depend-base"60 pkg_name = "silly-depend-base"
6261
63 client = pk.Client()62 client = pk.Client()
@@ -93,7 +92,6 @@
9392
94 def test_download(self):93 def test_download(self):
95 """Test downloading packages."""94 """Test downloading packages."""
96 self.chroot.add_test_repository()
97 pkg_filename = "silly-base_0.1-0update1_all.deb"95 pkg_filename = "silly-base_0.1-0update1_all.deb"
98 pkg_id = "silly-base;0.1-0update1;all;"96 pkg_id = "silly-base;0.1-0update1;all;"
99 temp_dir = tempfile.mkdtemp(prefix="aptd-download-test-")97 temp_dir = tempfile.mkdtemp(prefix="aptd-download-test-")
@@ -109,7 +107,6 @@
109107
110 def test_get_updates(self):108 def test_get_updates(self):
111 """Test getting updates."""109 """Test getting updates."""
112 self.chroot.add_test_repository()
113 pkg = "silly-base_0.1-0_all.deb"110 pkg = "silly-base_0.1-0_all.deb"
114 self.chroot.install_debfile(os.path.join(REPO_PATH, pkg), True)111 self.chroot.install_debfile(os.path.join(REPO_PATH, pkg), True)
115112
@@ -129,7 +126,6 @@
129126
130 def test_get_updates_security(self):127 def test_get_updates_security(self):
131 """Test if security updates are detected correctly."""128 """Test if security updates are detected correctly."""
132 self.chroot.add_test_repository()
133 self.chroot.add_repository(os.path.join(aptdaemon.test.get_tests_dir(),129 self.chroot.add_repository(os.path.join(aptdaemon.test.get_tests_dir(),
134 "repo/security"))130 "repo/security"))
135 pkg = "silly-base_0.1-0_all.deb"131 pkg = "silly-base_0.1-0_all.deb"
@@ -318,6 +314,79 @@
318 self.assertTrue("plasma" in str(e), e)314 self.assertTrue("plasma" in str(e), e)
319 self.assertTrue("not supported" in str(e), e)315 self.assertTrue("not supported" in str(e), e)
320316
317 def test_repo_enable(self):
318 """Test adding a repository."""
319 client = pk.Client()
320
321 # create test update repo
322 repo = tempfile.mkdtemp()
323 self.addCleanup(shutil.rmtree, repo)
324 with open(os.path.join(repo, 'Packages'), 'w') as f:
325 f.write('''Package: silly-new
326Priority: extra
327Section: admin
328Installed-Size: 44
329Maintainer: Sebastian Heinlein <devel@glatzor.de>
330Architecture: all
331Source: silly-new (0.1-0)
332Version: 1.2.3
333Filename: %s/silly-base_0.1-0update1_all.deb
334Size: 1934
335MD5sum: 8e20af56a63a1e0cf40db3b0d07e7989
336SHA1: 7ce87423d9c7a734478c464021994944d07fbf1b
337SHA256: d3693c0e3e7a9519b2833fdf1301c7e03e0620edf15b95b4c7329d9eb0bee553
338Description: new package from a third-party repo
339''' % self.chroot.path)
340
341 # without the new repo, we do not have it yet
342 self.assertRaises(GLib.GError, client.resolve, pk.FilterEnum.NONE,
343 ['silly-new'], None, lambda p, t, d: True, None)
344
345 # now add the new repo
346 apt_source = 'deb file://%s /' % repo
347 res = client.repo_enable(apt_source, True, None,
348 lambda p, t, d: True, None)
349 self.assertEqual(res.get_exit_code(), pk.ExitEnum.SUCCESS)
350
351 with open(os.path.join(self.chroot.path, 'etc', 'apt', 'sources.list')) as f:
352 for line in f:
353 if line.strip() == apt_source:
354 break
355 else:
356 self.fail('did not find newly added repository in sources.list')
357
358 # should not actually download the indexes yet
359 self.assertRaises(GLib.GError, client.resolve, pk.FilterEnum.NONE,
360 ['silly-new'], None, lambda p, t, d: True, None)
361
362 res = client.refresh_cache(False, None, lambda p, t, d: True, None)
363 self.assertEqual(res.get_exit_code(), pk.ExitEnum.SUCCESS)
364
365 # we should now see the new package
366 res = client.resolve(pk.FilterEnum.NONE, ['silly-new'], None,
367 lambda p, t, d: True, None)
368 self.assertEqual(res.get_exit_code(), pk.ExitEnum.SUCCESS)
369 packages = res.get_package_array()
370 self.assertEqual(len(packages), 1)
371 self.assertEqual(packages[0].get_name(), "silly-new")
372 self.assertEqual(packages[0].get_version(), "1.2.3")
373 self.assertEqual(packages[0].get_info(), pk.info_enum_from_string("available"))
374
375 def test_repo_enable_errors(self):
376 """Test errors when adding a repository."""
377 client = pk.Client()
378
379 try:
380 client.repo_enable('bogus', True, None, lambda p, t, d: True, None)
381 except GLib.GError as e:
382 self.assertTrue('format' in str(e))
383 self.assertTrue('bogus' in str(e))
384
385 try:
386 client.repo_enable('deb http://example.com', True, None, lambda p, t, d: True, None)
387 except GLib.GError as e:
388 self.assertTrue('format' in str(e), e)
389 self.assertTrue('http://example.com' in str(e), e)
321390
322@unittest.skipIf(sys.version_info.major < 3, "Python3 only")391@unittest.skipIf(sys.version_info.major < 3, "Python3 only")
323def setUp():392def setUp():

Subscribers

People subscribed via source and target branches

to status/vote changes: