Package: tracker.debian.org Severity: wishlist X-Debbugs-CC: Helmut Grohne <helmutg@debian.org>, Johannes Schauer <josch@debian.org> Tags: patch I've attached a patch to implement adding multiarch hints to tracker.d.o. These multiarch hints are aimed at improving Debian's multiarch support by adding multiarch metadata and fixing file conflicts. The service providing them is run by Helmut Grohne. -- bye, pabs https://wiki.debian.org/PaulWise
From 8aa11b6448ed78ac52a008f827ef6f362d1f217c Mon Sep 17 00:00:00 2001 From: Paul Wise <pabs@debian.org> Date: Sun, 7 Aug 2016 14:46:36 +0800 Subject: [PATCH] Add multiarch hints --- .../debian/templates/debian/multiarch-hints.html | 8 +++ distro_tracker/vendor/debian/tracker_tasks.py | 73 ++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 distro_tracker/vendor/debian/templates/debian/multiarch-hints.html diff --git a/distro_tracker/vendor/debian/templates/debian/multiarch-hints.html b/distro_tracker/vendor/debian/templates/debian/multiarch-hints.html new file mode 100644 index 0000000..6679540 --- /dev/null +++ b/distro_tracker/vendor/debian/templates/debian/multiarch-hints.html @@ -0,0 +1,8 @@ +<div> +There are issues with the <a href="https://wiki.debian.org/MultiArch">multiarch</a> data for this package. +<ul> +{% for desc, link in item.extra_data %} +<li><a href="{{ link }}">{{ desc }}</a></li> +{% endfor %} +</ul> +</div> diff --git a/distro_tracker/vendor/debian/tracker_tasks.py b/distro_tracker/vendor/debian/tracker_tasks.py index c7f053e..e76a517 100644 --- a/distro_tracker/vendor/debian/tracker_tasks.py +++ b/distro_tracker/vendor/debian/tracker_tasks.py @@ -2371,3 +2371,76 @@ class UpdateBuildReproducibilityTask(BaseTask): ActionItem.objects.delete_obsolete_items([self.action_item_type], packages) PackageExtractedInfo.objects.bulk_create(extracted_info) + + +class MultiArchHintsTask(BaseTask): + ACTIONS_WEB = 'https://wiki.debian.org/MultiArch/Hints' + ACTIONS_URL = 'https://dedup.debian.net/static/multiarch-hints.yaml' + ACTION_ITEM_TYPE_NAME = 'debian-multiarch-hints' + ACTION_ITEM_TEMPLATE = 'debian/multiarch-hints.html' + ACTION_ITEM_DESCRIPTION = '<a href="{link}">Multiarch hinter</a> reports {count} issue(s)' + + def __init__(self, force_update=False, *args, **kwargs): + super(MultiArchHintsTask, self).__init__(*args, **kwargs) + self.force_update = force_update + self.action_item_type = ActionItemType.objects.create_or_update( + type_name=self.ACTION_ITEM_TYPE_NAME, + full_description_template=self.ACTION_ITEM_TEMPLATE) + self.SEVERITIES = {} + for value, name in ActionItem.SEVERITIES: + self.SEVERITIES[name] = value + + def set_parameters(self, parameters): + if 'force_update' in parameters: + self.force_update = parameters['force_update'] + + def get_data(self): + return get_resource_content(self.ACTIONS_URL) + + def get_packages(self): + data = self.get_data() + data = yaml.safe_load(data) + format = data['multiarch-hints-1.0'] + data = data['hints'] + packages = {} + for item in data: + if 'source' not in item: + continue + package = item['source'] + if package not in packages: + packages[package] = {} + wishlist = ActionItem.SEVERITY_WISHLIST + severity = self.SEVERITIES.get(item['severity'], wishlist) + packages[package]['severity'] = max(severity, hints[package].get('severity', wishlist)) + if 'hints' not in packages[package]: + packages[package]['hints'] = [] + packages[package]['hints'].append((item['description'], item['link'])) + return packages + + def update_action_item(self, package, severity, description, extra_data): + action_item = package.get_action_item_for_type(self.action_item_type.type_name) + if action_item is None: + action_item = ActionItem( + package=package, + item_type=self.action_item_type) + action_item.severity = severity + action_item.short_description = description + action_item.extra_data = extra_data + action_item.save() + + def execute(self): + packages = self.get_packages() + if packages is None: + return + + with transaction.atomic(): + for name, data in packages.items(): + try: + package = SourcePackageName.objects.get(name=name) + except SourcePackageName.DoesNotExist: + continue + + description = ACTION_ITEM_DESCRIPTION.format(count=len(data['hints']), link=self.ACTIONS_WEB) + self.update_action_item(package, severity, description, data['hints']) + + ActionItem.objects.delete_obsolete_items([self.action_item_type], packages.keys()) -- 2.8.1
Attachment:
signature.asc
Description: This is a digitally signed message part