Skip to content

Commit e560532

Browse files
committed
Add pkgbases export endpoint to developer reports
1 parent 125d129 commit e560532

File tree

5 files changed

+56
-1
lines changed

5 files changed

+56
-1
lines changed

devel/tests/test_reports.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,22 @@ def test_reports_mismatched_signature(self):
5858
def test_reports_signature_time(self):
5959
response = self.client.get('/devel/reports/signature-time', follow=True)
6060
self.assertEqual(response.status_code, 200)
61+
62+
def test_reports_pkgbases(self):
63+
response = self.client.get('/devel/reports/old/pkgbases/packages/')
64+
self.assertEqual(response.status_code, 200)
65+
self.assertEqual(response['Content-Type'], 'text/plain')
66+
67+
def test_reports_pkgbases_with_username(self):
68+
response = self.client.get(
69+
f'/devel/reports/uncompressed-man/{self.user.username}/pkgbases/packages/')
70+
self.assertEqual(response.status_code, 200)
71+
self.assertEqual(response['Content-Type'], 'text/plain')
72+
73+
def test_reports_pkgbases_invalid_report(self):
74+
response = self.client.get('/devel/reports/nonexistent/pkgbases/packages/')
75+
self.assertEqual(response.status_code, 404)
76+
77+
def test_reports_pkgbases_invalid_svn_root(self):
78+
response = self.client.get('/devel/reports/old/pkgbases/nonexistent/')
79+
self.assertEqual(response.status_code, 404)

devel/urls.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
path('stats/', views.stats, name='devel-stats'),
1313
path('newuser/', views.new_user_form),
1414
path('profile/', views.change_profile),
15+
re_path(r'^reports/(?P<report_name>.*)/(?P<username>.*)/pkgbases/(?P<svn_root>[a-z]+)/$',
16+
views.report_pkgbases),
17+
re_path(r'^reports/(?P<report_name>.*)/pkgbases/(?P<svn_root>[a-z]+)/$',
18+
views.report_pkgbases),
1519
re_path(r'^reports/(?P<report_name>.*)/(?P<username>.*)/$', views.report),
1620
re_path(r'^reports/(?P<report_name>.*)/$', views.report),
1721
]

devel/views.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from django.db import transaction
1919
from django.db.models import Count, Max
2020
from django.http import Http404, HttpResponse, HttpResponseRedirect
21-
from django.shortcuts import get_object_or_404, render
21+
from django.shortcuts import get_list_or_404, get_object_or_404, render
2222
from django.utils.encoding import force_str
2323
from django.utils.http import http_date
2424
from django.utils.timezone import now
@@ -265,6 +265,24 @@ def change_profile(request):
265265
'profile_form': profile_form})
266266

267267

268+
@login_required
269+
def report_pkgbases(request, report_name: str, svn_root: str,
270+
username: str | None = None) -> HttpResponse:
271+
report = {report.slug: report for report in available_reports()}.get(report_name, None)
272+
if report is None:
273+
raise Http404
274+
275+
repos = get_list_or_404(Repo, svn_root=svn_root)
276+
packages = Package.objects.normal().filter(repo__in=repos)
277+
if report.slug in ('uncompressed-man', 'uncompressed-info'):
278+
packages = report.packages(packages, username)
279+
else:
280+
packages = report.packages(packages)
281+
282+
pkgbases = sorted({pkg.pkgbase for pkg in packages})
283+
return HttpResponse('\n'.join(pkgbases), content_type='text/plain')
284+
285+
268286
@login_required
269287
def report(request, report_name, username=None):
270288
available = {report.slug: report for report in available_reports()}
@@ -290,6 +308,8 @@ def report(request, report_name, username=None):
290308

291309
arches = {pkg.arch for pkg in packages}
292310
repos = {pkg.repo for pkg in packages}
311+
svn_roots = sorted({repo.svn_root for repo in repos})
312+
293313
context = {
294314
'all_maintainers': maints,
295315
'title': report.description,
@@ -300,6 +320,7 @@ def report(request, report_name, username=None):
300320
'repos': sorted(repos),
301321
'column_names': report.names,
302322
'column_attrs': report.attrs,
323+
'svn_roots': svn_roots
303324
}
304325
return render(request, 'devel/packages.html', context)
305326

sitestatic/archweb.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,6 +1104,10 @@ ul.admin-actions {
11041104
background: #ffd;
11051105
}
11061106

1107+
.devel-pkgbases {
1108+
border-top: 1px dotted #bbb;
1109+
}
1110+
11071111
ul.signoff-list {
11081112
list-style: none;
11091113
margin: 0;

templates/devel/packages.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ <h3>Filter Packages</h3>
3434
</form>
3535
</div>
3636

37+
<div class="devel-pkgbases">
38+
<p>Link to lists of pkgbase values:</p>
39+
<ul>{% for svn_root in svn_roots %}
40+
<li><a href="pkgbases/{{ svn_root }}/">{{ svn_root }}</a></li>
41+
{% endfor %}</ul>
42+
</div>
43+
3744
<table id="dev-report-results" class="results">
3845
<thead>
3946
<tr>

0 commit comments

Comments
 (0)