diff --git a/core/vendors.py b/core/vendors.py index 05c093cb..7b2d1b21 100644 --- a/core/vendors.py +++ b/core/vendors.py @@ -210,6 +210,7 @@ def __init__(self, task_id, project_id, target, files): # 检查列表 self.get_vendor_file() self.exist_file_list = list(set(self.exist_file_list)) + self.exist_file_list = sorted(self.exist_file_list, key=lambda i:len(i)) if len(self.exist_file_list): self.check_vendor() @@ -271,6 +272,8 @@ def check_vendor(self): f.seek(0, os.SEEK_SET) savefilepath = filepath.replace(self.target_path, "").replace('\\', '/') + logger.info("[Vendor] Parse File {}.".format(savefilepath)) + if filename == "requirements.txt": for line in f: @@ -365,8 +368,29 @@ def check_vendor(self): default_version = "unknown" project_version = "unknown" for parent in parents: + project_groupid = parent.getchildren()[0].text + project_artifactId = parent.getchildren()[1].text project_version = parent.getchildren()[2].text + # project version 格式检查 + var_reg = "\${([\w\.\_-]+)}" + if re.search(var_reg, project_version, re.I): + p2 = re.compile(var_reg) + matchs = p2.finditer(project_version) + + for match in matchs: + varname = match.group(1) + + if varname in self.java_temp_vendor_list: + project_version = self.java_temp_vendor_list[varname] + continue + + # project 依赖版本也可以加入全局表 + vendor_name = "{}.{}".format(project_groupid, project_artifactId) + self.java_temp_vendor_list[vendor_name] = project_version + update_and_new_project_vendor(self.project_id, name=vendor_name, version=project_version, + language=language, source=savefilepath, ext=ext) + # 匹配通用配置 if pom_ns: java_base_xpath_reg = ".//{%s}properties" % pom_ns @@ -380,6 +404,12 @@ def check_vendor(self): for btag in btags: self.java_temp_vendor_list[btag.tag.replace("{%s}" % pom_ns, "")] = btag.text + # 全局表 + vendor_name = btag.tag.replace("{%s}" % pom_ns, "") + self.java_temp_vendor_list[vendor_name] = btag.text + update_and_new_project_vendor(self.project_id, name=vendor_name, version=btag.text, + language=language, source=savefilepath, ext=ext) + # 匹配dependency if pom_ns: xpath_reg = ".//{%s}dependency" % pom_ns @@ -396,7 +426,7 @@ def check_vendor(self): version = default_version var_reg = "\${([\w\.\_-]+)}" - if re.search(var_reg, version, re.I) and version == default_version: + if re.search(var_reg, version, re.I): p2 = re.compile(var_reg) matchs = p2.finditer(version) @@ -433,6 +463,8 @@ def check_vendor(self): vendor_version = version ext = "mevan" + logger.debug("[Vendor][pom.xml] Found Vendor {} vension {} in file {}".format(vendor_name, vendor_version, savefilepath)) + update_and_new_project_vendor(self.project_id, name=vendor_name, version=vendor_version, language=language, source=savefilepath, ext=ext) diff --git a/web/index/models.py b/web/index/models.py index e3f94db2..75ec5870 100644 --- a/web/index/models.py +++ b/web/index/models.py @@ -111,7 +111,7 @@ def update_and_new_project_vendor(project_id, name, version, language, source=No vendor = ProjectVendors.objects.filter(project_id=project_id, hash=hash).first() if vendor: - if vendor.version != version: + if vendor.version != version and version != 'unknown': logger.debug("[Vendors] Component {} update to version {}".format(name, version)) vendor.version = version