kernel_versions.version_encode mis-sorts _rcNN suffix in redhat-style kernel names.
Plus 4 other bugs in this function.
Risk: low, affects only presentation order in graphs.
Also added functions is_released_kernel() and is_release_candidate() .
Tested by new unittest for this module, and by visual review of output of perf_graphs.cgi, and by visual review of manual dump of version_encode results for all kernel names now in our main Autotest tko database.
Signed-off-by: Duane Sand <duanes@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@1621 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/client/bin/kernel_versions.py b/client/bin/kernel_versions.py
index 5b87789..3af08fe 100644
--- a/client/bin/kernel_versions.py
+++ b/client/bin/kernel_versions.py
@@ -18,14 +18,25 @@
#
# 02.06.00-rc99 -> 02.06.01-rc01 -> 02.06.01-rc99
#
-encode_sep = re.compile('(\D+)')
+encode_sep = re.compile(r'(\D+)')
+
def version_encode(version):
bits = encode_sep.split(version)
- if len(bits) < 6 or bits[5] != '-rc':
- bits.insert(5, '99')
- bits.insert(5, '-rc')
+ n = 9
+ if len(bits[0]) == 0:
+ n += 2
+ if len(bits) == n or (len(bits) > n and bits[n] != '_rc'):
+ # Insert missing _rc99 after 2 . 6 . 18 -smp- 220 . 0
+ bits.insert(n, '_rc')
+ bits.insert(n+1, '99')
+ n = 5
+ if len(bits[0]) == 0:
+ n += 2
+ if len(bits) <= n or bits[n] != '-rc':
+ bits.insert(n, '-rc')
+ bits.insert(n+1, '99')
for n in range(0, len(bits), 2):
- if len(bits[n]) < 2:
+ if len(bits[n]) == 1:
bits[n] = '0' + bits[n]
return ''.join(bits)
@@ -84,3 +95,21 @@
version = version_limit(version, length)
return None
+
+
+def is_released_kernel(version):
+ # True if version name suggests a released kernel,
+ # not some release candidate or experimental kernel name
+ # e.g. 2.6.18-smp-200.0 includes no other text, underscores, etc
+ version = version.strip('01234567890.-')
+ return version in ['', 'smp', 'smpx', 'pae']
+
+
+def is_release_candidate(version):
+ # True if version names a released kernel or release candidate,
+ # not some experimental name containing arbitrary text
+ # e.g. 2.6.18-smp-220.0_rc3 but not 2.6.18_patched
+ version = re.sub(r'[_-]rc\d+', '', version)
+ return is_released_kernel(version)
+
+