diff --git a/debexpo/controllers/sponsor.py b/debexpo/controllers/sponsor.py index 2027018d1b98611237be649ef8a42fa7a264fd4d..88fff629f3ce78bb3f0d772baf0d92e814be2ef1 100644 --- a/debexpo/controllers/sponsor.py +++ b/debexpo/controllers/sponsor.py @@ -103,7 +103,48 @@ class SponsorController(BaseController): return False return True + def _get_package_description(self, package_version): + control = meta.session.query(PackageInfo) \ + .filter_by(package_version_id=package_version.id) \ + .filter_by(from_plugin='controlfields') \ + .first() + + if control: + info = json.loads(control.data) + + if info: + return info.get('Short-Description') + def _get_package_rfs_info(self, package_version): + info = None + + rfstemplate = meta.session.query(PackageInfo) \ + .filter_by(package_version_id=package_version.id) \ + .filter_by(from_plugin='rfstemplate') \ + .first() + + if rfstemplate: + info = json.loads(rfstemplate.data) + + control_fields = meta.session.query(PackageInfo) \ + .filter_by(package_version_id=package_version.id) \ + .filter_by(from_plugin='controlfields') \ + .first() + + if rfstemplate and control_fields: + fields = json.loads(control_fields.data) + + if 'Homepage' in fields: + info['upstream-url'] = \ + fields['Homepage'] + + if 'Vcs-Browser' in fields: + info['package-vcs'] = \ + fields['Vcs-Browser'] + + return info + + def _get_package_extra_info(self, package_version): category = [] categories = None severity = None @@ -261,11 +302,13 @@ class SponsorController(BaseController): c.rfstemplate = None c.category = None c.severity = None + c.description = None if packagename: package = meta.session.query(Package) \ .filter_by(name=packagename) \ .first() + if package: c.package = package c.package_dir = get_package_dir(package.name) @@ -274,32 +317,12 @@ class SponsorController(BaseController): .filter_by(package_id=package.id) \ .order_by(PackageVersion.id.desc()) \ .first() - if latest: - rfstemplate = meta.session.query(PackageInfo) \ - .filter_by(package_version_id=latest.id) \ - .filter_by(from_plugin='rfstemplate') \ - .first() - if rfstemplate: - c.rfstemplate = json.loads(rfstemplate.data) - - control_fields = meta.session.query(PackageInfo) \ - .filter_by(package_version_id=latest.id) \ - .filter_by(from_plugin='controlfields') \ - .first() - - if rfstemplate and control_fields: - fields = json.loads(control_fields.data) - - if 'Homepage' in fields: - c.rfstemplate['upstream-url'] = \ - fields['Homepage'] - - if 'Vcs-Browser' in fields: - c.rfstemplate['package-vcs'] = \ - fields['Vcs-Browser'] - - (c.category, c.severity) = self._get_package_rfs_info(latest) + if latest: + c.rfstemplate = self._get_package_rfs_info(latest) + (c.category, c.severity) = \ + self._get_package_extra_info(latest) + c.description = self._get_package_description(latest) # This is a workaround for Thunderbird and some other clients # not handling properly '+' in the mailto body parameter. diff --git a/debexpo/plugins/controlfields.py b/debexpo/plugins/controlfields.py index f4498de556e9b5421d33d6f172a6cb60be83c396..86dd8f9d5b334d8a398db576fde26fccb4ecd868 100644 --- a/debexpo/plugins/controlfields.py +++ b/debexpo/plugins/controlfields.py @@ -90,13 +90,18 @@ class ControlFieldsPlugin(BasePlugin): descriptions = [] for package in deb822.Dsc.iter_paragraphs( file(join('extracted', 'debian', 'control'))): - if ('Description' in package and 'Package' in package and - package['Package'] and package['Description']): + if all(package.get(i) for i in ('Package', 'Description')): + if package['Package'] == control.get('Source'): + data['Short-Description'] = \ + package['Description'].split('\n')[0] descriptions.append('{} - {}'.format(package['Package'], package['Description'].split('\n')[0])) data['Description'] = '\n'.join(descriptions) + if 'Short-Description' not in data and descriptions: + data['Short-Description'] = descriptions[0].split(' - ')[1] + self.failed(outcome, data, severity) diff --git a/debexpo/plugins/rfstemplate.py b/debexpo/plugins/rfstemplate.py index 55f7640934a345a7ee6493e3f8cf8137b33aa5fa..c559d637efe52250470de79d0674d2177018140d 100644 --- a/debexpo/plugins/rfstemplate.py +++ b/debexpo/plugins/rfstemplate.py @@ -91,6 +91,9 @@ class RfsTemplatePlugin(BasePlugin): upstream_license = "[fill in]" package_changelog = "[your most recent changelog entry]" + outcome = "RFS: license, author and changelog parsed" + severity = constants.PLUGIN_SEVERITY_INFO + package_changelog = self.changes.get('Changes', '').strip() if len(package_changelog.split('\n')) > 2: @@ -100,8 +103,15 @@ class RfsTemplatePlugin(BasePlugin): if 'author' in copyright_info: upstream_author = copyright_info['author'] + else: + outcome = "RFS: author info missing" + severity = constants.PLUGIN_SEVERITY_WARNING + if 'license' in copyright_info: upstream_license = copyright_info['license'] + else: + outcome = "RFS: no dep5 license" + severity = constants.PLUGIN_SEVERITY_ERROR data = { 'upstream-author': upstream_author, @@ -109,8 +119,6 @@ class RfsTemplatePlugin(BasePlugin): 'package-changelog': package_changelog, } - outcome = "RFS template information" - severity = constants.PLUGIN_SEVERITY_INFO self.passed(outcome, data, severity) diff --git a/debexpo/templates/plugins/rfstemplate/html.mako b/debexpo/templates/plugins/rfstemplate/html.mako new file mode 100644 index 0000000000000000000000000000000000000000..5402f1ce8acfa2d8507721d869bd4663164cef45 --- /dev/null +++ b/debexpo/templates/plugins/rfstemplate/html.mako @@ -0,0 +1,21 @@ +
+${str(o.outcome)} +
+%if o.rich_data: +%if o.severity != 3: +
+%if o.severity == 2: +Upstream-Contact: was not found in d/copyright.
+RFS will not autocomplete the Upstream author. +%else: +
Author
+
${o.rich_data['upstream-author']}
+%endif +
License
+
${o.rich_data['upstream-license']}
+
Changelog
+
${o.rich_data['package-changelog']}
+ +
+%endif +%endif diff --git a/debexpo/templates/plugins/rfstemplate/text.mako b/debexpo/templates/plugins/rfstemplate/text.mako new file mode 100644 index 0000000000000000000000000000000000000000..d7edd145b5baec6b00a2968706af2dd7e1c30f83 --- /dev/null +++ b/debexpo/templates/plugins/rfstemplate/text.mako @@ -0,0 +1,3 @@ +%for field, contents in sorted(o.rich_data.items()): +${field}: ${contents} +%endfor diff --git a/debexpo/templates/sponsor/rfs_howto.mako b/debexpo/templates/sponsor/rfs_howto.mako index e5e842b58ac54d023958e7e30b42fe525bacbf48..a6c840c2bddd7c31ca2dd095a986347bf38fd62a 100644 --- a/debexpo/templates/sponsor/rfs_howto.mako +++ b/debexpo/templates/sponsor/rfs_howto.mako @@ -40,9 +40,9 @@ list. You can browser other packages and give other people feedback while you ar

%if c.package: %if c.category: - + %else: - + %endif %else: @@ -63,9 +63,9 @@ From: J. Maintainer <j@example.com> To: submit@bugs.debian.org %if c.package: %if c.category: -Subject: RFS: ${ c.package.name }/${ c.package.package_versions[-1].version } ${ c.category } -- ${ c.package.short_description() } +Subject: RFS: ${ c.package.name }/${ c.package.package_versions[-1].version } ${ c.category } -- ${ c.description } %else: -Subject: RFS: ${ c.package.name }/${ c.package.package_versions[-1].version } -- ${ c.package.short_description() } +Subject: RFS: ${ c.package.name }/${ c.package.package_versions[-1].version } -- ${ c.description } %endif %else: Subject: RFS: hello/3.1-4 [put in ITP, ITA, RC, NMU if applicable] -- friendly greeter diff --git a/debexpo/templates/sponsor/rfs_template.mako b/debexpo/templates/sponsor/rfs_template.mako index 45fdbf539afebc31f895de9aa2b2b993fb3c8266..3b355cb78121c833e371509a4e1b9628112598d9 100644 --- a/debexpo/templates/sponsor/rfs_template.mako +++ b/debexpo/templates/sponsor/rfs_template.mako @@ -38,6 +38,7 @@ I am looking for a sponsor for my package "hello": Upstream Author : [fill in name and email of upstream] * URL : [fill in URL of upstream's web site] * License : [fill in] + * Vcs : [fill in URL of packaging vcs] %endif %if c.package: Section : ${ c.package.package_versions[-1].section } @@ -47,8 +48,8 @@ I am looking for a sponsor for my package "hello": It builds those binary packages: -%if c.package: - ${ c.package.description } +%if c.package and c.package.description: + ${ '\n '.join(c.package.description.splitlines()) } %else: hello - friendly greeter %endif