1 |
Author: ulm |
2 |
Date: 2009-06-06 08:37:06 +0000 (Sat, 06 Jun 2009) |
3 |
New Revision: 579 |
4 |
|
5 |
Modified: |
6 |
trunk/ChangeLog |
7 |
trunk/NEWS |
8 |
trunk/modules/kernel.eselect |
9 |
Log: |
10 |
Sort kernel versions properly, bug 207889. |
11 |
|
12 |
Modified: trunk/ChangeLog |
13 |
=================================================================== |
14 |
--- trunk/ChangeLog 2009-06-05 19:07:36 UTC (rev 578) |
15 |
+++ trunk/ChangeLog 2009-06-06 08:37:06 UTC (rev 579) |
16 |
@@ -1,3 +1,8 @@ |
17 |
+2009-06-06 Ulrich Mueller <ulm@g.o> |
18 |
+ |
19 |
+ * modules/kernel.eselect (sort_kernel_versions): New function. |
20 |
+ (find_targets): Sort kernel versions properly. Fixes bug 207889. |
21 |
+ |
22 |
2009-06-05 Ulrich Mueller <ulm@g.o> |
23 |
|
24 |
* modules/rc.eselect (is_script): Symlinks are implicitly |
25 |
|
26 |
Modified: trunk/NEWS |
27 |
=================================================================== |
28 |
--- trunk/NEWS 2009-06-05 19:07:36 UTC (rev 578) |
29 |
+++ trunk/NEWS 2009-06-06 08:37:06 UTC (rev 579) |
30 |
@@ -2,6 +2,9 @@ |
31 |
ChangeLog file for a more detailed listing of changes/bug fixes. |
32 |
|
33 |
trunk: |
34 |
+ Bug fixes: |
35 |
+ - Fixed bug #207889: The kernel module now sorts versions properly. |
36 |
+ |
37 |
New features: |
38 |
- Add a test if the selected package manager is valid. |
39 |
- Extended syntax in editor-variable library. |
40 |
|
41 |
Modified: trunk/modules/kernel.eselect |
42 |
=================================================================== |
43 |
--- trunk/modules/kernel.eselect 2009-06-05 19:07:36 UTC (rev 578) |
44 |
+++ trunk/modules/kernel.eselect 2009-06-06 08:37:06 UTC (rev 579) |
45 |
@@ -7,12 +7,32 @@ |
46 |
SVN_DATE='$Date$' |
47 |
VERSION=$(svn_date_to_version "${SVN_DATE}") |
48 |
|
49 |
+# sort function for kernel versions, to be used in a pipe |
50 |
+sort_kernel_versions() { |
51 |
+ local vsort="sort --version-sort" |
52 |
+ # Test if our sort supports the --version-sort option |
53 |
+ # (it should since the kernel module is Linux specific) |
54 |
+ ${vsort} </dev/null &>/dev/null || vsort=sort |
55 |
+ |
56 |
+ # We sort kernel versions as follows: |
57 |
+ # 1. Run sed to prepend the version string by the numeric version |
58 |
+ # and an additional rank indicator that is 0 for release candidates |
59 |
+ # or 1 otherwise. After this step we have, for example: |
60 |
+ # 2.6.29 1 linux-2.6.29 |
61 |
+ # 2.6.29 0 linux-2.6.29-rc8 |
62 |
+ # 2. sort --version-sort |
63 |
+ # 3. Run sed again to remove the prepended keys from step 1. |
64 |
+ sed -e 's/^\(linux-\)\?\([[:digit:].]\+\)[-_]rc/\2 0 &/' \ |
65 |
+ -e 't;s/^\(linux-\)\?\([[:digit:].]\+\)/\2 1 &/' \ |
66 |
+ | ${vsort} | sed 's/.* //' |
67 |
+} |
68 |
+ |
69 |
# find a list of kernel symlink targets |
70 |
find_targets() { |
71 |
local f |
72 |
for f in "${ROOT}"/usr/src/linux-[[:digit:]]* ; do |
73 |
[[ -d ${f} ]] && basename "${f}" |
74 |
- done |
75 |
+ done | sort_kernel_versions |
76 |
} |
77 |
|
78 |
# try to remove the kernel symlink |