Skip to content

Commit d6d99f5

Browse files
committed
Handle release notes for releases without release notes
If a release is made without release notes (could happen when a release is withdrawn before made public), we would list it under release notes and then generate a 404 when trying to view it. For now, 18.5 is the only such release, bur make the code generic to cover potential future cases. So for now, we put the list of versions hardcoded in the views.py file. If this happens repeatedly, we'll probalby want to move it to a better place.
1 parent 54ffe35 commit d6d99f5

1 file changed

Lines changed: 14 additions & 1 deletion

File tree

pgweb/docs/views.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from django.conf import settings
88

99
from decimal import Decimal, ROUND_DOWN
10+
import itertools
1011
import os
1112
import re
1213

@@ -293,14 +294,19 @@ def manualarchive(request):
293294
]
294295
release_notes_only_versions = [{'major': major, 'minor': minor} for major, minor in _release_notes_only_versions]
295296

297+
no_release_notes_versions = [
298+
{"major": 18, "minor": 5},
299+
]
300+
no_release_notes_per_major = dict((k, list(m['minor'] for m in v)) for k, v in itertools.groupby(no_release_notes_versions, key=lambda x: x['major']))
301+
296302

297303
def release_notes_list(request):
298304
"""Lists the available release notes"""
299305
# We only keep 6.3 and newer in core_version (for legacy reasons)
300306
releases = exec_to_dict("SELECT tree AS major, minor FROM core_version INNER JOIN generate_series(0, latestminor) g(minor) ON true WHERE testing=0 AND tree > 6.2 ORDER BY tree DESC, minor DESC")
301307

302308
r = render_pgweb(request, 'docs', 'docs/release_notes_list.html', {
303-
'releases': releases + release_notes_only_versions,
309+
'releases': [v for v in releases + release_notes_only_versions if v not in no_release_notes_versions],
304310
})
305311
r['xkey'] = 'pgdocs_all'
306312
return r
@@ -328,6 +334,10 @@ def release_notes(request, version):
328334
minor_version = Decimal(version_pieces[1])
329335
if int(version_pieces[0]) >= 10 or int(version_pieces[0]) <= 1:
330336
if major_version > 1:
337+
if {"major": major_version, "minor": minor_version} in no_release_notes_versions:
338+
# Redirect to the following version if this one has no release notes. In the very unlikely event we have more than one
339+
# such version, we'll just redirect more than once.
340+
return HttpResponseRedirect("/docs/release/{}.{}/".format(major_version, minor_version + 1))
331341
if minor_version == 0:
332342
version_file = 'release-{}.html'.format(major_version)
333343
else:
@@ -366,6 +376,9 @@ def release_notes(request, version):
366376
available_minor_versions = exec_to_dict("SELECT minor FROM generate_series(0, (SELECT latestminor FROM core_version WHERE tree=%(major_version)s)) g(minor) ORDER BY minor DESC", {
367377
'major_version': major_version,
368378
})
379+
if major_version in no_release_notes_per_major:
380+
available_minor_versions = [v for v in available_minor_versions if v['minor'] not in no_release_notes_per_major[major_version]]
381+
print(available_minor_versions)
369382
previous_minor = minor_version - 1 if minor_version > 0 else None
370383
next_minor = minor_version + 1 if minor_version < available_minor_versions[0]['minor'] else None
371384
else:

0 commit comments

Comments
 (0)