def test_setup_tool_cfg(self, os_mock, Tools_mock, ConfiguredTool_mock, log_mock): # Prepares mocks def info(text): pass # print text # for debug only def existing_file(f): return True log_mock.info = info log_mock.error = info log_mock.warning = info prelude.XmakeException = info prelude.is_existing_file = existing_file buildConfig = BuildConfig() buildConfig.cfg_dir = MagicMock(return_value=os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'samples')) buildConfig.component_dir = MagicMock(return_value=os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'samples')) tools = Tools_mock() tools.is_declared_tool = lambda tid: False if tid != 'msvc' else True buildConfig._tools = tools # Runs test prelude.setup_tool_cfg(buildConfig) # Asserts assert (ConfiguredTool_mock.call_count > 0)
def test__maven_jarsigner_plugin_options_noenv(self,os_mock, log_mock): os_mock.getenv=MagicMock(return_value=None) os_mock.path.exists = MagicMock(return_value=True) os_mock.path.isdir = MagicMock(return_value=False) cfg = BuildConfig() cfg._genroot_dir = r"C:\Users\i079877\TEMP" m=maven.build(cfg) value=m._maven_jarsigner_plugin_options(False) if value!=[]: raise Exception("Returned a bad value:"+str(value))
def test__maven_jarsigner_plugin_options_disabled(self,os_mock, log_mock): os_mock.getenv=MagicMock(side_effect=self.return_signing_env) os_mock.path.exists = MagicMock(return_value=True) os_mock.path.isdir = MagicMock(return_value=False) cfg = BuildConfig() cfg._genroot_dir = r"C:\Users\i079877\TEMP" m=maven.build(cfg) value=m._maven_jarsigner_plugin_options(False) to_be_returned=['-Dcodesign.sap.realcodesigning=false', '-Dcodesign.sap.server.url=https://signproxy.wdf.sap.corp:28443/sign', '-Dcodesign.sap.ssl.keystore=/keystore', '-Dcodesign.sap.ssl.keystore.pass=KEYSTORE_PASSWORD', '-Dcodesign.sap.ssl.truststore=/truststore', '-Dcodesign.sap.ssl.truststore.pass=TRUSTSTORE_PASSWORD'] if value!=to_be_returned: raise Exception("Returned a bad value:"+str(value))
def test__get_version_from_effective_pom(self, ET_mock, join_mock, log_mock): def t(suffix=''): def a(key): mock = MagicMock() if 'version' in key: mock.text = '1.0.0{}'.format('-' + suffix if suffix else '') elif 'groupId' in key: mock.text = 'group' elif 'artifactId' in key: mock.text = 'artifact' else: mock.text = '' return mock return a root_mock = MagicMock() root_mock.tag.split = MagicMock(return_value=['', 'project']) pom_mock = MagicMock() pom_mock.getroot = MagicMock(return_value=root_mock) ET_mock.parse = MagicMock(return_value=pom_mock) cfg = BuildConfig() cfg._genroot_dir = '' m = maven.build(cfg) m._mvn = MagicMock() # NO SUFFIX pom_mock.find = MagicMock(side_effect=t()) m._get_version_from_effective_pom() assert cfg.version() == '1.0.0' # SUFFIX in pom version # SNAPSHOT pom_mock.find = MagicMock(side_effect=t('SNAPSHOT')) m._get_version_from_effective_pom() assert cfg.version() == '1.0.0' # RELEASE pom_mock.find = MagicMock(side_effect=t('RELEASE')) m._get_version_from_effective_pom() assert cfg.version() == '1.0.0' # MILESTONE pom_mock.find = MagicMock(side_effect=t('MILESTONE')) m._get_version_from_effective_pom() assert cfg.version() == '1.0.0' # NO SUFFIX in pom version but in build_config._version_suffix pom_mock.find = MagicMock(side_effect=t()) # BLALA cfg._version_suffix = 'BLABLA' m._get_version_from_effective_pom() assert cfg.version() == '1.0.0-BLABLA'
def load_latest(v): l=None v=find_latest(v) if v!=None: bc=BuildConfig() bc._do_import=True log.info( 'required bootstrapper version is '+v) l=get_xmake_version(v, bc) if l is None: log.error( 'required bootstrapper version not found: '+v) sys.exit(2) else: log.info( 'required bootstrapper version found at '+l) return (v,l)
def test_create_gendir(self, os_mock): my_env = {} def setitem(name, val): my_env[name] = val buildConfig = BuildConfig() buildConfig._genroot_dir = r"C:\Users\i079877\TEMP" prelude.exists = MagicMock(return_value=False) prelude.makedirs = MagicMock(return_value=None) os_mock.environ.__setitem__.side_effect = setitem prelude.create_gendir(buildConfig) assert(prelude.exists.call_count == 2) assert(prelude.makedirs.call_count == 2) os_mock.environ.__setitem__.assert_has_calls([call('TMP', buildConfig.temp_dir()), call('TEMP', buildConfig.temp_dir()), call('TMPDIR', buildConfig.temp_dir())], any_order=True)
def run(argv): log.stop_logfile() print 'INFO: running xmake...' if test_mode: build_cfg = BuildConfig() setup_config(build_cfg, True) else: xmake.main(argv) sys.exit(0)
def test_check_version_compliance(self): matrix = ({"release":"indirect-shipment", "version": "0.6.3.25", "assert": True, "returnedValue": "0.6.3.25"}, {"release":"direct-shipment", "version": "1.0.3", "assert": True, "returnedValue": "1.0.3"}, {"release":"direct-shipment", "version": "v1.0.3", "assert": False, "returnedValue": "v1.0.3"}, {"release":"direct-shipment", "version": "0.6.3", "assert": False, "returnedValue": "0.6.3"}, {"release":"direct-shipment", "version": "1.2", "assert": False, "returnedValue": "1.2"}, {"release":"direct-shipment", "version": "1.2.3-sap", "assert": False, "returnedValue": "1.2.3-sap"}, {"release":"direct-shipment", "version": "1.2.3.sap", "assert": False, "returnedValue": "1.2.3.sap"}, {"release":"direct-shipment", "version": "1.2.3-sap-01", "assert": False, "returnedValue": "1.2.3-sap-01"}, {"release":"direct-shipment", "version": "1.2.3.sap-01", "assert": False, "returnedValue": "1.2.3.sap-01"}, {"release":"direct-shipment", "version": "300.2.1", "assert": True, "returnedValue": "300.2.1"}, {"release":"indirect-shipment", "version": "v1.0.3", "assert": False, "returnedValue": "v1.0.3"}, {"release":"indirect-shipment", "version": "1.2", "assert": True, "returnedValue": "1.2.0"}, {"release":"indirect-shipment", "version": "1.2.3-sap", "assert": True, "returnedValue": "1.2.3-sap"}, {"release":"indirect-shipment", "version": "1.2.3.sap", "assert": True, "returnedValue": "1.2.3.sap"}, {"release":"indirect-shipment", "version": "1.2.3-sap-01", "assert": True, "returnedValue": "1.2.3-sap-01"}, {"release":"indirect-shipment", "version": "1.2.3.sap-01", "assert": True, "returnedValue": "1.2.3.sap-01"}, {"release":"indirect-shipment", "version": "0.6.3", "assert": True, "returnedValue": "0.6.3"}, {"release":"indirect-shipment", "version": "0.6.3.25", "assert": True, "returnedValue": "0.6.3.25"}, {"release":"indirect-shipment", "version": "0.6.3-25", "assert": True, "returnedValue": "0.6.3"}, {"release":"indirect-shipment", "version": "9.5", "assert": True, "returnedValue": "9.5.0"}, {"release":"indirect-shipment", "version": "9.5-02", "assert": True, "returnedValue": "9.5.0"}, {"release":"indirect-shipment", "version": "23.502", "assert": True, "returnedValue": "23.502.0"}, {"release":"indirect-shipment", "version": "9.5-sap-02", "assert": True, "returnedValue": "9.5.0-sap-02"}, {"release":"indirect-shipment", "version": "1-sap.02", "assert": True, "returnedValue": "1.0.0-sap.02"}, {"release":"indirect-shipment", "version": "1.sap.02", "assert": True, "returnedValue": "1.0.0-sap.02"}, {"release":"indirect-shipment", "version": "1.1-sap.02", "assert": True, "returnedValue": "1.1.0-sap.02"}, {"release":"indirect-shipment", "version": "1.1.sap.02", "assert": True, "returnedValue": "1.1.0-sap.02"}, {"release":"indirect-shipment", "version": "1-sap", "assert": True, "returnedValue": "1.0.0-sap"}, {"release":"indirect-shipment", "version": "1.sap", "assert": True, "returnedValue": "1.0.0-sap"}, {"release":"indirect-shipment", "version": "1.1-sap", "assert": True, "returnedValue": "1.1.0-sap"}, {"release":"indirect-shipment", "version": "1.1.sap", "assert": True, "returnedValue": "1.1.0-sap"}, {"release":"indirect-shipment", "version": "0.1.110-sap", "assert": True, "returnedValue": "0.1.110-sap"}, {"release":"indirect-shipment", "version": "0.1.110.sap", "assert": True, "returnedValue": "0.1.110.sap"}, {"release":"indirect-shipment", "version": "1.2", "assert": True, "returnedValue": "1.2.0"}, {"release":"indirect-shipment", "version": "1.2.0.2", "assert": True, "returnedValue": "1.2.0.2"}, {"release":"indirect-shipment", "version": "2.18.2.v201304210537-sap-02", "assert": True, "returnedValue": "2.18.2.v201304210537-sap-02"}, {"release":"indirect-shipment", "version": "2.18.2.201304210537-sap-02", "assert": True, "returnedValue": "2.18.2.201304210537-sap-02"}, {"release":"indirect-shipment", "version": "2.18.2-201304210537-sap-02", "assert": True, "returnedValue": "2.18.2-201304210537-sap-02"}, {"release":"indirect-shipment", "version": "1.02", "assert": True, "returnedValue": "1.02.0"}, {"release":"indirect-shipment", "version": "300.2.1", "assert": True, "returnedValue": "300.2.1"}, {"release":"indirect-shipment", "version": "300.02", "assert": True, "returnedValue": "300.02.0"} ) cfg = BuildConfig() cfg._genroot_dir = r"C:\Users\i079877\TEMP" m= maven.build(cfg) for elem in matrix : cfg.set_base_version(elem["version"]) cfg._release = elem["release"] status = m._check_project_version_compliance() self.assertEqual(status[0], elem["assert"], "expected {} but got {} for input {}/{}".format(elem["assert"], status[0] , elem["release"], elem["version"])) self.assertEqual(cfg.base_version(), elem["returnedValue"],"expected {} but got {} for input {}/{}".format(elem["returnedValue"], cfg.base_version(), elem["release"], elem["version"]))
def _test_tag_image(self,version,forced,docker_mock): def docker(args,handler=None,dir=None,echo=True,home=None): if len(args) and '-v' in args: handler("Docker version "+version+", build ab77bde/"+version) docker_mock.docker=MagicMock(side_effect=docker) def tag_name(build_cfg,gid,aid,tmp=False): return "tag_name" docker_mock.tag_name=MagicMock(side_effect=tag_name) cfg = BuildConfig() cfg._runtime = "linux" cfg.cfg_dir = MagicMock(return_value=os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'samples')) cfg.component_dir = MagicMock(return_value=os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'samples','docker')) d=dockerbuild.build(cfg) d.tag_image(True) docker_mock.tag_image.assert_called_once_with(None, "tag_name", forced)
def test_monitoring(self, walk_mock, logGuessLevel_mock): wait=0.01 build_cfg = BuildConfig() build_cfg.cfg_dir = MagicMock(return_value=os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'samples')) build_cfg.component_dir = MagicMock(return_value=os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'samples')) testResult={'detected':False, 'notify_caller':Event()} def mocked_walk(path, visit, arg): arg[1]['change']=True walk_mock.side_effect=mocked_walk def mocked__logGuessLevel(msg, prefix=None): if msg==log._MonitoringWorker.MESSAGE_ALIVE.format(wait): testResult['detected']=True testResult['notify_caller'].set() logGuessLevel_mock.side_effect=mocked__logGuessLevel log.logging_monitoring_enable(build_cfg, wait) testResult['notify_caller'].wait(60) # should not wait so much... maximum value and in this case, should fail in the assert below log._logging_monitoring=None assert(testResult['detected'])
def stubBuildConfig(cfg_dir, component_dir): # template to create buildConfig in test cases cfg = BuildConfig() cfg._runtime = "linux" cfg._tools = Tools() cfg._tools.import_tools_dir=cfg.import_tools_dir cfg._tools.runtime=cfg.runtime cfg.cfg_dir = MagicMock(return_value=cfg_dir) cfg.component_dir = MagicMock(return_value=component_dir) return cfg
def test_storePromoteProps_nogav(self, log_mock, StagingAPI_mock, open_mock): configParser_mock = Mock() ConfigParser.ConfigParser = MagicMock(return_value=configParser_mock) api = StagingAPI_mock() api.getrepositorystatus = MagicMock(return_value= {'repositoryURI': 'http://mo-49a5bdc06.mo.sap.corp:8081/nexus/content/repositories/repoIdtotto', 'releaseRepositoryId': 'deploy.milestones'}) buildConfig = BuildConfig() buildConfig.promote_props_file = MagicMock(return_value= "promote.properties") buildConfig.version = MagicMock(return_value= "4.5.0") buildConfig.base_group = MagicMock(return_value= None) buildConfig.base_artifact = MagicMock(return_value= None) promote._storePromoteProps(api, buildConfig, "toto", "a", "4.5.0") assert(configParser_mock.set.call_count == 2) assert (open_mock.call_count == 1)
def test_storePromoteProps_fail(self, log_mock, StagingAPI_mock, open_mock): configParser_mock = Mock() ConfigParser.ConfigParser = MagicMock(return_value=configParser_mock) api = StagingAPI_mock() api.getrepositorystatus = MagicMock(return_value= {}) buildConfig = BuildConfig() buildConfig.promote_props_file = MagicMock(return_value= "promote.properties") buildConfig.version = MagicMock(return_value= "4.5.0") buildConfig.base_group = MagicMock(return_value= "com.sap.prd.dita") buildConfig.base_artifact = MagicMock(return_value= "com.sap.prd.dita.projectmap.api") promote._storePromoteProps(api, buildConfig, "toto", "a", "4.5.0") log_mock.error.assert_called_once_with('impossible to store promote properties. Can not have repository status: {} ') assert(configParser_mock.set.call_count == 0) assert (open_mock.call_count == 0)
def test_storePromoteProps_base(self, log_mock, StagingAPI_mock, open_mock): configParser_mock = Mock() ConfigParser.ConfigParser = MagicMock(return_value=configParser_mock) api = StagingAPI_mock() api.getrepositorystatus = MagicMock(return_value= {'repositoryURI': 'http://mo-49a5bdc06.mo.sap.corp:8081/nexus/content/repositories/repoIdtotto', 'releaseRepositoryId': 'deploy.milestones'}) buildConfig = BuildConfig() buildConfig.promote_props_file = MagicMock(return_value= "promote.properties") buildConfig.version = MagicMock(return_value= "4.5.0") buildConfig.base_group = MagicMock(return_value= "com.sap.prd.dita") buildConfig.base_artifact = MagicMock(return_value= "com.sap.prd.dita.projectmap.api") promote._storePromoteProps(api, buildConfig, "toto", "a", "4.5.0") configParser_mock.set.assert_any_call('promote','release.metadata.url','http://mo-49a5bdc06.mo.sap.corp:8081/nexus/content/repositories/deploy.milestones/com/sap/prd/dita/com.sap.prd.dita.projectmap.api/4.5.0/com.sap.prd.dita.projectmap.api-4.5.0-releaseMetadata.zip') configParser_mock.set.assert_any_call('promote','base.group','com.sap.prd.dita') configParser_mock.set.assert_any_call('promote','base.artifact','com.sap.prd.dita.projectmap.api') configParser_mock.set.assert_any_call('promote','base.version','4.5.0') configParser_mock.set.assert_any_call('promote','base.treeish','a') assert(configParser_mock.set.call_count == 5) assert (open_mock.call_count == 1)
def main(argv=sys.argv): try: build_cfg = BuildConfig() build_cfg._args = argv[1:] log.logging_monitoring_enable(build_cfg) v = inst.get_technical_xmake_version() if v is not None: log.info('technical xmake version is '+v) phases = [('PRELUDE', execute_prelude), ('MODULES', execute_modules), ('IMPORT', execute_imports), ('BUILD', execute_build), ('EXPORT', execute_exports), ('FORWARD', execute_forward), ('CREATE_STAGING', execute_create_staging), ('DEPLOY', execute_deployment), ('CLOSE_STAGING', execute_close_staging), ('PROMOTE', execute_promote)] def exec_phase(name, method): if name == 'PRELUDE': log.info('='*100) log.info('= {0:96} ='.format('entering xmake ' + name + ' phase')) log.info('='*100) try: method(build_cfg) notify_phase_ended(name, build_cfg) utils.flush() except SystemExit: raise except BaseException: raise log.info('end of xmake ' + name + ' phase') log.info('='*100) [exec_phase(name, method) for (name, method) in phases] log.info('') log.info('*'*100) log.info('*{0:98}*'.format('')) log.info('* {0:96} *'.format('XMake Build Successfully Done (^_^)')) log.info('*{0:98}*'.format('')) log.info('*'*100) return 0 except SystemExit as se: log.exception(se) log.info('') log.error('*'*100) log.error('*{0:98}*'.format('')) log.error('* {0:96} *'.format('XMake Build failed (-_-\')')) log.error('*{0:98}*'.format('')) log.error('* {0:96} *'.format('Exit code '+str(se))) if build_cfg.genroot_dir(): log.error('* {0:96} *'.format(os.path.join(build_cfg.genroot_dir(), 'boot.log'))) log.error('* {0:96} *'.format(os.path.join(build_cfg.genroot_dir(), 'build.log'))) log.error('*{0:98}*'.format('')) log.error('*'*100) raise except BaseException as ex: log.exception(ex) log.info('') log.error('*'*100) log.error('*{0:98}*'.format('')) log.error('* {0:96} *'.format('XMake Build failed (-_-\')')) log.error('*{0:98}*'.format('')) log.error('* {0:96} *'.format('aborting build because of error in last phase')) if build_cfg.genroot_dir(): log.error('* {0:96} *'.format(os.path.join(build_cfg.genroot_dir(), 'boot.log'))) log.error('* {0:96} *'.format(os.path.join(build_cfg.genroot_dir(), 'build.log'))) log.error('*{0:98}*'.format('')) log.error('*'*100) sys.exit(1)
def test_add_import_repo(self): nx_repos = ['http://nexus1', 'http://nexus2'] docker_repos = ['http://docker1', 'http://docker2'] cfg = BuildConfig() # non productive / non release build cfg._import_repos = {} cfg.add_import_repo(nx_repos[0]) cfg.add_import_repo(nx_repos[1]) cfg.add_import_repo(docker_repos[0], DOCKERREPO) cfg.add_import_repo(docker_repos[1], DOCKERREPO) assert cfg._import_repos[COMMONREPO] == nx_repos assert cfg._import_repos[DOCKERREPO] == docker_repos # productive build cfg._import_repos = {} cfg._productive = True cfg.add_import_repo(nx_repos[0]) with self.assertRaisesRegexp(XmakeException, 'only one repository url is authorized'): cfg.add_import_repo(nx_repos[1]) cfg.add_import_repo(docker_repos[0], DOCKERREPO) with self.assertRaisesRegexp(XmakeException, 'only one repository url is authorized'): cfg.add_import_repo(docker_repos[1], DOCKERREPO) assert cfg._import_repos[COMMONREPO] == [nx_repos[0]] assert cfg._import_repos[DOCKERREPO] == [docker_repos[0]] # xmake-ldi release build cfg._import_repos = {} cfg._productive = False cfg._release = 'release' cfg.add_import_repo(nx_repos[0]) with self.assertRaisesRegexp(XmakeException, 'only one repository url is authorized'): cfg.add_import_repo(nx_repos[1]) cfg.add_import_repo(docker_repos[0], DOCKERREPO) with self.assertRaisesRegexp(XmakeException, 'only one repository url is authorized'): cfg.add_import_repo(docker_repos[1], DOCKERREPO) assert cfg._import_repos[COMMONREPO] == [nx_repos[0]] assert cfg._import_repos[DOCKERREPO] == [docker_repos[0]] # xmake-dev release build cfg._import_repos = {} cfg._productive = True cfg._release = None cfg._version_suffix = None cfg.add_import_repo(nx_repos[0]) with self.assertRaisesRegexp(XmakeException, 'only one repository url is authorized'): cfg.add_import_repo(nx_repos[1]) cfg.add_import_repo(docker_repos[0], DOCKERREPO) with self.assertRaisesRegexp(XmakeException, 'only one repository url is authorized'): cfg.add_import_repo(docker_repos[1], DOCKERREPO) assert cfg._import_repos[COMMONREPO] == [nx_repos[0]] assert cfg._import_repos[DOCKERREPO] == [docker_repos[0]]
def test_import_repos(self): nx_repos = ['http://nexus1', 'http://nexus2', 'http://nexus3'] docker_repos = ['http://docker1', 'http://docker2', 'http://docker3'] npm_repos = ['http://npm1', 'http://npm2', 'http://npm3'] # no repos cfg = BuildConfig() cfg._import_repos = { COMMONREPO: None, DOCKERREPO: None, NPMREPO: None } assert cfg.import_repos() == None assert cfg.import_repos(t=DOCKERREPO) == None assert cfg.import_repos(t=NPMREPO) == None # no repos productive build cfg._productive = True assert cfg.import_repos() == None assert cfg.import_repos(t=DOCKERREPO) == None assert cfg.import_repos(t=NPMREPO) == None # no repos cfg = BuildConfig() cfg._import_repos = { COMMONREPO: [], DOCKERREPO: [], NPMREPO: [] } assert cfg.import_repos() == [] assert cfg.import_repos(t=DOCKERREPO) == [] assert cfg.import_repos(t=NPMREPO) == [] # no repos productive build cfg._productive = True assert cfg.import_repos() == [] assert cfg.import_repos(t=DOCKERREPO) == [] assert cfg.import_repos(t=NPMREPO) == [] cfg = BuildConfig() cfg._import_repos = { COMMONREPO: nx_repos, DOCKERREPO: docker_repos, NPMREPO: npm_repos } # non productive / non release build assert cfg.import_repos() == nx_repos assert cfg.import_repos(t=DOCKERREPO) == docker_repos assert cfg.import_repos(t=NPMREPO) == npm_repos # productive build cfg._productive = True assert cfg.import_repos() == [nx_repos[0]] assert cfg.import_repos(t=DOCKERREPO) == [docker_repos[0]] assert cfg.import_repos(t=NPMREPO) == [npm_repos[0]] # xmake-ldi release build cfg._productive = False cfg._release = 'release' assert cfg.import_repos() == [nx_repos[0]] assert cfg.import_repos(t=DOCKERREPO) == [docker_repos[0]] assert cfg.import_repos(t=NPMREPO) == [npm_repos[0]] # xmake-dev release build cfg._productive = True cfg._release = None cfg._version_suffix = None assert cfg.import_repos() == [nx_repos[0]] assert cfg.import_repos(t=DOCKERREPO) == [docker_repos[0]] assert cfg.import_repos(t=NPMREPO) == [npm_repos[0]]
def bootstrap2(argv): global xmake_status, build_cfg prepare_bootstrap() xmake_inst_dir = inst.get_installation_dir() if len(argv)>1 and argv[1]=='--bootstrap': xmake_status='bootstrap' sys.argv=argv=argv[0:1]+argv[2:] else: if isfile(join(xmake_inst_dir,'.loaded')): log.warning( 'directly using loaded sub level version of xmake') xmake_status='loaded' if xmake_status=='loaded': run(argv) else: log.info( 'bootstrapping xmake...') build_cfg = BuildConfig() (args,_,_) = setup_config(build_cfg, True) log.info("component root is "+build_cfg.component_dir()) log.info( 'build runtime is ' + build_cfg.runtime()) create_gendir(build_cfg) log.start_logfile(join(build_cfg.genroot_dir(),"boot.log")) determine_version_suffix(build_cfg, args.version) # required by xmake version check below if args.use_current_xmake_version: log.warning( 'using actually installed version as requested by option --use-current-xmake-version') run(argv) else: v=determine_xmake_version(build_cfg) if v==None: log.warning( 'no xmake version specified (please maintain file '+XMAKE_VERSION+" or xmake.cfg in project's cfg folder") log.info("default version is "+str(args.default_xmake_version)) if args.default_xmake_version==None: if build_cfg.is_release() or build_cfg.is_milestone(): raise XmakeException('no version specified for xmake for a productive build') else: log.warning( 'using actually installed version') run(argv) else: v=args.default_xmake_version log.warning( 'using explicit default version '+v) if v==None: log.error("do not know any xmake version to use -> exit") sys.exit(2) else: v=find_latest(v) log.info( 'required xmake version is '+v) if v.endswith("-SNAPSHOT"): if build_cfg.is_release() or build_cfg.is_milestone(): log.info("version suffix is "+str(build_cfg.version_suffix())) log.error( 'this is a snapshot version, it cannot be used for release or milestone builds') raise XmakeException('snapshot version specified for xmake for a realease or milestone build') else: log.warning( 'this is a snapshot version, it cannot be used for release builds') l=get_xmake_version(v, build_cfg) if is_existing_file(xmake_loaded): os.remove(xmake_loaded) log.info( 'required xmake version found at '+l) if test_mode: cmd=[sys.executable, join(l,'xmake','bootstrap.py'), '--use-current-xmake-version'] else: cmd=[sys.executable, join(l,'xmake','xmake.py')] log.info( 'starting xmake...') cmd.extend(prepare_args(build_cfg, l,argv[1:])) if build_cfg.component_dir()!=None: os.chdir(build_cfg.component_dir()) flush() log.stop_logfile() rc=subprocess.call(cmd) sys.exit(rc)