예제 #1
0
    def verify(self, logversion=True):
        result = True

        if not os.path.isdir(self._local_repo_root_path):
            self.logger.error("no dir for Git Dependency")
            result = False

        if result and len(os.listdir(self._local_repo_root_path)) == 0:
            self.logger.error("no files in Git Dependency")
            result = False

        if result:
            # valid repo folder
            r = Repo(self._local_repo_root_path)
            if(not r.initalized):
                self.logger.error("Git Dependency: Not Initialized")
                result = False
            elif(r.dirty):
                self.logger.error("Git Dependency: dirty")
                result = False

            if(r.head.commit != self.version):
                self.logger.error(f"Git Dependency: head is {r.head.commit} and version is {self.version}")
                result = False

        self.logger.debug("Verify '%s' returning '%s'." % (self.name, result))
        if(logversion):
            VersionAggregator.GetVersionAggregator().ReportVersion(self.name, self.version,
                                                                   VersionAggregator.VersionTypes.INFO)
        return result
    def verify(self):
        result = True
        state_data = None

        # See whether or not the state file exists.
        if not os.path.isfile(self.state_file_path):
            result = False

        # Attempt to load the state file.
        if result:
            with open(self.state_file_path, 'r') as file:
                try:
                    state_data = yaml.safe_load(file)
                except Exception:
                    pass
        if state_data is None:
            result = False

        # If loaded, check the version.
        if result and state_data['version'] != self.version:
            result = False

        logging.debug("Verify '%s' returning '%s'." % (self.name, result))
        VersionAggregator.GetVersionAggregator().ReportVersion(
            self.name, self.version, VersionAggregator.VersionTypes.INFO)
        return result
예제 #3
0
    def ToolsDefConfigure(self):
        Tag = self.env.GetValue("TOOL_CHAIN_TAG")
        VersionAggregator.GetVersionAggregator().ReportVersion(
            "TOOL_CHAIN_TAG", Tag, VersionAggregator.VersionTypes.TOOL)
        if (Tag is not None) and (Tag.upper().startswith("VSLATEST")):
            p1 = None
            self.Logger.debug("Must find latest VS toolchain")
            for p in [None, "Microsoft.VisualStudio.Product.BuildTools", "*"]:
                (rc, path) = FindWithVsWhere(p)
                if rc == 0 and path is not None:
                    self.Logger.debug("Found VS instance using products = %s",
                                      p)
                    p1 = path
                    break
                elif (rc != 0):
                    self.Logger.error(
                        "Failed in VsWhere %d to get install dir" % rc)
            if (p1 is None):
                self.Logger.critical("Failed to find valid VSLatest instance")
                return -6

            self.Logger.debug("VS150INSTALLPATH is %s" % p1)
            os.environ["VS150INSTALLPATH"] = p1
            # now get vc version
            p2 = os.path.join(p1, "VC", "Tools", "MSVC")
            if not os.path.isdir(p2):
                self.Logger.critical(
                    "Failed to find VC tools.  Might need to check for VS install"
                )
                return -5
            newest = os.listdir(p2)[-1]  # get last in list
            self.Logger.debug("VS150TOOLVER is %s" % newest)
            os.environ["VS150TOOLVER"] = newest.strip()
        else:
            self.Logger.debug("Tool Chain Tag not set or not vs latest")

        #
        # If environment specified VS15TOOLVER directly or was set above log the version
        if "VS150TOOLVER" in os.environ:
            VersionAggregator.GetVersionAggregator().ReportVersion(
                "VS Tools", os.environ["VS150TOOLVER"],
                VersionAggregator.VersionTypes.TOOL)

        return 0
def minimum_env_init(my_workspace_path, my_project_scope):
    # TODO: Check the Git version against minimums.

    # Check the Python version against minimums.
    cur_py = "%d.%d.%d" % sys.version_info[:3]
    VersionAggregator.GetVersionAggregator().ReportVersion(
        "Python", cur_py, VersionAggregator.VersionTypes.TOOL)

    soft_min_py = "3.7"
    hard_min_py = "3.6"

    if version_compare(hard_min_py, cur_py) > 0:
        raise RuntimeError(
            "Please upgrade Python! Current version is %s. Minimum is %s." %
            (cur_py, hard_min_py))
    if version_compare(soft_min_py, cur_py) > 0:
        logging.error(
            "Please upgrade Python! Current version is %s. Recommended minimum is %s."
            % (cur_py, soft_min_py))

    return_buffer = StringIO()
    RunCmd("git", "--version", outstream=return_buffer)
    git_version = return_buffer.getvalue().strip()
    return_buffer.close()
    VersionAggregator.GetVersionAggregator().ReportVersion(
        "Git", git_version, VersionAggregator.VersionTypes.TOOL)
    min_git = "2.11.0"
    # This code is highly specific to the return value of "git version"...
    cur_git = ".".join(git_version.split(' ')[2].split(".")[:3])
    if version_compare(min_git, cur_git) > 0:
        raise RuntimeError(
            "Please upgrade Git! Current version is %s. Minimum is %s." %
            (cur_git, min_git))

    # Initialized the build environment.
    return SelfDescribingEnvironment.BootstrapEnvironment(
        my_workspace_path, my_project_scope)
        def do_report(self, thebuilder):
            try:
                from MuEnvironment import VersionAggregator
            except ImportError:
                logging.critical(
                    "Loading BuildToolsReportGenerator failed, please update mu_environment pip module"
                )
                return 0

            OutputReport = os.path.join(
                thebuilder.env.GetValue("BUILD_OUTPUT_BASE"),
                "BUILD_TOOLS_REPORT")
            OutputReport = os.path.normpath(OutputReport)
            if not os.path.isdir(os.path.dirname(OutputReport)):
                os.makedirs(os.path.dirname(OutputReport))

            Report = BuildToolsReport()
            Report.MakeReport(VersionAggregator.GetVersionAggregator().
                              GetAggregatedVersionInformation(),
                              OutputReport=OutputReport)
def display_pip_package_info(package_list):
    for package in package_list:
        version = pkg_resources.get_distribution(package).version
        logging.info("{0} version: {1}".format(package, version))
        VersionAggregator.GetVersionAggregator().ReportVersion(
            package, version, VersionAggregator.VersionTypes.TOOL)
예제 #7
0
    def __PopulateConf(self, OverrideConf, AdditionalTemplateConfDir):
        ws = self.env.GetValue("WORKSPACE")
        # Copy Conf template files to conf if not present
        target = os.path.join(ws, "Conf", "target.txt")
        buildrules = os.path.join(ws, "Conf", "build_rule.txt")
        toolsdef = os.path.join(ws, "Conf", "tools_def.txt")

        # BaseTools Template files
        target_template = os.path.join("Conf", "target.template")
        tools_def_template = os.path.join("Conf", "tools_def.template")
        build_rules_template = os.path.join("Conf", "build_rule.template")

        outfiles = [target, toolsdef, buildrules]
        tfiles = [target_template, tools_def_template, build_rules_template]

        # check if conf exists
        if (not os.path.isdir(os.path.join(ws, "Conf"))):
            os.mkdir(os.path.join(ws, "Conf"))

        x = 0
        while (x < len(outfiles)):
            # check if the conf file already exists
            # don't overwrite if exists.  Popup if version is older in conf
            TemplateFilePath = ""
            Tag = self.env.GetValue("TOOL_CHAIN_TAG")

            if Tag is None:
                Tag = ""

            #
            # Get the Override template if it exist
            #
            if (AdditionalTemplateConfDir is not None):
                fp = os.path.join(AdditionalTemplateConfDir, tfiles[x] + ".ms")
                if os.path.isfile(fp):
                    TemplateFilePath = fp

            #
            # If not found, try toolchain specific templates templates
            #
            if (TemplateFilePath == "" and Tag.startswith("VS")):
                fp = os.path.join(self.env.GetValue("EDK2_BASE_TOOLS_DIR"),
                                  tfiles[x] + ".vs")
                if os.path.isfile(fp):
                    TemplateFilePath = fp

            if (TemplateFilePath == "" and Tag.startswith("GCC")):
                fp = os.path.join(self.env.GetValue("EDK2_BASE_TOOLS_DIR"),
                                  tfiles[x] + ".gcc")
                if os.path.isfile(fp):
                    TemplateFilePath = fp

            #
            # If not found above try MS templates
            #
            if (TemplateFilePath == ""):
                fp = os.path.join(self.env.GetValue("EDK2_BASE_TOOLS_DIR"),
                                  tfiles[x] + ".ms")
                if os.path.isfile(fp):
                    TemplateFilePath = fp

            #
            # If not found above try TianoCore Template
            #
            if (TemplateFilePath == ""):
                fp = os.path.join(self.env.GetValue("EDK2_BASE_TOOLS_DIR"),
                                  tfiles[x])
                if TemplateFilePath == "" and os.path.isfile(fp):
                    TemplateFilePath = fp

            #
            # Check to see if found yet -- No more options so now we are broken
            #
            if (TemplateFilePath == ""):
                self.Logger.critical("Failed to find Template file for %s" %
                                     outfiles[x])
                raise Exception("Template File Missing", outfiles[x])
            else:
                self.Logger.debug("Conf file template: [%s]", TemplateFilePath)

            # Check to see if we need the template
            if (not os.path.isfile(outfiles[x])):
                # file doesn't exist.  copy template
                self.Logger.debug(
                    "%s file not found.  Creating from Template file %s" %
                    (outfiles[x], TemplateFilePath))
                shutil.copy2(TemplateFilePath, outfiles[x])

            elif (OverrideConf):
                self.Logger.debug("%s file replaced as requested" %
                                  outfiles[x])
                shutil.copy2(TemplateFilePath, outfiles[x])
            else:
                # Both file exists.  Do a quick version check
                if (self.__OlderVersion(outfiles[x], TemplateFilePath)):
                    # Conf dir is older.  Warn user.
                    self.Logger.critical(
                        "Conf file [%s] out-of-date.  Please update your conf files!  "
                        "Sleeping 30 seconds to encourage update....",
                        outfiles[x])
                    time.sleep(30)
                else:
                    self.Logger.debug("Conf file [%s] up-to-date", outfiles[x])
            VersionAggregator.GetVersionAggregator().ReportVersion(
                outfiles[x], self.__GetVersion(outfiles[x]),
                VersionAggregator.VersionTypes.INFO)
            x = x + 1