mirror of
https://github.com/postgres/pgweb.git
synced 2025-08-13 13:12:42 +00:00
Fix beta versioning to be more generic test versioning
This allows us to specify both beta and rc versions. Requires SQL: ALTER TABLE core_version RENAME COLUMN beta TO testing; ALTER TABLE core_version ALTER COLUMN testing TYPE integer USING CASE WHEN testing THEN 2 ELSE 0 END;
This commit is contained in:
@ -13,7 +13,7 @@ class VersionFeed(Feed):
|
|||||||
title_template = 'core/version_rss_title.html'
|
title_template = 'core/version_rss_title.html'
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
return Version.objects.filter(tree__gt=0).filter(beta=False)
|
return Version.objects.filter(tree__gt=0).filter(testing=0)
|
||||||
|
|
||||||
def item_link(self, obj):
|
def item_link(self, obj):
|
||||||
return "http://www.postgresql.org/docs/%s/static/%s" % (obj.tree, obj.relnotes)
|
return "http://www.postgresql.org/docs/%s/static/%s" % (obj.tree, obj.relnotes)
|
||||||
|
@ -5,14 +5,21 @@ from pgweb.util.misc import varnish_purge
|
|||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
TESTING_CHOICES = (
|
||||||
|
(0, 'Release'),
|
||||||
|
(1, 'Release candidate'),
|
||||||
|
(2, 'Beta'),
|
||||||
|
)
|
||||||
|
TESTING_SHORTSTRING = ('', 'rc', 'beta')
|
||||||
|
|
||||||
class Version(PgModel, models.Model):
|
class Version(PgModel, models.Model):
|
||||||
tree = models.DecimalField(max_digits=3, decimal_places=1, null=False, blank=False, unique=True)
|
tree = models.DecimalField(max_digits=3, decimal_places=1, null=False, blank=False, unique=True)
|
||||||
latestminor = models.IntegerField(null=False, blank=False, default=0, help_text="For beta versions, latestminor means latest beta number. For other releases, it's the latest minor release number in the tree.")
|
latestminor = models.IntegerField(null=False, blank=False, default=0, help_text="For testing versions, latestminor means latest beta/rc number. For other releases, it's the latest minor release number in the tree.")
|
||||||
reldate = models.DateField(null=False, blank=False)
|
reldate = models.DateField(null=False, blank=False)
|
||||||
relnotes = models.CharField(max_length=32, null=False, blank=False)
|
relnotes = models.CharField(max_length=32, null=False, blank=False)
|
||||||
current = models.BooleanField(null=False, blank=False, default=False)
|
current = models.BooleanField(null=False, blank=False, default=False)
|
||||||
supported = models.BooleanField(null=False, blank=False, default=True)
|
supported = models.BooleanField(null=False, blank=False, default=True)
|
||||||
beta = models.BooleanField(null=False, blank=False, default=False, help_text="For beta versions, latestminor means beta number")
|
testing = models.IntegerField(null=False, blank=False, default=0, help_text="Testing level of this release. latestminor indicates beta/rc number", choices=TESTING_CHOICES)
|
||||||
docsloaded = models.DateTimeField(null=True, blank=True, help_text="The timestamp of the latest docs load. Used to control indexing and info on developer docs.")
|
docsloaded = models.DateTimeField(null=True, blank=True, help_text="The timestamp of the latest docs load. Used to control indexing and info on developer docs.")
|
||||||
firstreldate = models.DateField(null=False, blank=False, help_text="The date of the .0 release in this tree")
|
firstreldate = models.DateField(null=False, blank=False, help_text="The date of the .0 release in this tree")
|
||||||
eoldate = models.DateField(null=False, blank=False, help_text="The planned EOL date for this tree")
|
eoldate = models.DateField(null=False, blank=False, help_text="The planned EOL date for this tree")
|
||||||
@ -22,17 +29,20 @@ class Version(PgModel, models.Model):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def versionstring(self):
|
def versionstring(self):
|
||||||
if not self.beta:
|
return self.buildversionstring(self.latestminor)
|
||||||
return "%s.%s" % (self.tree, self.latestminor)
|
|
||||||
|
def buildversionstring(self, minor):
|
||||||
|
if not self.testing:
|
||||||
|
return "%s.%s" % (self.tree, minor)
|
||||||
else:
|
else:
|
||||||
return "%sbeta%s" % (self.tree, self.latestminor)
|
return "%s%s%s" % (self.tree, TESTING_SHORTSTRING[self.testing], minor)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def treestring(self):
|
def treestring(self):
|
||||||
if not self.beta:
|
if not self.testing:
|
||||||
return self.tree
|
return self.tree
|
||||||
else:
|
else:
|
||||||
return "%s beta" % self.tree
|
return "%s %s" % (self.tree, TESTING_SHORTSTRING[self.testing])
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
# Make sure only one version at a time can be the current one.
|
# Make sure only one version at a time can be the current one.
|
||||||
|
@ -79,7 +79,7 @@ def community(request):
|
|||||||
# List of supported versions
|
# List of supported versions
|
||||||
def versions(request):
|
def versions(request):
|
||||||
return render_to_response('support/versioning.html', {
|
return render_to_response('support/versioning.html', {
|
||||||
'versions': Version.objects.filter(tree__gt=0).filter(beta=False),
|
'versions': Version.objects.filter(tree__gt=0).filter(testing=0),
|
||||||
}, NavContext(request, 'support'))
|
}, NavContext(request, 'support'))
|
||||||
|
|
||||||
re_staticfilenames = re.compile("^[0-9A-Z/_-]+$", re.IGNORECASE)
|
re_staticfilenames = re.compile("^[0-9A-Z/_-]+$", re.IGNORECASE)
|
||||||
|
@ -9,14 +9,14 @@ def get_struct():
|
|||||||
# Can't use a model here, because we don't (for some reason) have a
|
# Can't use a model here, because we don't (for some reason) have a
|
||||||
# hard link to the versions table here
|
# hard link to the versions table here
|
||||||
curs = connection.cursor()
|
curs = connection.cursor()
|
||||||
curs.execute("SELECT d.version, d.file, v.docsloaded, v.beta FROM docs d INNER JOIN core_version v ON v.tree=d.version ORDER BY d.version DESC")
|
curs.execute("SELECT d.version, d.file, v.docsloaded, v.testing FROM docs d INNER JOIN core_version v ON v.tree=d.version ORDER BY d.version DESC")
|
||||||
|
|
||||||
# Start priority is higher than average but lower than what we assign
|
# Start priority is higher than average but lower than what we assign
|
||||||
# to the current version of the docs.
|
# to the current version of the docs.
|
||||||
docprio = 0.8
|
docprio = 0.8
|
||||||
lastversion = None
|
lastversion = None
|
||||||
|
|
||||||
for version, filename, loaded, beta in curs.fetchall():
|
for version, filename, loaded, testing in curs.fetchall():
|
||||||
# Decrease the priority with 0.1 for every version of the docs
|
# Decrease the priority with 0.1 for every version of the docs
|
||||||
# we move back in time, until we reach 0.1. At 0.1 it's unlikely
|
# we move back in time, until we reach 0.1. At 0.1 it's unlikely
|
||||||
# to show up in a general search, but still possible to reach
|
# to show up in a general search, but still possible to reach
|
||||||
@ -28,7 +28,7 @@ def get_struct():
|
|||||||
|
|
||||||
yield ('docs/%s/static/%s' % (version==0 and 'devel' or version,
|
yield ('docs/%s/static/%s' % (version==0 and 'devel' or version,
|
||||||
filename),
|
filename),
|
||||||
beta and 0.1 or docprio, # beta versions always get 0.1 in prio
|
testing and 0.1 or docprio, # beta/rc versions always get 0.1 in prio
|
||||||
loaded)
|
loaded)
|
||||||
|
|
||||||
# Also yield the current version urls, with the highest
|
# Also yield the current version urls, with the highest
|
||||||
|
@ -48,7 +48,7 @@ def docpage(request, version, typ, filename):
|
|||||||
page = get_object_or_404(DocPage, version=ver, file=fullname)
|
page = get_object_or_404(DocPage, version=ver, file=fullname)
|
||||||
versions = DocPage.objects.filter(file=fullname).extra(select={
|
versions = DocPage.objects.filter(file=fullname).extra(select={
|
||||||
'supported':"COALESCE((SELECT supported FROM core_version v WHERE v.tree=version), 'f')",
|
'supported':"COALESCE((SELECT supported FROM core_version v WHERE v.tree=version), 'f')",
|
||||||
'beta':"CASE WHEN (SELECT beta FROM core_version v WHERE v.tree=version)='t' THEN true WHEN version=0 THEN true ELSE false END",
|
'testing':"COALESCE((SELECT testing FROM core_version v WHERE v.tree=version),0)",
|
||||||
}).order_by('-supported', '-version').only('version', 'file')
|
}).order_by('-supported', '-version').only('version', 'file')
|
||||||
|
|
||||||
if typ=="interactive":
|
if typ=="interactive":
|
||||||
@ -59,8 +59,8 @@ def docpage(request, version, typ, filename):
|
|||||||
return render_to_response('docs/docspage.html', {
|
return render_to_response('docs/docspage.html', {
|
||||||
'page': page,
|
'page': page,
|
||||||
'supported_versions': [v for v in versions if v.supported],
|
'supported_versions': [v for v in versions if v.supported],
|
||||||
'devel_versions': [v for v in versions if not v.supported and v.beta],
|
'devel_versions': [v for v in versions if not v.supported and v.testing],
|
||||||
'unsupported_versions': [v for v in versions if not v.supported and not v.beta],
|
'unsupported_versions': [v for v in versions if not v.supported and not v.testing],
|
||||||
'title': page.title,
|
'title': page.title,
|
||||||
'doc_type': typ,
|
'doc_type': typ,
|
||||||
'comments': comments,
|
'comments': comments,
|
||||||
@ -76,7 +76,7 @@ def redirect_root(request, version):
|
|||||||
return HttpResponseRedirect("/docs/%s/static/" % version)
|
return HttpResponseRedirect("/docs/%s/static/" % version)
|
||||||
|
|
||||||
def root(request):
|
def root(request):
|
||||||
versions = Version.objects.filter(Q(supported=True) | Q(beta=True,tree__gt=0)).order_by('-tree')
|
versions = Version.objects.filter(Q(supported=True) | Q(testing__gt=0,tree__gt=0)).order_by('-tree')
|
||||||
return render_to_response('docs/index.html', {
|
return render_to_response('docs/index.html', {
|
||||||
'versions': versions,
|
'versions': versions,
|
||||||
}, NavContext(request, 'docs'))
|
}, NavContext(request, 'docs'))
|
||||||
@ -108,14 +108,14 @@ class _VersionPdfWrapper(Version):
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
def manuals(request):
|
def manuals(request):
|
||||||
# We don't include beta's here. Why?
|
# We don't include beta/rc's here. Why?
|
||||||
versions = Version.objects.filter(supported=True).order_by('-tree')
|
versions = Version.objects.filter(supported=True).order_by('-tree')
|
||||||
return render_to_response('docs/manuals.html', {
|
return render_to_response('docs/manuals.html', {
|
||||||
'versions': [_VersionPdfWrapper(v) for v in versions],
|
'versions': [_VersionPdfWrapper(v) for v in versions],
|
||||||
}, NavContext(request, 'docs'))
|
}, NavContext(request, 'docs'))
|
||||||
|
|
||||||
def manualarchive(request):
|
def manualarchive(request):
|
||||||
versions = Version.objects.filter(beta=False,supported=False,tree__gt=0).order_by('-tree')
|
versions = Version.objects.filter(testing=0,supported=False,tree__gt=0).order_by('-tree')
|
||||||
return render_to_response('docs/archive.html', {
|
return render_to_response('docs/archive.html', {
|
||||||
'versions': [_VersionPdfWrapper(v) for v in versions],
|
'versions': [_VersionPdfWrapper(v) for v in versions],
|
||||||
}, NavContext(request, 'docs'))
|
}, NavContext(request, 'docs'))
|
||||||
|
@ -6,15 +6,12 @@ from pgweb.core.models import Version
|
|||||||
class _version_choices():
|
class _version_choices():
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
yield ('-1', '** Select version')
|
yield ('-1', '** Select version')
|
||||||
q = Q(supported=True) | Q(beta=True)
|
q = Q(supported=True) | Q(testing__gt=0)
|
||||||
for v in Version.objects.filter(q):
|
for v in Version.objects.filter(q):
|
||||||
for minor in range(v.latestminor,-1,-1):
|
for minor in range(v.latestminor,-1,-1):
|
||||||
if not v.beta:
|
if not v.testing or minor>0:
|
||||||
s = "%s.%s" % (v.tree, minor)
|
# For beta/rc versions, there is no beta0, so exclude it
|
||||||
else:
|
s = v.buildversionstring(minor)
|
||||||
# For beta versions, there is no beta0
|
|
||||||
if minor==0: continue
|
|
||||||
s = "%s.beta%s" % (v.tree, minor)
|
|
||||||
yield (s,s)
|
yield (s,s)
|
||||||
yield ('Unsupported/Unknown', 'Unsupported/Unknown')
|
yield ('Unsupported/Unknown', 'Unsupported/Unknown')
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ written about PostgreSQL (some of which are available in their entirety online).
|
|||||||
<dt>Online Manuals</dt>
|
<dt>Online Manuals</dt>
|
||||||
<dd>
|
<dd>
|
||||||
{%for v in versions%}
|
{%for v in versions%}
|
||||||
<p><b>{{v.treestring}}</b> ({%if not v.beta%}<a href="/docs/{{v.tree}}/interactive/index.html">with</a>/{%endif%}<a href="/docs/{{v.tree}}/static/index.html">without</a> comments)</p>
|
<p><b>{{v.treestring}}</b> ({%if not v.testing%}<a href="/docs/{{v.tree}}/interactive/index.html">with</a>/{%endif%}<a href="/docs/{{v.tree}}/static/index.html">without</a> comments)</p>
|
||||||
{%endfor%}
|
{%endfor%}
|
||||||
</dd>
|
</dd>
|
||||||
<dt>Translated Manuals</dt>
|
<dt>Translated Manuals</dt>
|
||||||
|
Reference in New Issue
Block a user