blob: 7976f80489aedb53d92d89dbc68ba4422cd8c93d [file] [log] [blame]
from jinja2 import Environment, FileSystemLoader
import os
import re
import time
from build.versions import ANY_VERSION_REGEX
PRODUCT_VERSION_TEMPLATES = {
"mobile": {
"aurora": {
"version_template": "mobile_alpha_version.php.tpl",
},
"beta": {
"version_template": "mobile_beta_version.php.tpl",
"history_info": {
"template": "mobileHistory.class.php",
"marker": "NEXT_DEVELOPMENT",
},
},
"major": {
"version_template": "mobile_latest_version.php.tpl",
"history_info": {
"template": "mobileHistory.class.php",
"marker": "NEXT_MAJOR"
},
},
"minor": {
"version_template": "mobile_latest_version.php.tpl",
"history_info": {
"template": "mobileHistory.class.php",
"marker": "NEXT_STABILITY"
},
},
},
"firefox": {
"aurora": {
"version_template": "FIREFOX_AURORA.php.tpl",
},
"beta": {
"version_template": "LATEST_FIREFOX_DEVEL_VERSION.php.tpl",
"version_template_2": "LATEST_FIREFOX_RELEASED_DEVEL_VERSION.php.tpl",
"history_info": {
"template": "firefoxHistory.class.php",
"marker": "NEXT_DEVELOPMENT",
},
},
"major": {
"version_template": "LATEST_FIREFOX_VERSION.php.tpl",
"version_template_2": "LATEST_FIREFOX_RELEASED_VERSION.php.tpl",
"history_info": {
"template": "firefoxHistory.class.php",
"marker": "NEXT_MAJOR"
},
},
"minor": {
"version_template": "LATEST_FIREFOX_VERSION.php.tpl",
"version_template_2": "LATEST_FIREFOX_RELEASED_VERSION.php.tpl",
"history_info": {
"template": "firefoxHistory.class.php",
"marker": "NEXT_STABILITY"
},
},
"esr": {
"version_template": "FIREFOX_ESR.php.tpl",
"version_template_2": "FIREFOX_ESR_NEXT.php.tpl",
"history_info": {
"template": "firefoxHistory.class.php",
"marker": "NEXT_STABILITY"
},
},
},
"thunderbird": {
# Thundebird is not doing anything about beta
"major": {
"version_template": "LATEST_THUNDERBIRD_VERSION.php.tpl",
"history_info": {
"template": "thunderbirdHistory.class.php",
"marker": "NEXT_MAJOR"
},
},
"minor": {
"version_template": "LATEST_THUNDERBIRD_VERSION.php.tpl",
"history_info": {
"template": "thunderbirdHistory.class.php",
"marker": "NEXT_STABILITY"
},
},
},
}
def updateVersionTemplate(targetSVNDirectory, templateFile, version):
"""
Templates are stored in dedicated directory. use jinja to update them
"""
templatesDir = os.path.join(targetSVNDirectory, "templates")
env = Environment(loader=FileSystemLoader(templatesDir))
if not os.path.isfile(os.path.join(templatesDir, templateFile)):
raise Exception("Could not find templateFile: " + templateFile)
template = env.get_template(templateFile)
output_from_parsed_template = template.render(VERSION=version)
# Save the results
targetFile = os.path.join(targetSVNDirectory, templateFile.replace(".tpl", ""))
with open(targetFile, "wb") as fh:
fh.write(output_from_parsed_template)
fh.close()
def addNewVersion(targetSVNDirectory, category, filename, version):
"""
We cannot use a template mechanism for history file
because we need to keep the markers
Do it by hand
"""
sourceFile = os.path.join(targetSVNDirectory, "history", filename)
f = open(sourceFile, 'r')
filedata = f.read()
f.close()
indent = " "
toreplace = "// " + category
newVersion = "'" + version + "' => '" + time.strftime("%Y-%m-%d") + "',"
if newVersion in filedata:
print "New version '" + newVersion + "' already existing in the file " + filename
return
newdata = filedata.replace(toreplace, newVersion + "\n" + indent + toreplace)
targetFile = os.path.join(targetSVNDirectory, "history", filename)
f = open(targetFile, 'w')
f.write(newdata)
f.close()
def getTypeFromVersion(version):
"""
From the version, return the code name of the version
This is going to be used to search in the datastructure
"""
m = re.match(ANY_VERSION_REGEX, version)
if m and m.groups()[2] == "a":
return "aurora"
if m and m.groups()[2] == "b":
return "beta"
if m and m.groups()[3] == "esr":
return "esr"
if m and all(e is None for e in m.groups()[1:]):
# only groups()[0] is not None
# either major or minor release
if m.groups()[0].count(".") > 1:
return "minor"
else:
return "major"
def updateProductDetailFiles(targetSVNDirectory, product, version):
"""
Update the various files
"""
type_ = getTypeFromVersion(version)
info = PRODUCT_VERSION_TEMPLATES.get(product, {}).get(type_)
template = info["version_template"]
history_info = PRODUCT_VERSION_TEMPLATES.get(product, {}).get(type_).get("history_info")
if template:
updateVersionTemplate(targetSVNDirectory, template, version)
if "version_template_2" in info:
# Some variables are stored in two files, update the second file
template_2 = info["version_template_2"]
if template_2:
updateVersionTemplate(targetSVNDirectory, template_2, version)
if type_ == "esr":
# Strip the 'esr' from the version. It is not used in the history
version = version.replace("esr", "")
if history_info:
addNewVersion(targetSVNDirectory, history_info["marker"], history_info["template"], version)