Merge lp:~james-page/charm-helpers/get-upstream-version into lp:charm-helpers

Proposed by James Page
Status: Merged
Merged at revision: 631
Proposed branch: lp:~james-page/charm-helpers/get-upstream-version
Merge into: lp:charm-helpers
Diff against target: 112 lines (+40/-19)
4 files modified
charmhelpers/contrib/openstack/utils.py (+8/-18)
charmhelpers/fetch/__init__.py (+1/-0)
charmhelpers/fetch/ubuntu.py (+20/-0)
tests/fetch/test_fetch.py (+11/-1)
To merge this branch: bzr merge lp:~james-page/charm-helpers/get-upstream-version
Reviewer Review Type Date Requested Status
Liam Young (community) Approve
Review via email: mp+306250@code.launchpad.net

Description of the change

Add a helper to grab the upstream version of an installed package.

To post a comment you must log in.
632. By James Page

Refactor openstack.utils to use get_upstream_version

Revision history for this message
Liam Young (gnuoy) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'charmhelpers/contrib/openstack/utils.py'
2--- charmhelpers/contrib/openstack/utils.py 2016-09-16 09:27:02 +0000
3+++ charmhelpers/contrib/openstack/utils.py 2016-09-21 07:37:06 +0000
4@@ -81,7 +81,12 @@
5 service_resume,
6 restart_on_change_helper,
7 )
8-from charmhelpers.fetch import apt_install, apt_cache, install_remote
9+from charmhelpers.fetch import (
10+ apt_install,
11+ apt_cache,
12+ install_remote,
13+ get_upstream_version
14+)
15 from charmhelpers.contrib.storage.linux.utils import is_block_device, zap_disk
16 from charmhelpers.contrib.storage.linux.loopback import ensure_loopback_device
17 from charmhelpers.contrib.openstack.exceptions import OSContextError
18@@ -1894,25 +1899,10 @@
19
20 def os_application_version_set(package):
21 '''Set version of application for Juju 2.0 and later'''
22- import apt_pkg as apt
23- cache = apt_cache()
24- application_version = None
25- application_codename = os_release(package)
26-
27- try:
28- pkg = cache[package]
29- if not pkg.current_ver:
30- juju_log('Package {} is not currently installed.'.format(package),
31- DEBUG)
32- else:
33- application_version = apt.upstream_version(pkg.current_ver.ver_str)
34- except:
35- juju_log('Package {} has no installation candidate.'.format(package),
36- DEBUG)
37-
38+ application_version = get_upstream_version(package)
39 # NOTE(jamespage) if not able to figure out package version, fallback to
40 # openstack codename version detection.
41 if not application_version:
42- application_version_set(application_codename)
43+ application_version_set(os_release(package))
44 else:
45 application_version_set(application_version)
46
47=== modified file 'charmhelpers/fetch/__init__.py'
48--- charmhelpers/fetch/__init__.py 2016-08-11 15:47:44 +0000
49+++ charmhelpers/fetch/__init__.py 2016-09-21 07:37:06 +0000
50@@ -92,6 +92,7 @@
51 apt_mark = fetch.apt_mark
52 apt_hold = fetch.apt_hold
53 apt_unhold = fetch.apt_unhold
54+ get_upstream_version = fetch.get_upstream_version
55 elif __platform__ == "centos":
56 yum_search = fetch.yum_search
57
58
59=== modified file 'charmhelpers/fetch/ubuntu.py'
60--- charmhelpers/fetch/ubuntu.py 2016-09-16 13:27:28 +0000
61+++ charmhelpers/fetch/ubuntu.py 2016-09-21 07:37:06 +0000
62@@ -314,3 +314,23 @@
63
64 else:
65 subprocess.call(cmd, env=env)
66+
67+
68+def get_upstream_version(package):
69+ """Determine upstream version based on installed package
70+
71+ @returns None (if not installed) or the upstream version
72+ """
73+ import apt_pkg
74+ cache = apt_cache()
75+ try:
76+ pkg = cache[package]
77+ except:
78+ # the package is unknown to the current apt cache.
79+ return None
80+
81+ if not pkg.current_ver:
82+ # package is known, but no version is currently installed.
83+ return None
84+
85+ return apt_pkg.upstream_version(pkg.current_ver.ver_str)
86
87=== modified file 'tests/fetch/test_fetch.py'
88--- tests/fetch/test_fetch.py 2016-09-16 13:32:52 +0000
89+++ tests/fetch/test_fetch.py 2016-09-21 07:37:06 +0000
90@@ -40,7 +40,7 @@
91 raise KeyError
92 pkg.name = package
93 if 'current_ver' in FAKE_APT_CACHE[package]:
94- pkg.current_ver = FAKE_APT_CACHE[package]['current_ver']
95+ pkg.current_ver.ver_str = FAKE_APT_CACHE[package]['current_ver']
96 else:
97 pkg.current_ver = None
98 return pkg
99@@ -1269,3 +1269,13 @@
100 from charmhelpers.fetch.centos import _run_yum_command
101 _run_yum_command(["some", "command"], fatal=True)
102 self.assertTrue(sleep.called)
103+
104+ @patch.object(osplatform, 'get_platform')
105+ @patch('apt_pkg.Cache')
106+ def test_get_upstream_version(self, cache, platform):
107+ platform.return_value = 'ubuntu'
108+ imp.reload(fetch)
109+ cache.side_effect = fake_apt_cache
110+ self.assertEqual(fetch.get_upstream_version('vim'), '7.3.547')
111+ self.assertEqual(fetch.get_upstream_version('emacs'), None)
112+ self.assertEqual(fetch.get_upstream_version('unknown'), None)

Subscribers

People subscribed via source and target branches