#============================================================================
#Name : idoprep.py
#Part of : Helium
#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
#All rights reserved.
#This component and the accompanying materials are made available
#under the terms of the License "Eclipse Public License v1.0"
#which accompanies this distribution, and is available
#at the URL "http://www.eclipse.org/legal/epl-v10.html".
#
#Initial Contributors:
#Nokia Corporation - initial contribution.
#
#Contributors:
#
#Description:
#===============================================================================
""" Modules related to ido-prep """
import re
import os
import symrec
import logging
import traceback
import ido
logging.basicConfig(level=logging.INFO)
_logger = logging.getLogger("check_latest_release")
def validate(grace, service, product, release):
""" Validate s60 grace server, s60 grace service, s60 grace product and
s60 grace release are set.
"""
if not grace:
raise EnvironmentError("Property 's60.grace.server' is not defined.")
if not service:
raise EnvironmentError("Property 's60.grace.service' is not defined.")
if not product:
raise EnvironmentError("Property 's60.grace.product' is not defined.")
if not release:
raise EnvironmentError("Property 's60.grace.release' is not defined.")
def get_s60_env_details(grace, service, product, release, rev, cachefilename, s60gracecheckmd5, s60graceusetickler):
""" Return s60 environ details """
validate(grace, service, product, release)
revision = r'(_\d{3})?'
if rev != None:
revision = rev
if cachefilename:
_logger.info(str("Using cache file: %s" % cachefilename))
checkmd5 = False
if s60gracecheckmd5 != None:
checkmd5 = str(s60gracecheckmd5).lower()
checkmd5 = ((checkmd5 == "true") or (checkmd5 == "1") or (checkmd5 == "on"))
branch = os.path.join(grace, service, product)
if not os.path.exists(branch):
raise IOError("Error occurred: Could not find directory %s" % branch)
result = []
for rel in os.listdir(branch):
relpath = os.path.join(branch, rel)
_logger.info("Checking: %s" % str(relpath))
res = re.match(r"%s%s$" % (release, revision), rel, re.I)
if res != None:
_logger.info("Found: %s" % str(relpath))
result.append(relpath)
result.sort(reverse=True)
use_tickler = False
tickler_validation = str(s60graceusetickler).lower()
if tickler_validation != None:
use_tickler = ((tickler_validation == "true") or (tickler_validation == "1"))
validresults = []
for rel in result:
try:
metadata_filename = symrec.find_latest_metadata(str(rel))
if metadata_filename is not None and os.path.exists(metadata_filename):
_logger.info(str("Validating: %s" % metadata_filename))
if (use_tickler):
validator = symrec.ValidateTicklerReleaseMetadata(metadata_filename, cachefilename)
else:
validator = symrec.ValidateReleaseMetadataCached(metadata_filename, cachefilename)
if validator.is_valid(checkmd5):
_logger.info(str("%s is valid." % rel))
validresults.append(rel)
break
else:
_logger.info(str("%s is not a valid release." % rel))
elif metadata_filename is None:
_logger.info(str("Could not find the release metadata file under %s" % rel))
except IOError, exc:
_logger.warning(str("WARNING: %s: %s" % (rel , exc)))
_logger.warning(("%s is not a valid release." % rel))
traceback.print_exc()
result = validresults
if len(result) == 0:
raise EnvironmentError("Error finding GRACE release.")
print result[0]
return result
def get_version(buiddrive, resultname):
""" Return s60 version """
vfile = os.path.join(buiddrive + os.sep, 's60_version.txt')
version = None
if (os.path.exists(vfile)):
_logger.info("Are we still up-to-date compare to %s" % str(vfile))
f_file = open(str(vfile), 'r')
version = f_file.readline()
_logger.info(str("'%s' == '%s'" % (version, resultname)))
f_file.close()
else:
_logger.info("Version file not found getting new environment...")
return version
def create_ado_mapping(sysdefconfig, adomappingfile, adoqualitymappingfile, builddrive, adoqualitydirs):
""" Creates ado mapping and ado quality mapping files """
input_ = open(sysdefconfig, 'r')
output = open(adomappingfile, 'w')
outputquality = open(adoqualitymappingfile, 'w')
for sysdef in input_.readlines():
sysdef = sysdef.strip()
if len(sysdef) > 0:
print "Checking %s" % sysdef
os.path.dirname(sysdef)
location = ido.get_sysdef_location(sysdef)
if location != None:
if os.sep == '\\':
sysdef = os.path.dirname(sysdef).replace('\\','/').replace(':','\\:')
component = os.path.normpath(os.path.join(builddrive, os.environ['EPOCROOT'], location)).replace('\\','/').replace(':','\\:')
else:
sysdef = os.path.dirname(sysdef).replace('\\','/')
if location.startswith('/'):
component = os.path.normpath(os.path.join(builddrive, location.lstrip('/'))).replace('\\','/')
else:
component = os.path.normpath(os.path.join(builddrive, location)).replace('\\','/')
print "%s=%s\n" % (sysdef, component)
output.write("%s=%s\n" % (sysdef, component))
if adoqualitydirs == None:
outputquality.write("%s=%s\n" % (sysdef, component))
else:
for dir_ in adoqualitydirs.split(','):
if os.path.normpath(dir_) == os.path.normpath(os.path.join(builddrive, os.environ['EPOCROOT'], location)):
outputquality.write("%s=%s\n" % (sysdef, component))
outputquality.close()
output.close()
input_.close()