def cmd_export(args): from contexo import ctx_cmod from contexo import ctx_base from contexo import ctx_envswitch from contexo.ctx_depmgr import CTXDepMgr from contexo.ctx_export import CTXExportData envLayout = None oldEnv = None if args.env != None: envLayout = EnvironmentLayout( cfgFile, args.env ) oldEnv = switchEnvironment( envLayout, True ) # Prepare all cview = ctx_view.CTXView( args.view, getAccessPolicy(args), validate=bool(args.repo_validation) ) bc = getBuildConfiguration( cview, args ) deprecated_tolerate_missing_headers_warning(args) depmgr = CTXDepMgr ( cview.getItemPaths('modules'), args.fail_on_missing_headers, bc.getArchPath() ) session = ctx_base.CTXBuildSession( bc ) session.setDependencyManager( depmgr ) export_items = expand_list_files( cview, args.export_items ) # Make sure we have only one type of item to export component_export = True for item in export_items: if item.endswith( '.comp' ): if component_export == False: userErrorExit("An export operation can either export a list of components OR a list of modules, not both.") else: component_export = False components = list() main_modules = list() # Excluding dependency modules if component_export: # Construct and validate component objects components = create_components( export_items, cview.getItemPaths('comp') ) for comp in components: for library, compmodules in comp.libraries.items(): depmgr.addCodeModules( compmodules, args.tests ) main_modules.extend( compmodules ) else: main_modules = export_items # Divert modules into main modules and dependency modules export_modules = depmgr.getCodeModulesWithDependencies() if args.deps else main_modules export_modules.sort() dep_modules = set(export_modules) - set(main_modules) ctx_modules = depmgr.createCodeModules( main_modules, args.tests ) ctx_modules.extend ( depmgr.createCodeModules( dep_modules ) ) module_map = dict() for mod in ctx_modules: module_map[mod.getName()] = mod depmgr.updateDependencyHash() # Dispatch export data to handler (through pipe) package = CTXExportData() package.setExportData( module_map, components, args.tests, session, depmgr, cview, envLayout, args ) package.dispatch() # Restore environment if args.env != None: switchEnvironment( oldEnv, False )