tools/mpp: sort source urls

In both mpp-depsolve and mpp-import-pipeline, sort the packages to
url dictionary before writing the JSON. This makes it easier to
look for packages but more importantly ensures that the resulting
set of packages has the same ordering in the sources section
independently of how it was assembled.
This commit is contained in:
Christian Kellner 2021-06-19 09:31:50 +00:00 committed by Achilleas Koutsou
parent 50971fbeec
commit aa00e62fed
41 changed files with 2283 additions and 2243 deletions

View file

@ -64,6 +64,7 @@ The parameters for this pre-processor, version "2", look like this:
"""
import argparse
import collections
import contextlib
import json
import os
@ -71,6 +72,8 @@ import sys
import tempfile
import urllib.parse
from typing import Dict
import dnf
import hawkey
@ -163,6 +166,21 @@ def _manifest_enter(manifest, key, default):
return manifest[key]
def _sort_urls(urls: Dict):
def get_sort_key(item):
key = item[1]
if isinstance(key, dict):
key = key["url"]
return key
if not urls:
return urls
urls_sorted = sorted(urls.items(), key=get_sort_key)
urls.clear()
urls.update(collections.OrderedDict(urls_sorted))
def _manifest_parse_v1(state, data):
manifest = data
@ -294,6 +312,8 @@ def _main_process(state):
print(f"Unknown manifest version {version}", file=sys.stderr)
return 1
_sort_urls(state.manifest_urls)
json.dump(state.manifest, sys.stdout, indent=2)
sys.stdout.write("\n")
return 0

View file

@ -34,11 +34,14 @@ The parameters for this pre-processor for format version "2" look like this:
"""
import argparse
import collections
import contextlib
import json
import os
import sys
from typing import Dict
class State:
cwd = None # CurrentWorkingDirectory for imports
@ -54,6 +57,21 @@ def _manifest_enter(manifest, key, default):
return manifest[key]
def _sort_urls(urls: Dict):
def get_sort_key(item):
key = item[1]
if isinstance(key, dict):
key = key["url"]
return key
if not urls:
return urls
urls_sorted = sorted(urls.items(), key=get_sort_key)
urls.clear()
urls.update(collections.OrderedDict(urls_sorted))
def _manifest_parse_v1(state, data):
manifest = data
@ -219,6 +237,8 @@ def _main_process(state):
else:
return 1
_sort_urls(state.manifest_urls)
json.dump(state.manifest, sys.stdout, indent=2)
sys.stdout.write("\n")
return 0