Skip to content

Commit e839d0c

Browse files
committed
mangle: use pkgcore's sort_keywords
Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
1 parent efc3d5c commit e839d0c

2 files changed

Lines changed: 18 additions & 6 deletions

File tree

‎src/pkgdev/mangle.py‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import traceback
99
from datetime import datetime
1010

11+
from pkgcore.ebuild.misc import sort_keywords
1112
from snakeoil.cli.exceptions import UserException
1213
from snakeoil.mappings import OrderedSet
1314

@@ -71,15 +72,10 @@ def _eof(self, change):
7172
@mangle("keywords")
7273
def _keywords(self, change):
7374
"""Fix keywords order."""
74-
75-
def keywords_sort_key(kw):
76-
return tuple(reversed(kw.lstrip("-~").partition("-")))
77-
7875
lines = change.data.splitlines()
7976
for i, line in enumerate(lines):
8077
if mo := keywords_regex.match(line):
81-
kw = sorted(mo.group("keywords").split(), key=keywords_sort_key)
82-
new_kw = " ".join(kw)
78+
new_kw = " ".join(sort_keywords(mo.group("keywords").split()))
8379
if not mo.group("quote"):
8480
new_kw = f'"{new_kw}"'
8581
lines[i] = f"{mo.group('pre')}{new_kw}{mo.group('post')}"

‎tests/test_mangle.py‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,22 @@ def test_mangled_file(self, tmp_path):
5252
assert list(Mangler([fake_change(path)])) == [str(path)]
5353
assert path.read_text() == "# comment\n"
5454

55+
@pytest.mark.parametrize(
56+
("original", "expected"),
57+
(
58+
# glob-arches first, then arches, then prefix-arches
59+
('KEYWORDS="~x86-macos amd64 -* ~alpha"', '"-* ~alpha amd64 ~x86-macos"'),
60+
# unquoted keywords gain quotes
61+
("KEYWORDS=sparc", '"sparc"'),
62+
("KEYWORDS='sparc ~arm64 alpha'", "'alpha ~arm64 sparc'"),
63+
),
64+
)
65+
def test_keywords_order(self, tmp_path, original, expected):
66+
path = tmp_path / "pkg-1.ebuild"
67+
path.write_text(f"# comment\n{original}\n")
68+
assert list(Mangler([fake_change(path)])) == [str(path)]
69+
assert path.read_text() == f"# comment\nKEYWORDS={expected}\n"
70+
5571
def test_iterator_exceptions(self, tmp_path):
5672
"""Test parallelized iterator against unhandled exceptions."""
5773
path = tmp_path / "file"

0 commit comments

Comments
 (0)