From 7fc8ff577c241df21ff6e2eb7f437af8c95255ae Mon Sep 17 00:00:00 2001 From: Tim Clephas Date: Tue, 4 Aug 2026 10:13:30 +0200 Subject: [PATCH] Sorting: Group build_number overrides at the bottom --- vinca/sort_yaml_keys.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/vinca/sort_yaml_keys.py b/vinca/sort_yaml_keys.py index c1be6ac..c97192a 100644 --- a/vinca/sort_yaml_keys.py +++ b/vinca/sort_yaml_keys.py @@ -16,6 +16,16 @@ from ruamel.yaml.comments import CommentedMap +def _contains_build_number(value: object) -> bool: + return isinstance(value, dict) and "build_number" in value + + +def _sort_key(key: object, data: CommentedMap) -> tuple[int, str]: + # Keep regular entries first, and group build_number overrides at the bottom. + has_build_number = _contains_build_number(data[key]) + return (1 if has_build_number else 0, str(key).casefold()) + + def sort_mapping_keys(path: Path) -> bool: """Sort top-level keys of a YAML mapping file in place. Returns True if changed.""" yaml = YAML() @@ -27,7 +37,7 @@ def sort_mapping_keys(path: Path) -> bool: if not hasattr(data, "keys"): return False - sorted_keys = sorted(data.keys(), key=str.casefold) + sorted_keys = sorted(data.keys(), key=lambda key: _sort_key(key, data)) if list(data.keys()) == sorted_keys: return False