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:
parent
50971fbeec
commit
aa00e62fed
41 changed files with 2283 additions and 2243 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue