|
57 | 57 | from easybuild.tools.config import build_option |
58 | 58 | from easybuild.tools.filetools import read_file |
59 | 59 | from easybuild.tools.modules import modules_tool |
60 | | -from easybuild.tools.py2vs3 import OrderedDict, ascii_lowercase |
| 60 | +from easybuild.tools.py2vs3 import OrderedDict, ascii_lowercase, sort_looseversions |
61 | 61 | from easybuild.tools.toolchain.toolchain import DUMMY_TOOLCHAIN_NAME, SYSTEM_TOOLCHAIN_NAME, is_system_toolchain |
62 | 62 | from easybuild.tools.toolchain.utilities import search_toolchain |
63 | 63 | from easybuild.tools.utilities import INDENT_2SPACES, INDENT_4SPACES |
@@ -635,14 +635,22 @@ def key_to_ref(name): |
635 | 635 | table_titles = ['version', 'toolchain'] |
636 | 636 | table_values = [[], []] |
637 | 637 |
|
| 638 | + # first determine unique pairs of version/versionsuffix |
| 639 | + # we can't use LooseVersion yet here, since nub uses set and LooseVersion instances are not hashable |
638 | 640 | pairs = nub((x['version'], x['versionsuffix']) for x in software[key]) |
639 | 641 |
|
| 642 | + # check whether any non-empty versionsuffixes are in play |
640 | 643 | with_vsuff = any(vs for (_, vs) in pairs) |
641 | 644 | if with_vsuff: |
642 | 645 | table_titles.insert(1, 'versionsuffix') |
643 | 646 | table_values.insert(1, []) |
644 | 647 |
|
645 | | - for ver, vsuff in sorted((LooseVersion(v), vs) for (v, vs) in pairs): |
| 648 | + # sort pairs by version (and then by versionsuffix); |
| 649 | + # we sort by LooseVersion to obtain chronological version ordering, |
| 650 | + # but we also need to retain original string version for filtering-by-version done below |
| 651 | + sorted_pairs = sort_looseversions((LooseVersion(v), vs, v) for v, vs in pairs) |
| 652 | + |
| 653 | + for _, vsuff, ver in sorted_pairs: |
646 | 654 | table_values[0].append('``%s``' % ver) |
647 | 655 | if with_vsuff: |
648 | 656 | if vsuff: |
@@ -690,8 +698,17 @@ def list_software_txt(software, detailed=False): |
690 | 698 | "homepage: %s" % software[key][-1]['homepage'], |
691 | 699 | '', |
692 | 700 | ]) |
| 701 | + |
| 702 | + # first determine unique pairs of version/versionsuffix |
| 703 | + # we can't use LooseVersion yet here, since nub uses set and LooseVersion instances are not hashable |
693 | 704 | pairs = nub((x['version'], x['versionsuffix']) for x in software[key]) |
694 | | - for ver, vsuff in sorted((LooseVersion(v), vs) for (v, vs) in pairs): |
| 705 | + |
| 706 | + # sort pairs by version (and then by versionsuffix); |
| 707 | + # we sort by LooseVersion to obtain chronological version ordering, |
| 708 | + # but we also need to retain original string version for filtering-by-version done below |
| 709 | + sorted_pairs = sort_looseversions((LooseVersion(v), vs, v) for v, vs in pairs) |
| 710 | + |
| 711 | + for _, vsuff, ver in sorted_pairs: |
695 | 712 | tcs = [x['toolchain'] for x in software[key] if x['version'] == ver and x['versionsuffix'] == vsuff] |
696 | 713 |
|
697 | 714 | line = " * %s v%s" % (key, ver) |
|
0 commit comments