同步操作将从 悬镜安全/OpenSCA-cli 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package pythonimport (_ "embed""encoding/json""os""os/exec""path""strings""util/logs""util/model""util/temp")//go:embed oss.pyvar ossPy []byte// oss.py 脚本输出的依赖结构type setupDep struct {Name string `json:"name"`Version string `json:"version"`License string `json:"license"`Packages []string `json:"packages"`InstallRequires []string `json:"install_requires"`Requires []string `json:"requires"`}// parseSetup 解析 setup.py 文件func parseSetup(root *model.DepTree, file *model.FileInfo) {temp.DoInTempDir(func(tempdir string) {ossfile := path.Join(tempdir, "oss.py")setupfile := path.Join(tempdir, "setup.py")// 创建 oss.pyif err := os.WriteFile(ossfile, ossPy, 0444); err != nil {logs.Warn(err)return}// 创建 setup.pyif err := os.WriteFile(setupfile, file.Data, 0444); err != nil {logs.Warn(err)return}// 解析 setup.pycmd := exec.Command("python", ossfile, setupfile)out, _ := cmd.CombinedOutput()startTag, endTag := `oss_start<<`, `>>oss_end`startIndex, endIndex := strings.Index(string(out), startTag), strings.Index(string(out), endTag)if startIndex == -1 || endIndex == -1 {return} else {out = out[startIndex+len(startTag) : endIndex]}// 获取解析结果var dep setupDepif err := json.Unmarshal(out, &dep); err != nil {logs.Warn(err)}root.Name = dep.Nameroot.Version = model.NewVersion(dep.Version)root.Licenses = append(root.Licenses, dep.License)for _, pkg := range [][]string{dep.Packages, dep.InstallRequires, dep.Requires} {for _, p := range pkg {index := strings.IndexAny(p, "=<>")sub := model.NewDepTree(root)if index > -1 {sub.Name = p[:index]sub.Version = model.NewVersion(p[index:])} else {sub.Name = p}}}})}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。