+ # =====================================================================
+ # Load the PROJECTS
+ projects_cfg = src.pyconf.Config()
+ projects_cfg.addMapping("PROJECTS",
+ src.pyconf.Mapping(projects_cfg),
+ "The projects\n")
+ projects_cfg.PROJECTS.addMapping("projects",
+ src.pyconf.Mapping(cfg.PROJECTS),
+ "The projects definition\n")
+
+ for project_pyconf_path in cfg.PROJECTS.project_file_paths:
+ if not os.path.exists(project_pyconf_path):
+ msg = _("WARNING: The project file %s cannot be found. "
+ "It will be ignored\n" % project_pyconf_path)
+ sys.stdout.write(src.printcolors.printcWarning(msg))
+ continue
+ project_name = os.path.basename(
+ project_pyconf_path)[:-len(".pyconf")]
+ try:
+ project_pyconf_dir = os.path.dirname(project_pyconf_path)
+ project_cfg = src.pyconf.Config(open(project_pyconf_path),
+ PWD=("", project_pyconf_dir))
+ except Exception as e:
+ raise src.SatException(_("Error in configuration file: "
+ "%(file_path)s\n %(error)s") % \
+ {'file_path' : project_pyconf_path, 'error': str(e) })
+ projects_cfg.PROJECTS.projects.addMapping(project_name,
+ src.pyconf.Mapping(projects_cfg.PROJECTS.projects),
+ "The %s project\n" % project_name)
+ projects_cfg.PROJECTS.projects[project_name]=project_cfg
+ projects_cfg.PROJECTS.projects[project_name]["file_path"] = \
+ project_pyconf_path
+
+ merger.merge(cfg, projects_cfg)
+
+ # apply overwrite from command line if needed
+ for rule in self.get_command_line_overrides(options, ["PROJECTS"]):
+ exec('cfg.' + rule) # this cannot be factorized because of the exec
+
+ # =====================================================================
+ # Create the paths where to search the application configurations,
+ # the product configurations, the products archives,
+ # the jobs configurations and the machines configurations
+ cfg.addMapping("PATHS", src.pyconf.Mapping(cfg), "The paths\n")
+ cfg.PATHS["APPLICATIONPATH"] = src.pyconf.Sequence(cfg.PATHS)
+ cfg.PATHS.APPLICATIONPATH.append(cfg.VARS.personal_applications_dir, "")
+
+ cfg.PATHS["PRODUCTPATH"] = src.pyconf.Sequence(cfg.PATHS)
+ cfg.PATHS.PRODUCTPATH.append(cfg.VARS.personal_products_dir, "")
+ cfg.PATHS["ARCHIVEPATH"] = src.pyconf.Sequence(cfg.PATHS)
+ cfg.PATHS.ARCHIVEPATH.append(cfg.VARS.personal_archives_dir, "")
+ cfg.PATHS["JOBPATH"] = src.pyconf.Sequence(cfg.PATHS)
+ cfg.PATHS.JOBPATH.append(cfg.VARS.personal_jobs_dir, "")
+ cfg.PATHS["MACHINEPATH"] = src.pyconf.Sequence(cfg.PATHS)
+ cfg.PATHS.MACHINEPATH.append(cfg.VARS.personal_machines_dir, "")
+ # Loop over the projects in order to complete the PATHS variables
+ for project in cfg.PROJECTS.projects:
+ for PATH in ["APPLICATIONPATH",
+ "PRODUCTPATH",
+ "ARCHIVEPATH",
+ "JOBPATH",
+ "MACHINEPATH"]:
+ if PATH not in cfg.PROJECTS.projects[project]:
+ continue
+ cfg.PATHS[PATH].append(cfg.PROJECTS.projects[project][PATH], "")
+
+ # apply overwrite from command line if needed
+ for rule in self.get_command_line_overrides(options, ["PATHS"]):
+ exec('cfg.' + rule) # this cannot be factorized because of the exec
+
+ # =====================================================================
+ # Load product config files in PRODUCTS section
+ products_cfg = src.pyconf.Config()
+ products_cfg.addMapping("PRODUCTS",
+ src.pyconf.Mapping(products_cfg),
+ "The products\n")
+ src.pyconf.streamOpener = ConfigOpener(cfg.PATHS.PRODUCTPATH)
+ for products_dir in cfg.PATHS.PRODUCTPATH:
+ # Loop on all files that are in softsDir directory
+ # and read their config
+ for fName in os.listdir(products_dir):
+ if fName.endswith(".pyconf"):
+ pName = fName[:-len(".pyconf")]
+ if pName in products_cfg.PRODUCTS:
+ continue
+ try:
+ prod_cfg = src.pyconf.Config(open(
+ os.path.join(products_dir,
+ fName)),
+ PWD=("", products_dir))
+ except src.pyconf.ConfigError as e:
+ raise src.SatException(_(
+ "Error in configuration file: %(prod)s\n %(error)s") % \
+ {'prod' : fName, 'error': str(e) })
+ except IOError as error:
+ e = str(error)
+ raise src.SatException( e );
+ except Exception as e:
+ raise src.SatException(_(
+ "Error in configuration file: %(prod)s\n %(error)s") % \
+ {'prod' : fName, 'error': str(e) })
+
+ products_cfg.PRODUCTS[pName] = prod_cfg
+
+ merger.merge(cfg, products_cfg)
+
+ # apply overwrite from command line if needed
+ for rule in self.get_command_line_overrides(options, ["PRODUCTS"]):
+ exec('cfg.' + rule) # this cannot be factorized because of the exec
+