コード例 #1
0
    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)
コード例 #2
0
ファイル: maven.py プロジェクト: pritishmishra/xmake
 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))
コード例 #3
0
ファイル: maven.py プロジェクト: pritishmishra/xmake
 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))
コード例 #4
0
ファイル: maven.py プロジェクト: pritishmishra/xmake
    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'
コード例 #5
0
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)
コード例 #6
0
    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)
コード例 #7
0
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)
コード例 #8
0
ファイル: maven.py プロジェクト: pritishmishra/xmake
    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"]))
コード例 #9
0
    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)
コード例 #10
0
ファイル: test_log.py プロジェクト: pritishmishra/xmake
    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'])
コード例 #11
0
ファイル: test_helpers.py プロジェクト: pritishmishra/xmake
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
コード例 #12
0
    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)
コード例 #13
0
    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)
コード例 #14
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)
コード例 #15
0
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)
コード例 #16
0
ファイル: test_config.py プロジェクト: pritishmishra/xmake
    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]]
コード例 #17
0
ファイル: test_config.py プロジェクト: pritishmishra/xmake
    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]]
コード例 #18
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)