From 5185d248960b5f4773cbea9d237e8c2f27e7e2a0 Mon Sep 17 00:00:00 2001
From: zhangjianjun_code <7844966+zhangjianjun_code@user.noreply.gitee.com>
Date: Wed, 30 Sep 2020 14:09:26 +0800
Subject: [PATCH 1/5] 1. Bugs occurred during the self-test; 2. Code
optimization, including local variables, logic flow, etc.
---
conf/app.conf | 6 +-
controllers/hook.go | 40 +++++--
doc/md/manual.md | 10 +-
go.mod | 2 +-
main.go | 7 +-
models/cve.go | 10 ++
models/giteeissue.go | 62 ++++++++---
models/initdb.go | 4 +
models/issue.go | 8 +-
task/inittask.go | 2 +-
taskhandler/common.go | 213 ++++++++++++++++++++++---------------
taskhandler/createissue.go | 35 +++++-
taskhandler/cve.go | 93 ++++++++++------
tests/conf/app.conf | 107 +++++++++++++++++++
tests/createrepo_test.go | 55 +++++++++-
tests/giteeissue_test.go | 20 ++++
tests/grabissue_test.go | 7 +-
tests/issue_test.go | 48 +++++++++
util/parsepayload.go | 113 +++++++++++++-------
19 files changed, 641 insertions(+), 201 deletions(-)
create mode 100644 tests/conf/app.conf
create mode 100644 tests/giteeissue_test.go
create mode 100644 tests/issue_test.go
diff --git a/conf/app.conf b/conf/app.conf
index 490092f..634471b 100644
--- a/conf/app.conf
+++ b/conf/app.conf
@@ -46,9 +46,9 @@ ymalflag = 2
getymal = 00 00 23 * * *
cveflag = 1
getcve = 00 00 01 * * *
-oricveflag = 1
+oricveflag = 2
oricvecheck = 00 00 02 * * *
-getissueflag = 1
+getissueflag = 2
getissue = 00 00 03 * * *
issueflag = 1
createissue = * * 01 * * *
@@ -67,7 +67,7 @@ prcnum = 100
#email = 1499273991@qq.com
#redirect_uri = http://119.8.126.102:80/v1/issue/oauth/callback
# -------jianjun gitee 配置 --------
-owner = zhangjianjun_code
+owner = cve-test
path = jasper
email = 7844966+zhangjianjun_code@user.noreply.gitee.com
redirect_uri = http://159.138.2.2:80/v1/issue/oauth/callback
diff --git a/controllers/hook.go b/controllers/hook.go
index 17d8425..c8576c8 100644
--- a/controllers/hook.go
+++ b/controllers/hook.go
@@ -310,7 +310,9 @@ func analysisComment(issueNum string, cuAccount string, cBody string, payload *m
issueTmp.OpenEulerVector = v
cols = append(cols, k)
case "affected_version":
- issueTmp.AffectedVersion = v
+ if v != "" && len(v) > 1 {
+ issueTmp.AffectedVersion = v
+ }
cols = append(cols, k)
case "solution":
issueTmp.Solution = v
@@ -461,7 +463,7 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok
tbContent[1] = "openEulerScore"
tbContent[2] = i.OpenEulerScore
}
- if i.CveAnalysis == "" {
+ if util.TrimString(i.CveAnalysis) == "" {
msg = fmt.Sprintf("影响性分析说明没有填写:%v", i.CveAnalysis)
ok = false
return
@@ -477,7 +479,7 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok
return
}*/
if i.OpenEulerVector == "" {
- msg = fmt.Sprintf("OpenEulerVector没有填写:%v", i.OpenEulerVector)
+ msg = fmt.Sprintf("openEulerVector没有填写:%v", i.OpenEulerVector)
ok = false
return
} else {
@@ -486,11 +488,35 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok
tbContent[8] = util.TrimStringNR(i.OpenEulerVector)
}
if i.AffectedVersion != "" {
- tbContent[9] = "已分析"
- tbContent[10] = "受影响版本排查"
- tbContent[11] = util.TrimStringNR(i.AffectedVersion)
+ versionfFlag := true
+ affectedVersionArry := strings.Split(i.AffectedVersion, ",")
+ if len(affectedVersionArry) > 0 {
+ for _, affect := range affectedVersionArry {
+ versionArry := strings.Split(affect, ":")
+ if len(versionArry) > 1 {
+ if versionArry[1] == "受影响" || versionArry[1] == "不受影响" {
+ continue
+ } else {
+ versionfFlag = false
+ break
+ }
+ } else {
+ versionfFlag = false
+ break
+ }
+ }
+ }
+ if versionfFlag {
+ tbContent[9] = "已分析"
+ tbContent[10] = "受影响版本排查"
+ tbContent[11] = util.TrimStringNR(i.AffectedVersion)
+ } else {
+ tbContent[9] = "待分析"
+ tbContent[10] = "受影响版本排查"
+ tbContent[11] = util.TrimStringNR(i.AffectedVersion)
+ }
} else {
- tbContent[9] = "待分析"
+ tbContent[9] = "已分析"
tbContent[10] = "受影响版本排查"
tbContent[11] = ""
}
diff --git a/doc/md/manual.md b/doc/md/manual.md
index 34d4967..027b9b7 100644
--- a/doc/md/manual.md
+++ b/doc/md/manual.md
@@ -10,7 +10,9 @@ issue分析注意事项
- 分析issue模板并拷贝以下内容在**评论区回复**:
```batch
影响性分析说明:
- openEuler评分:
+ openEuler评分: (评分和向量)
+ openEulerScore:
+ openEulerVector:
受影响版本排查(受影响/不受影响):
1.openEuler-20.03-LTS:
2.openEuler-20.09:
@@ -34,9 +36,9 @@ issue分析注意事项
|-----|----------------|------------------------|
| 已分析 | openEulerScore | 6.0 |
| 已分析 | 影响性分析说明 | 您分析的内容 |
- | 已分析 | OpenEulerVector | AV:A/AC:C... |
+ | 已分析 | openEulerVector | AV:A/AC:C... |
| 已分析 | 受影响的版本 | openEuler-20.03-LTS:受影响 |
- **因OpenEulerScore与NvdScore不一致,分析内容需审核,请等待审核**
+ **因openEulerScore与NvdScore不一致,分析内容需审核,请等待审核**
2.评分一致
@@ -44,7 +46,7 @@ issue分析注意事项
|-----|----------------|------------------------|
| 已分析 | openEulerScore | 6.0 |
| 已分析 | 影响性分析说明 | 您分析的内容 |
- | 已分析 | OpenEulerVector | AV:A/AC:C... |
+ | 已分析 | openEulerVector | AV:A/AC:C... |
| 已分析 | 受影响的版本 | openEuler-20.03-LTS:受影响 |
**请确认分析内容的准确性,确认无误后,您可以进行后续步骤或您可以继续分析。**
- 评分不一致则需等待审核员审核后进行下一步 **否则将视为无效分析将不可导出**
diff --git a/go.mod b/go.mod
index 157bff7..e6dd210 100644
--- a/go.mod
+++ b/go.mod
@@ -3,6 +3,7 @@ module cvevulner
go 1.14
require (
+ github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0
github.com/astaxie/beego v1.12.2
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/go-sql-driver/mysql v1.5.0
@@ -13,5 +14,4 @@ require (
golang.org/x/sys v0.0.0-20200819091447-39769834ee22 // indirect
golang.org/x/text v0.3.2 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
- github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0
)
diff --git a/main.go b/main.go
index 2991512..be8a6b5 100644
--- a/main.go
+++ b/main.go
@@ -2,23 +2,24 @@ package main
import (
"cvevulner/common"
- "cvevulner/models"
+ _"cvevulner/models"
_ "cvevulner/routers"
"cvevulner/task"
"github.com/astaxie/beego"
)
+
func init() {
// 初始化全局变量
common.InitGlobal()
// 初始化日志
common.LogInit()
// 初始化数据库
- models.Initdb()
+ //models.Initdb()
// 初始化定时任务
task.InitTask()
// test 后续删除
- //test.Init()
+ //tests.Init()
}
diff --git a/models/cve.go b/models/cve.go
index c05f152..9a158dd 100644
--- a/models/cve.go
+++ b/models/cve.go
@@ -557,6 +557,16 @@ func QueryOpenSaLastId() (OpenEulerSA, error) {
return os, err
}
+func QueryOpenSaById(cveId int64) (OpenEulerSA, error) {
+ o := orm.NewOrm()
+ var os OpenEulerSA
+ err := o.Raw("select openeuler_id, openeuler_sa_num from cve_open_euler_s_a where cve_id = ?", cveId).QueryRow(&os)
+ if err == nil {
+ logs.Info("OpenEulerSA 查询结果:", os)
+ }
+ return os, err
+}
+
func UpdateOriginStatus(updateTime, pakName, version string, cveId int64, status int) bool {
o := orm.NewOrm()
res, err := o.Raw("UPDATE cve_origin_upstream SET "+
diff --git a/models/giteeissue.go b/models/giteeissue.go
index 4c41073..86ba822 100644
--- a/models/giteeissue.go
+++ b/models/giteeissue.go
@@ -5,9 +5,9 @@ import (
"errors"
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/orm"
+ "strings"
)
-
//Loophole issue body model
type Loophole struct {
Number string //编号
@@ -77,6 +77,13 @@ func (g *GiteOriginIssue) InsertOrUpdate() error {
return err
}
+func GetGiteOriginIssue(cveNum string) (oi GiteOriginIssue, err error) {
+ o := orm.NewOrm()
+ oi.CveNumber = cveNum
+ err = o.Read(&oi, "cve_number")
+ return
+}
+
func (g *GiteOriginIssue) ParseToLoophole() (hole Loophole, err error) {
lp := Loophole{}
if g.Body == "" {
@@ -117,7 +124,7 @@ func (v *VectorValue) VctToVectorValue(vector string) bool {
return true
}
-func (v *VectorValueV2) VctToVectorValue(vector string) bool {
+func (v *VectorValueV2) VctToVectorValue(vector string) bool {
if util.TrimString(vector) == "" {
return false
}
@@ -168,12 +175,22 @@ func parseOldTplToLoopHole(lp *Loophole, body string) {
lp.Number = util.GetCveNumber(util.TrimString(val))
}
sm = util.RegexpCveComponents.FindAllStringSubmatch(body, -1)
- if len(sm) > 0 && len(sm[0]) > 0 {
- lp.Components = util.TrimString(sm[0][1])
+ if len(sm) > 0 && len(sm[0]) > 1 {
+ for _, v := range sm[0][1:] {
+ if v != "" {
+ lp.Components = util.TrimString(v)
+ break
+ }
+ }
}
- sm = util.RegexpCveVersion.FindAllStringSubmatch(body, -1)
- if len(sm) > 0 && len(sm[0]) > 0 {
- lp.Version = util.TrimString(sm[0][1])
+ sm = util.RegexpCveVersion.FindAllStringSubmatch(body, 1)
+ if len(sm) > 0 && len(sm[0]) > 1 {
+ for _, v := range sm[0][1:] {
+ if v != "" {
+ lp.Version = util.TrimString(v)
+ break
+ }
+ }
}
sm = util.RegexpCveScore.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
@@ -240,12 +257,26 @@ func parseNewTplToLoopHole(lp *Loophole, body string) {
val := sm[0][1]
lp.Number = util.GetCveNumber(util.TrimString(val))
}
- if len(sm) > 0 && len(sm[0]) > 0 {
- lp.Components = util.TrimString(sm[0][1])
+
+ sm = util.RegexpCveComponents.FindAllStringSubmatch(body, -1)
+ if len(sm) > 0 && len(sm[0]) > 1 {
+ for _, v := range sm[0][1:] {
+ if v != "" {
+ lp.Components = util.TrimString(v)
+ break
+ }
+ }
}
- sm = util.RegexpCveVersion.FindAllStringSubmatch(body, -1)
- if len(sm) > 0 && len(sm[0]) > 0 {
- lp.Version = util.TrimString(sm[0][1])
+
+ sm = util.RegexpCveVersion.FindAllStringSubmatch(body, 1)
+ if len(sm) > 0 && len(sm[0]) > 1 {
+ for _, v := range sm[0][1:] {
+ if v != "" {
+ lp.Version = util.TrimString(v)
+ break
+ }
+ }
+
}
sm = util.RegexpCveScore.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
@@ -259,8 +290,8 @@ func parseNewTplToLoopHole(lp *Loophole, body string) {
}
sm = util.RegexpCveBriefDesc.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
- //lp.BriefIntroduction = util.TrimString(sm[0][1])
- lp.BriefIntroduction = sm[0][1]
+ lp.BriefIntroduction = strings.Replace(sm[0][1], "二、漏洞分析结构反馈", "", -1)
+ //lp.BriefIntroduction = sm[0][1]
}
sm = util.RegexpCveInfluencesDescNew.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
@@ -278,6 +309,7 @@ func parseNewTplToLoopHole(lp *Loophole, body string) {
}
sm = util.RegexpCveInfluencesVersionNew.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
- lp.InfVersion = util.TrimString(sm[0][1])
+ value := util.ExtractCommentEffectVersion(sm[0][1])
+ lp.InfVersion = util.TrimString(value)
}
}
diff --git a/models/initdb.go b/models/initdb.go
index 06d3737..79143c7 100644
--- a/models/initdb.go
+++ b/models/initdb.go
@@ -10,6 +10,10 @@ import (
_ "github.com/go-sql-driver/mysql"
)
+func init() {
+ Initdb()
+}
+
func Initdb() {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil{
diff --git a/models/issue.go b/models/issue.go
index df5f9d7..c66a4b7 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -256,7 +256,7 @@ func CreateDepositHooks(ih *IssueHooks) (issHookId int64, err error) {
localIh.CveId = ih.CveId
localIh.IssueNum = ih.IssueNum
errx := o.Raw("select *"+
- " from cve_issue_hooks where cve_id = ? and issue_num = ?", ih.CveId, ih.IssueNum).QueryRow(&localIh)
+ " from cve_issue_hooks where owner = ? and repo = ? and status = ?", ih.Owner, ih.Repo, ih.Status).QueryRow(&localIh)
if errx == nil {
logs.Info("cve_issue_hooks 查询结果:", localIh)
ih.Id = localIh.Id
@@ -355,3 +355,9 @@ func GetIssueTplByCveNum(num string) (list []IssueTemplate, err error) {
_, err = o.QueryTable("cve_issue_template").Filter("cve_num", num).All(&list)
return
}
+
+func GetIssueTplGroupByRepo()(list []IssueTemplate ,err error) {
+ o := orm.NewOrm()
+ _,err = o.QueryTable("cve_issue_template").GroupBy("repo").All(&list)
+ return
+}
diff --git a/task/inittask.go b/task/inittask.go
index f663e45..648bb6c 100644
--- a/task/inittask.go
+++ b/task/inittask.go
@@ -119,8 +119,8 @@ func GenSAExcelTask(genExcel string, ch *chan bool) {
//defer toolbox.StopTask()
}
+// 定时任务初始化
func InitTask() {
-
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil {
logs.Error("config init error: file:conf/app.conf: ", err)
diff --git a/taskhandler/common.go b/taskhandler/common.go
index e0f9033..8ff8d69 100644
--- a/taskhandler/common.go
+++ b/taskhandler/common.go
@@ -18,11 +18,49 @@ type GiteeToken struct {
Scope string
}
+const bodyTpl = `一、漏洞信息
+ 漏洞编号:%v
+ 漏洞归属组件:%v
+ 漏洞归属的版本:%v
+ CVSS V%v分值:
+ BaseScore:%v
+ Vector:CVSS: %v
+ 漏洞简述:
+ %v
+二、漏洞分析结构反馈
+ 影响性分析说明:
+ %v
+ openEuler评分:
+ %v
+ 受影响的版本排查(受影响/不受影响):
+ %v
+`
+
+const bodyUpTpl = `一、漏洞信息
+ 漏洞编号:%v
+ 漏洞归属组件:%v
+ 漏洞归属的版本:%v
+ CVSS V%v分值:
+ BaseScore:%v
+ Vector:CVSS: %v
+ 漏洞简述:
+ %v
+二、漏洞分析结构反馈
+ 影响性分析说明:
+ %v
+ openEuler评分:
+ %v
+ Vector:CVSS:%v
+ 受影响的版本排查(受影响/不受影响):
+ %v
+`
+
func CommentTemplate(assignee, commentCmd, affectedVersion string) string {
//commentTemplate := ""
commentTemplate := "Hey @" + assignee + "\n" +
"以下内容需要您填写, 请复制到评论区回复喔" + "\n" +
- "影响性分析说明: \n\n" + "openEuler评分: \n\n" +
+ "影响性分析说明: \n\n" + "openEuler评分: (评分和向量)\n" +
+ "openEulerScore: \n" + "openEulerVector: \n\n" +
"受影响版本排查(受影响/不受影响): \n" + affectedVersion +
"\n也可以参考: " + commentCmd + "\n"
return commentTemplate
@@ -266,28 +304,48 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
cveAnalysis = strings.Replace(its.CveAnalysis, "\n", "", -1)
//cveAnalysis = strings.Replace(cveAnalysis, "\n", "", 0)
}
+ StatusName := ""
+ if its.StatusName != "" && len(its.StatusName) > 1 {
+ if its.StatusName == "待办的" {
+ StatusName = "open"
+ } else if its.StatusName == "进行中" || strings.ToLower(its.StatusName) == "started" {
+ StatusName = "progressing"
+ } else if its.StatusName == "已完成" {
+ StatusName = "closed"
+ } else if its.StatusName == "已拒绝" {
+ StatusName = "rejected"
+ } else {
+ StatusName = its.StatusName
+ }
+ }
if flag == 1 {
if len(brandArry) > 0 {
for i, brand := range brandArry {
if brand == "" || len(brand) < 2 {
continue
}
- affectedVersion = affectedVersion + "
" + strconv.Itoa(i + 1) + "." + brand + ":"
+ affectedVersion = affectedVersion + strconv.Itoa(i+1) + "." + brand + ":\n"
}
} else {
- affectedVersion = "
" + "" + ""
+ affectedVersion = "\n"
}
if floatOpenEulerScore > 0.0 || (its.OpenEulerVector != "" && len(its.OpenEulerVector) > 1) {
- body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
- "
漏洞归属组件: " + path + "" +
- "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoretype + "分值: " +
- "
BaseScore: " + score + " " + cve.CveLevel + "" +
- "
Vector: CVSS:" + scoretype + "/" + sc.NvectorVule + "" + "
漏洞简述: " +
- "
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
- "
" + cveAnalysis + " " +
- "
openEuler评分: " + "
" + openEulerScore + "" +
- "
Vector: CVSS:" + scoretype + "/" + its.OpenEulerVector + "" +
- "
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"
+ cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
+ nveScore := score + " " + cve.CveLevel
+ nveVector := scoretype + "/" + sc.NvectorVule
+ oVector := scoretype + "/" + its.OpenEulerVector
+ body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ cve.Description, cveAnalysis, openEulerScore, oVector, affectedVersion)
+ /*body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
+ "
漏洞归属组件: " + path + "" +
+ "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoretype + "分值: " +
+ "
BaseScore: " + score + " " + cve.CveLevel + "" +
+ "
Vector: CVSS:" + scoretype + "/" + sc.NvectorVule + "" + "
漏洞简述: " +
+ "
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
+ "
" + cveAnalysis + " " +
+ "
openEuler评分: " + "
" + openEulerScore + "" +
+ "
Vector: CVSS:" + scoretype + "/" + its.OpenEulerVector + "" +
+ "
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"*/
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -297,17 +355,15 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
"assignee": "%s",
"labels": "%s",
"security_hole": "false"
- }`, accessToken, path, cve.CveNum, its.StatusName, body, assignee, labels)
+ }`, accessToken, path, cve.CveNum, StatusName, body, assignee, labels)
} else {
- body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
- "
漏洞归属组件: " + path + "" +
- "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoretype + "分值: " +
- "
BaseScore: " + score + " " + cve.CveLevel + "" +
- "
Vector: CVSS:" + scoretype + "/" + sc.NvectorVule + "" + "
漏洞简述: " +
- "
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
- "
" + cveAnalysis + " " +
- "
openEuler评分: " + "
" + "" + "" +
- "
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"
+ cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
+ nveScore := score + " " + cve.CveLevel
+ nveVector := scoretype + "/" + sc.NvectorVule
+ //oVector := scoretype + "/" + its.OpenEulerVector
+ openEulerScore = " "
+ body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ cve.Description, cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -317,7 +373,7 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
"assignee": "%s",
"labels": "%s",
"security_hole": "false"
- }`, accessToken, path, cve.CveNum, its.StatusName, body, assignee, labels)
+ }`, accessToken, path, cve.CveNum, StatusName, body, assignee, labels)
}
} else if flag == 2 {
@@ -326,19 +382,18 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
if brand == "" || len(brand) < 2 {
continue
}
- affectedVersion = affectedVersion + "
" + strconv.Itoa(i + 1) + "." + brand + ":"
+ affectedVersion = affectedVersion + strconv.Itoa(i+1) + "." + brand + ":\n"
}
} else {
- affectedVersion = "
" + "" + ""
+ affectedVersion = "\n"
}
- body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
- "
漏洞归属组件: " + path + "" +
- "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoretype + "分值: " +
- "
BaseScore: " + score + " " + cve.CveLevel + "" +
- "
Vector: CVSS:" + scoretype + "/" + sc.NvectorVule + "" + "
漏洞简述: " +
- "
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
- "
" + "
openEuler评分: " + "
" +
- "
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"
+ cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
+ nveScore := score + " " + cve.CveLevel
+ nveVector := scoretype + "/" + sc.NvectorVule
+ //oVector := scoretype + "/" + its.OpenEulerVector
+ openEulerScore = " "
+ body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ cve.Description, cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -357,25 +412,20 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
if brand == "" || len(brand) < 2 {
continue
}
- affectedVersion = affectedVersion + "
" + strconv.Itoa(i + 1) + "." + brand + ""
+ affectedVersion = affectedVersion + strconv.Itoa(i+1) + "." + brand + "\n"
}
}
} else {
- affectedVersion = "
" + "" + ""
+ affectedVersion = "\n"
}
if floatOpenEulerScore > 0.0 || (its.OpenEulerVector != "" && len(its.OpenEulerVector) > 1) {
if len(cveAnalysis) > 1 {
- body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
- "
漏洞归属组件: " + path + "" +
- "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoretype + "分值: " +
- "
BaseScore: " + score + " " + cve.CveLevel + "" +
- "
Vector: CVSS:" + scoretype + "/" + its.NVDVector + "" + "
漏洞简述: " +
- "
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
- "
" + cveAnalysis + " " +
- //cveAnalysis +
- "
openEuler评分: " + "
" + openEulerScore + "" +
- "
Vector: CVSS:" + scoretype + "/" + its.OpenEulerVector + "" +
- "
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"
+ cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
+ nveScore := score + " " + cve.CveLevel
+ nveVector := scoretype + "/" + its.NVDVector
+ oVector := scoretype + "/" + its.OpenEulerVector
+ body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ cve.Description, cveAnalysis, openEulerScore, oVector, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -385,19 +435,14 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
"assignee": "%s",
"labels": "%s",
"security_hole": "false"
- }`, accessToken, path, cve.CveNum, its.StatusName, body, its.Assignee, labels)
+ }`, accessToken, path, cve.CveNum, StatusName, body, its.Assignee, labels)
} else {
- body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
- "
漏洞归属组件: " + path + "" +
- "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoretype + "分值: " +
- "
BaseScore: " + score + " " + cve.CveLevel + "" +
- "
Vector: CVSS:" + scoretype + "/" + its.NVDVector + "" + "
漏洞简述: " +
- "
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
- "
" + cveAnalysis + " " +
- //cveAnalysis +
- "
openEuler评分: " + "
" + openEulerScore + "" +
- "
Vector: CVSS:" + scoretype + "/" + its.OpenEulerVector + "" +
- "
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"
+ cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
+ nveScore := score + " " + cve.CveLevel
+ nveVector := scoretype + "/" + its.NVDVector
+ oVector := scoretype + "/" + its.OpenEulerVector
+ body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ cve.Description, cveAnalysis, openEulerScore, oVector, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -407,21 +452,18 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
"assignee": "%s",
"labels": "%s",
"security_hole": "false"
- }`, accessToken, path, cve.CveNum, its.StatusName, body, its.Assignee, labels)
+ }`, accessToken, path, cve.CveNum, StatusName, body, its.Assignee, labels)
}
} else {
+ openEulerScore = " "
if len(cveAnalysis) > 1 {
- body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
- "
漏洞归属组件: " + path + "" +
- "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoretype + "分值: " +
- "
BaseScore: " + score + " " + cve.CveLevel + "" +
- "
Vector: CVSS:" + scoretype + "/" + its.NVDVector + "" + "
漏洞简述: " +
- "
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
- "
" + cveAnalysis + " " +
- //cveAnalysis +
- "
openEuler评分: " + "
" + "" + "" +
- "
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"
+ cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
+ nveScore := score + " " + cve.CveLevel
+ nveVector := scoretype + "/" + sc.NvectorVule
+ //oVector := scoretype + "/" + its.OpenEulerVector
+ body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ cve.Description, cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -431,17 +473,14 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
"assignee": "%s",
"labels": "%s",
"security_hole": "false"
- }`, accessToken, path, cve.CveNum, its.StatusName, body, its.Assignee, labels)
+ }`, accessToken, path, cve.CveNum, StatusName, body, its.Assignee, labels)
} else {
- body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
- "
漏洞归属组件: " + path + "" +
- "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoretype + "分值: " +
- "
BaseScore: " + score + " " + cve.CveLevel + "" +
- "
Vector: CVSS:" + scoretype + "/" + its.NVDVector + "" + "
漏洞简述: " +
- "
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
- "
" + cveAnalysis + " " +
- "
openEuler评分: " + "
" + "" + "" +
- "
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"
+ cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
+ nveScore := score + " " + cve.CveLevel
+ nveVector := scoretype + "/" + sc.NvectorVule
+ //oVector := scoretype + "/" + its.OpenEulerVector
+ body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ cve.Description, cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -451,14 +490,13 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
"assignee": "%s",
"labels": "%s",
"security_hole": "false"
- }`, accessToken, path, cve.CveNum, its.StatusName, body, its.Assignee, labels)
+ }`, accessToken, path, cve.CveNum, StatusName, body, its.Assignee, labels)
}
}
}
return requestBody
}
-
func Duplicate(a interface{}) (ret []interface{}) {
va := reflect.ValueOf(a)
for i := 0; i < va.Len(); i++ {
@@ -468,4 +506,13 @@ func Duplicate(a interface{}) (ret []interface{}) {
ret = append(ret, va.Index(i).Interface())
}
return ret
-}
\ No newline at end of file
+}
+
+
+func RemoveSubstring(s, sub string) string {
+ if strings.Contains(s, sub) {
+ return strings.ReplaceAll(s, sub, "")
+ }
+ return s
+}
+
diff --git a/taskhandler/createissue.go b/taskhandler/createissue.go
index 407b545..c166524 100644
--- a/taskhandler/createissue.go
+++ b/taskhandler/createissue.go
@@ -27,13 +27,21 @@ func CreateIssueData(issueTemp *models.IssueTemplate, cve models.VulnCenter, sc
issueTemp.IssueNum = resp["number"].(string)
issueTemp.Assignee = assignee
issueTemp.StatusName = resp["state"].(string)
- if resp["state"].(string) == "Open" {
+ if strings.ToLower(resp["state"].(string)) == "open" || resp["state"].(string) == "待办的"{
issueTemp.Status = 1
- } else if resp["state"].(string) == "Started" {
+ issueTemp.StatusName = "open"
+ } else if strings.ToLower(resp["state"].(string)) == "started" ||
+ strings.ToLower(resp["state"].(string)) == "progressing" ||
+ strings.ToLower(resp["state"].(string)) == "进行中" {
issueTemp.Status = 2
- } else if resp["state"].(string) == "Closed" {
+ issueTemp.StatusName = "progressing"
+ } else if strings.ToLower(resp["state"].(string)) == "closed" || resp["state"].(string) == "已完成"{
issueTemp.Status = 3
+ issueTemp.StatusName = "closed"
} else {
+ if strings.ToLower(resp["state"].(string)) == "rejected" || resp["state"].(string) == "已拒绝" {
+ issueTemp.StatusName = "rejected"
+ }
issueTemp.Status = 4
}
issueTemp.IssueStatus = 1
@@ -82,6 +90,14 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
// 构建数据
var issueTemp models.IssueTemplate
CreateIssueData(&issueTemp, cve, sc, resp, path, its.Assignee, issueType, labels, owner)
+ if len(brandArry) > 0 {
+ var brandArryTmp []string
+ for _, brand := range brandArry {
+ brandArryTmp = append(brandArryTmp, brand + ":")
+ }
+ brandStr := strings.Join(brandArryTmp, ",")
+ issueTemp.AffectedVersion = brandStr
+ }
// 存储issue数据
issTempId, err := models.CreateIssueTemplet(&issueTemp)
if err != nil {
@@ -129,6 +145,14 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
var issueTemp models.IssueTemplate
CreateIssueData(&issueTemp, cve, sc, resp, path, assignee, issueType, labels, owner)
// 存储issue数据
+ if len(brandArry) > 0 {
+ var brandArryTmp []string
+ for _, brand := range brandArry {
+ brandArryTmp = append(brandArryTmp, brand + ":")
+ }
+ brandStr := strings.Join(brandArryTmp, ",")
+ issueTemp.AffectedVersion = brandStr
+ }
issTempId, err := models.CreateIssueTemplet(&issueTemp)
if err != nil {
logs.Error("创建issue 模板的数据失败, cveNum: ", cve.CveNum, "err: ", err)
@@ -221,6 +245,11 @@ func UpdateIssueToGit(accessToken string, owner string, path string,
return "", nil
}
+//func UpdateCommentInfo(owner, path, issueNumber string) {
+// issueUrl := "https://gitee.com/" + owner + "/" + path + "/issues/" + issueNumber
+// util.HttpGet(issueUrl)
+//}
+
func CreateIssueHookData(issHook *models.IssueHooks, cve models.VulnCenter, resp map[string]interface{},
path, owner string, issueNum string, issueId int64) *models.IssueHooks {
issHook.CveId = cve.CveId
diff --git a/taskhandler/cve.go b/taskhandler/cve.go
index 5905622..e0beee4 100644
--- a/taskhandler/cve.go
+++ b/taskhandler/cve.go
@@ -776,11 +776,19 @@ func SyncCveVuler(cveData models.OriginExcel, cveRef string, openeulerNum int) (
models.UpdateOriginExcelStatus(common.GetCurTime(), cveData.CveId, 3)
return false, errors.New("数据错误,暂时不处理")
}
- goe, ok := models.QueryCveOpeneulerDetaildata(cveData.PackName, cveData.CveVersion)
+ god, ok := models.QueryCveOpeneulerdata(cveData.PackName, cveData.CveVersion)
if !ok {
logs.Error("仓库不存在,暂时不处理,data: ", cveData)
models.UpdateOriginExcelStatus(common.GetCurTime(), cveData.CveId, 4)
return false, errors.New("仓库不存在,暂时不处理")
+ } else {
+ logs.Info("获取到的数据: god:", god)
+ }
+ goe, ok := models.QueryCveOpeneulerDetaildata(cveData.PackName, cveData.CveVersion)
+ if !ok {
+ logs.Error("仓库存在,yaml数据源不存在,god: ", god, ", cveData: ", cveData)
+ //models.UpdateOriginExcelStatus(common.GetCurTime(), cveData.CveId, 4)
+ //return false, errors.New("仓库不存在,暂时不处理")
}
CveRes, err := models.QueryCveByNum(cveData.CveNum, cveData.PackName, cveData.CveVersion)
if err {
@@ -878,11 +886,11 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
cveStatus int8, goe models.GitPackageInfo, owner string) (bool, error) {
var vul models.VulnCenter
vul.CveNum = cveData.CveNumber
- vul.Description = lop.RepoDesc
+ vul.Description = RemoveSubstring(lop.BriefIntroduction, "
")
vul.Status = cveStatus
- vul.CveVersion = lop.Version
+ vul.CveVersion = RemoveSubstring(lop.Version, "
")
vul.RepairTime = ""
- vul.PackName = lop.Components
+ vul.PackName = cveData.RepoPath
vul.CveUrl = cveRef + cveData.CveNumber
vul.IsExport = 0
v2, cvsError := strconv.ParseFloat(lop.CvsScore, 64)
@@ -904,7 +912,7 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
sec.Status = 0
sec.AffectStatus = "UnFixed"
sec.Summary = lop.Components + " security update"
- sec.Description = goe.Decription + "\n\n" + "Security Fix(es):" + "\n\n" + lop.BriefIntroduction
+ sec.Description = goe.Decription + "\n\n" + "Security Fix(es):" + "\n\n" + RemoveSubstring(lop.BriefIntroduction, "
")
sec.ReferenceLink = cveRef + cveData.CveNumber
sec.Introduction = "An update for " + lop.Components + " is now available for " + lop.InfProduct
//sec.Summary = "An update for " + path + " is now available for " + branchs
@@ -984,12 +992,12 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
issueTemp.CveId = cveid
issueTemp.CveNum = cveData.CveNumber
issueTemp.OwnedComponent = lop.Components
- issueTemp.OwnedVersion = lop.Version
+ issueTemp.OwnedVersion = RemoveSubstring(lop.Version, "
")
issueTemp.NVDScore = nVDScore
issueTemp.OpenEulerScore = openEulerScore
issueTemp.NVDVector = lop.CvsVector
issueTemp.OpenEulerVector = lop.OpVector
- issueTemp.CveBrief = lop.BriefIntroduction
+ issueTemp.CveBrief = RemoveSubstring(lop.BriefIntroduction, "
")
issueTemp.CveAnalysis = lop.Influences
issueTemp.PrincipleAnalysis = lop.Principle
issueTemp.AffectedVersion = lop.InfVersion
@@ -1012,7 +1020,7 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
}
issueTemp.StatusName = cveData.State
issueTemp.IssueLabel = "cve/Undisclosed"
- issueTemp.Owner = cveData.RepoPath
+ issueTemp.Owner = owner
issueTemp.Repo = lop.Repo
if cveData.Title != "" {
issueTemp.Title = cveData.Title
@@ -1038,11 +1046,11 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
cveStatus int8, goe models.GitPackageInfo, vul models.VulnCenter, owner string) (bool, error) {
//var vul models.VulnCenter
vul.CveNum = cveData.CveNumber
- vul.Description = lop.RepoDesc
+ vul.Description = RemoveSubstring(lop.BriefIntroduction, "
")
vul.Status = cveStatus
- vul.CveVersion = lop.Version
+ vul.CveVersion = RemoveSubstring(lop.Version, "
")
vul.RepairTime = ""
- vul.PackName = lop.Components
+ vul.PackName = cveData.RepoPath
vul.CveUrl = cveRef + cveData.CveNumber
vul.IsExport = 0
var sec models.SecurityNotice
@@ -1051,7 +1059,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
sec.Status = 0
sec.AffectStatus = "Fixed"
sec.Summary = lop.Components + " security update"
- sec.Description = goe.Decription + "\n\n" + "Security Fix(es):" + "\n\n" + lop.BriefIntroduction
+ sec.Description = goe.Decription + "\n\n" + "Security Fix(es):" + "\n\n" + RemoveSubstring(lop.BriefIntroduction, "
")
sec.ReferenceLink = cveRef + cveData.CveNumber
sec.Introduction = "An update for " + lop.Components + " is now available for " + lop.InfProduct
//sec.Summary = "An update for " + path + " is now available for " + branchs
@@ -1179,24 +1187,38 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
accessToken := os.Getenv("GITEE_TOKEN")
CreateDepositHooks(accessToken, owner, cveData.RepoPath, vul, cveData.Number, cveData.IssueId)
}
- //var opensa models.OpenEulerSA
- ////var os models.OpenSaId
- //os, operr := models.QueryOpenSaLastId()
- //var OpenNumData int
- //if operr == nil {
- // OpenNumList := strings.Split(os.OpenEulerSANum, "-")
- // OpenNum, err := strconv.Atoi(OpenNumList[len(OpenNumList) - 1])
- // if err == nil {
- // OpenNum += 100
- // } else {
- // OpenNum = openeulernum
- // }
- // OpenNumData = OpenNum
- //} else {
- // OpenNumData = openeulernum
- //}
- //OpenEulerSANum := "openEuler-SA-" + strconv.Itoa(time.Now().Year()) + "-" + strconv.Itoa(int(OpenNumData))
- //opensa.OpenEulerSANum = OpenEulerSANum
+ osa, osaError := models.QueryOpenSaById(vul.CveId)
+ if osaError == nil && osa.OpenId > 0 {
+ sec.OpenId = osa.OpenId
+ score.OpenId = osa.OpenId
+ } else {
+ var opensa models.OpenEulerSA
+ var OpenNumData int
+ //var os models.OpenSaId
+ osx, opError := models.QueryOpenSaLastId()
+ if opError == nil {
+ OpenNumList := strings.Split(osx.OpenEulerSANum, "-")
+ OpenNum, err := strconv.Atoi(OpenNumList[len(OpenNumList)-1])
+ if err == nil {
+ OpenNum += 10
+ } else {
+ OpenNum = openeulernum
+ }
+ OpenNumData = OpenNum
+ } else {
+ OpenNumData = openeulernum
+ }
+ OpenEulerSANum := "openEuler-SA-" + strconv.Itoa(time.Now().Year()) + "-" + strconv.Itoa(int(OpenNumData))
+ opensa.OpenEulerSANum = OpenEulerSANum
+ opensa.CveId = vul.CveId
+ openId, openError := models.CreateOpenEulerSA(&opensa)
+ if openError != nil && openId == 0 {
+ logs.Error("生成openSA失败,openSA: ", opensa, ", error: ", openError)
+ return false, errors.New("数据插入失败,暂时不处理")
+ }
+ sec.OpenId = openId
+ score.OpenId = openId
+ }
cveError := models.UpdateCveRelat(&vul, &sec, &score)
if cveError != nil || vul.CveId == 0 {
@@ -1218,13 +1240,13 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
if okl && localt.TemplateId > 0 {
issueTemp.CveNum = cveData.CveNumber
issueTemp.OwnedComponent = lop.Components
- issueTemp.OwnedVersion = lop.Version
+ issueTemp.OwnedVersion = RemoveSubstring(lop.Version, "
")
openEulerScore, openError := strconv.ParseFloat(lop.OpScore, 64)
if openError == nil {
issueTemp.OpenEulerScore = openEulerScore
}
issueTemp.OpenEulerVector = lop.OpVector
- issueTemp.CveBrief = lop.BriefIntroduction
+ issueTemp.CveBrief = RemoveSubstring(lop.BriefIntroduction, "
")
issueTemp.CveAnalysis = lop.Influences
issueTemp.PrincipleAnalysis = lop.Principle
issueTemp.AffectedVersion = lop.InfVersion
@@ -1256,7 +1278,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
} else {
issueTemp.CveNum = cveData.CveNumber
issueTemp.OwnedComponent = lop.Components
- issueTemp.OwnedVersion = lop.Version
+ issueTemp.OwnedVersion = RemoveSubstring(lop.Version, "
")
issueTemp.NVDScore = nVDScore
openEulerScore, openError := strconv.ParseFloat(lop.OpScore, 64)
if openError == nil {
@@ -1264,7 +1286,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
}
issueTemp.NVDVector = lop.CvsVector
issueTemp.OpenEulerVector = lop.OpVector
- issueTemp.CveBrief = lop.BriefIntroduction
+ issueTemp.CveBrief = RemoveSubstring(lop.BriefIntroduction, "
")
issueTemp.CveAnalysis = lop.Influences
issueTemp.PrincipleAnalysis = lop.Principle
issueTemp.AffectedVersion = lop.InfVersion
@@ -1287,7 +1309,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
}
issueTemp.StatusName = cveData.State
issueTemp.IssueLabel = "cve/Undisclosed"
- issueTemp.Owner = cveData.RepoPath
+ issueTemp.Owner = owner
issueTemp.Repo = lop.Repo
if cveData.Title != "" {
issueTemp.Title = cveData.Title
@@ -1307,6 +1329,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
}
func GenCveVulerByIssue(cveData models.GiteOriginIssue, cveRef string, openeulernum int, owner string) (bool, error) {
+ defer common.Catchs()
hole, err := cveData.ParseToLoophole()
if err != nil {
logs.Error("数据解析错误,")
diff --git a/tests/conf/app.conf b/tests/conf/app.conf
new file mode 100644
index 0000000..4020e79
--- /dev/null
+++ b/tests/conf/app.conf
@@ -0,0 +1,107 @@
+appname = cvevulner
+#appname = cve_manager
+httpport = 80
+runmode = dev
+autorender = false
+copyrequestbody = true
+EnableDocs = true
+sqlconn =
+# 登录双方约定的key
+key = "${AES_KEY||djS*@+8K9{J!ymk6}"
+initdb = 1
+# 登录key
+loginkey = "{${LOGIN_KEY||djS*@+8K9{-!yo%64}"
+# token 有效期,单位:天
+token_expir_time=3
+#分析指令
+analysisCmd = "/analysis"
+endCmd = "/done"
+rejectCmd = "/reject"
+approveCmd = "/approve"
+
+
+[mysql]
+#dbhost = 127.0.0.1
+dbhost = 159.138.2.2
+dbport = 3306
+#dbuser = "${DB_USER||root}"
+dbuser = "${DB_USER||cve}"
+#dbpwd = "${DB_PWD||***}"
+dbpwd = "+KAOKtEnEn7gRlDEIjeh59lutAMw2688YOqKVJQ2+Lo="
+dbname = cvevulner
+dbprefix = cve_
+maxidle = 30
+maxconn = 3000
+
+
+[log]
+log_level = 7
+#log_path = C:\GoPject\src\cvevulner\logs\cve.log
+log_path = logs/cve.log
+maxlines=200000
+maxsize=1024000
+
+[crontab]
+ymalflag = 2
+getymal = 00 00 23 * * *
+<<<<<<< HEAD
+cveflag = 2
+=======
+cveflag = 1
+>>>>>>> dcc533bfb3e46ca7de687eb69f20e183f2353c67
+getcve = 00 00 01 * * *
+oricveflag = 2
+oricvecheck = 00 00 02 * * *
+getissueflag = 2
+getissue = 00 00 03 * * *
+issueflag = 2
+createissue = * * 01 * * *
+test = 0/10 * * * * *
+gittokenflag = 1
+issueoath = * * */20 * * *
+genexcelflag = 2
+genexcel = 00 00 04 * * *
+days = -30
+prcnum = 100
+
+
+[gitee]
+#owner = xwzQmxx
+#path = test
+#email = 1499273991@qq.com
+#redirect_uri = http://119.8.126.102:80/v1/issue/oauth/callback
+# -------jianjun gitee 配置 --------
+owner = zhangjianjun_code
+path = jasper
+email = 7844966+zhangjianjun_code@user.noreply.gitee.com
+redirect_uri = http://159.138.2.2:80/v1/issue/oauth/callback
+
+scope = user_info projects pull_requests issues notes keys hook groups gists enterprises emails
+# 优先从系统环境变量获取 获取失败使用默认值 ****
+client_id = "${GITEE_CLIENT_ID||****}"
+client_secret = "${GITEE_CLIENT_SECRET||****}"
+password = "${GITEE_PASSWORD||****}"
+
+# git token
+git_token = "${GITEE_TOKEN||xxx}"
+
+[hook]
+hookpwd = "${HOOK_PWD||***}"
+hookurl = http://159.138.2.2:80/v1/issue/hook/event
+#hookurl = http://119.8.126.102:80/v1/issue/hook/event
+
+
+[yaml]
+apiurl = https://api.openeuler.org/pkgmanage
+
+[cve]
+cveref = https://nvd.nist.gov/vuln/detail/
+openeulernum = 3000
+
+[reflink]
+comment_cmd = https://gitee.com/openeuler/cve-manager/blob/master/doc/md/manual.md
+
+[excel]
+forcerewrite = false
+snprefix = op-2020-10-
+snsuffix = 1002
\ No newline at end of file
diff --git a/tests/createrepo_test.go b/tests/createrepo_test.go
index 01ff0d4..c24fc6e 100644
--- a/tests/createrepo_test.go
+++ b/tests/createrepo_test.go
@@ -26,6 +26,18 @@ func QueryOriginCveExcelData() ([]models.OriginExcel, int64, error) {
return coe, num, err
}
+func QueryOriginCveCenterData() ([]models.VulnCenter, int64, error) {
+ o := orm.NewOrm()
+ var coe []models.VulnCenter
+ num, err := o.Raw("select * from cve_vuln_center GROUP BY pack_name").QueryRows(&coe)
+ if err == nil && num > 0 {
+ logs.Info("cve_vuln_center 查询结果: ", num)
+ } else {
+ logs.Info("当前无新增或者更新的cve, cur_time:", common.GetCurTime(), "err: ", err)
+ }
+ return coe, num, err
+}
+
func UpdateExcelDataPkName(originPackName, packName string) (id int64) {
o := orm.NewOrm()
_ = o.Raw("UPDATE cve_origin_excel SET pack_name = ?" +
@@ -34,14 +46,45 @@ func UpdateExcelDataPkName(originPackName, packName string) (id int64) {
}
func CreateRepo() {
- coe, num, err := QueryOriginCveExcelData()
+ //coe, num, err := QueryOriginCveExcelData()
+ coe, num, err := QueryOriginCveCenterData()
if err == nil && num > 0 {
for _, qc := range coe {
- PostRepo(qc.PackName)
+ //PostRepo(qc.PackName)
+ PostGroupRepo(qc.PackName)
+ //CreateBrand(qc.PackName)
}
}
}
+func PostGroupRepo(packName string) error {
+ url := "https://gitee.com/api/v5/orgs/cve-test/repos"
+ accessToken := os.Getenv("GITEE_TOKEN")
+ requestBody := fmt.Sprintf(`{
+ "access_token": "%s",
+ "name": "%s",
+ "has_issues": "true",
+ "has_wiki": "true",
+ "can_comment": "true",
+ "auto_init": "true",
+ "path": "%s",
+ "private": "false"
+ }`, accessToken, packName, packName)
+ logs.Info("isssue_body: ", requestBody)
+ resp, err := util.HttpPost(url, requestBody)
+ if err != nil {
+ logs.Error("创建",packName,"失败, err: ", err)
+ return err
+ }
+ if _, ok := resp["id"]; !ok {
+ logs.Error("创建issue 失败, err: ", ok, "url: ", url)
+ return errors.New("创建仓库失败")
+ }
+ errb := CreateBrand(packName)
+ logs.Info(errb)
+ return nil
+}
+
func PostRepo(packName string) error{
url := "https://gitee.com/api/v5/user/repos"
accessToken := os.Getenv("GITEE_TOKEN")
@@ -71,7 +114,7 @@ func PostRepo(packName string) error{
}
func CreateBrand(packName string) error{
- url := "https://gitee.com/api/v5/repos/zhangjianjun_code/" + packName + "/branches"
+ url := "https://gitee.com/api/v5/repos/cve-test/" + packName + "/branches"
accessToken := os.Getenv("GITEE_TOKEN")
requestBody := fmt.Sprintf(`{
"access_token": "%s",
@@ -92,6 +135,10 @@ func CreateBrand(packName string) error{
return nil
}
+<<<<<<< HEAD
+
+=======
func Init() {
CreateRepo()
-}
\ No newline at end of file
+}
+>>>>>>> dcc533bfb3e46ca7de687eb69f20e183f2353c67
diff --git a/tests/giteeissue_test.go b/tests/giteeissue_test.go
new file mode 100644
index 0000000..e8f1206
--- /dev/null
+++ b/tests/giteeissue_test.go
@@ -0,0 +1,20 @@
+package test
+
+import (
+ "cvevulner/models"
+ "fmt"
+ "testing"
+)
+
+func TestGetGiteOriginIssue(t *testing.T) {
+ //issue, err := models.GetGiteOriginIssue("CVE-2020-15719")
+ issue, err := models.GetGiteOriginIssue("CVE-2018-19541")
+ if err != nil {
+ t.Error(err)
+ }
+ loophole, err := issue.ParseToLoophole()
+ if err != nil {
+ t.Error(err)
+ }
+ t.Log(fmt.Sprintf("%#v", loophole))
+}
diff --git a/tests/grabissue_test.go b/tests/grabissue_test.go
index 33ce142..d87e749 100644
--- a/tests/grabissue_test.go
+++ b/tests/grabissue_test.go
@@ -6,6 +6,11 @@ import (
)
func TestGrabIssueByOrg(t *testing.T) {
- taskhandler.GrabIssueByOrg("8457c66db66955376519059b97e33dd1","src-openeuler")
+ err := taskhandler.GrabIssueByOrg("bee5383db9aa3f19663b8aab82b76289", "cve-test")
+ if err != nil {
+ t.Error(err)
+ }else {
+ t.Log(err)
+ }
}
diff --git a/tests/issue_test.go b/tests/issue_test.go
new file mode 100644
index 0000000..a171f08
--- /dev/null
+++ b/tests/issue_test.go
@@ -0,0 +1,48 @@
+package test
+
+import (
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "sync"
+ "testing"
+)
+
+var wt sync.WaitGroup
+
+func TestDeleteRepo(t *testing.T) {
+/* repo, err := models.GetIssueTplGroupByRepo()
+ if err != nil {
+ t.Error(err)
+ } else {*/
+ repo := []string{"javamail","libssh","libraw","flex","glibc","gstreamer","binutils","cairo","bouncycastle"}
+ for _, v := range repo {
+ go func(rep string) {
+ wt.Add(1)
+ defer wt.Done()
+ _ = deleteRepo("zhangjianjun_code", rep, "bee5383db9aa3f19663b8aab82b76289")
+
+ }(v)
+ }
+ //}
+ wt.Wait()
+}
+
+func deleteRepo(owner, repo, token string) error {
+ url := fmt.Sprintf("https://gitee.com/api/v5/repos/%s/%s?access_token=%s", owner, repo, token)
+ request, err := http.NewRequest(http.MethodDelete, url, nil)
+ if err != nil {
+ return err
+ }
+
+ rsp, err := http.DefaultClient.Do(request)
+ if err != nil {
+ return err
+ }
+ defer rsp.Body.Close()
+
+ body, _ := ioutil.ReadAll(rsp.Body)
+ fmt.Println(string(body))
+
+ return nil
+}
diff --git a/util/parsepayload.go b/util/parsepayload.go
index fa8e6c2..9e0a935 100644
--- a/util/parsepayload.go
+++ b/util/parsepayload.go
@@ -36,8 +36,8 @@ var (
CvsScoreV2 = "v2"
RegexpCveNumber = regexp.MustCompile(`漏洞编号[::](?s:(.*?))漏洞归属组件[::]`)
RegexpCveNumberLink = regexp.MustCompile(`\[(.*?)\]\((.*?)\)`)
- RegexpCveComponents = regexp.MustCompile(`漏洞归属组件[::](?s:(.*?))漏洞归属[的]版本[::]`)
- RegexpCveVersion = regexp.MustCompile(`漏洞归属[的]版本[::](?s:(.*?))CVSS V[23].0分值[::]`)
+ RegexpCveComponents = regexp.MustCompile(`漏洞归属组件[::](?s:(.*?))漏洞归属的?版本[::]`)
+ RegexpCveVersion = regexp.MustCompile(`漏洞归属的?版本[::](?s:(.*?))CVSS V[23].0分值[::]`)
RegexpCveScore = regexp.MustCompile(`CVSS V[23].0分值[::](?s:(.*?))漏洞[简描]述[::]`)
//RegexpCveScore = regexp.MustCompile(`CVSS V3.0分值[::](?s:(.*?))Vector[::]`)
//RegexpCveVector = regexp.MustCompile(`Vector[::](?s:(.*?))(漏洞简述[::])`)
@@ -46,24 +46,26 @@ var (
RegexpCveInfluencesDescNew = regexp.MustCompile(`影响性分析说明[::](?s:(.*?))openEuler评分[::]`)
RegexpCvePrincipleDesc = regexp.MustCompile(`原理分析[::](?s:(.*?))openEuler评分[::]`)
RegexpCveOpScore = regexp.MustCompile(`openEuler评分[::](?s:(.*?))受影响版本[::]`)
- RegexpCveOpScoreNew = regexp.MustCompile(`openEuler评分[::](?s:(.*?))受影响版本排查(受影响/不受影响)[::]`)
+ RegexpCveOpScoreNew = regexp.MustCompile(`openEuler评分[::](?s:(.*?))受影响版本排查\(受影响/不受影响\)[::]`)
//RegexpCveOpScore1 = regexp.MustCompile(`openEuler评分[::](?s:(.*?))受影响版本[::]`)
//RegexpCveOpVector = regexp.MustCompile(`openEulerVector[::](?s:(.*?))受影响版本[::]`)
RegexpCveInfluencesVersion = regexp.MustCompile(`受影响版本[::](?s:(.*?))规避方案或消减措施[::]`)
- RegexpCveInfluencesVersionNew = regexp.MustCompile(`受影响版本排查(受影响/不受影响)[::](?s:(.*?))$`)
+ RegexpCveInfluencesVersionNew = regexp.MustCompile(`受影响版本排查\(受影响/不受影响\)[::](?s:(.*?))$`)
RegexpCvePlannedMeasures = regexp.MustCompile(`规避方案或消减措施[::](?s:(.*?))受影响的包[::]`)
RegexpCvePlannedMeasures1 = regexp.MustCompile(`规避方案或消减措施[::](?s:(.*?))$`)
RegexpCveInfluencesPkg = regexp.MustCompile(`受影响的包[::](?s:(.*?))$`)
- RegexpDigital = regexp.MustCompile(`(\d){1,}(\.\d+)?`)
+ RegexpSpecialDigital = regexp.MustCompile(`(CVSS[::]3.0|CVSS[::]2.0|cvss[::]3.0|cvss[::]2.0|3.0/|2.0/|3.0 /|2.0 /)*`) //^((CVSS:3.0|CVSS:2.0|3.0/|2.0/|3.0 /|2.0 /).)*$
+ RegexpDigital = regexp.MustCompile(`(\d){1,}(\.?\d+)?`) //(\d){1,}(\.\d+)?
//`/AV:[NLAP]/AC:[HL]/PR:[NLH]/UI:[NR]/S:[UC]/C:[NLH]/I:[HNL]/A:[LNH]`
- RegexpVector = regexp.MustCompile(`AV:[NLAP](?s:(.*?))/A:[LNH]`)
- RegexpVectorV2 = regexp.MustCompile(`AV:[LAN](?s:(.*))/Au:[MSN](?s:(.*))/A:[NPC]`)
- RegexpScoreTypeV2 = regexp.MustCompile(`(?mi)^CVSS v2.0分值\s*`)
- RegexpScoreTypeV3 = regexp.MustCompile(`(?mi)^CVSS v3.0分值\s*`)
- RegexpIsNewTpl = regexp.MustCompile(`(?mi)^原理分析[::]\s*`)
- RegexpIsNewTpl2 = regexp.MustCompile(`(?mi)^规避方案或消减措施[::]\s*`)
- regexpEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]受影响`)
+ RegexpVector = regexp.MustCompile(`AV:[NLAP](?s:(.*?))/A:[LNH]`)
+ RegexpVectorV2 = regexp.MustCompile(`AV:[LAN](?s:(.*))/Au:[MSN](?s:(.*))/A:[NPC]`)
+ RegexpScoreTypeV2 = regexp.MustCompile(`(?mi)^CVSS v2.0分值\s*`)
+ RegexpScoreTypeV3 = regexp.MustCompile(`(?mi)^CVSS v3.0分值\s*`)
+ RegexpIsNewTpl = regexp.MustCompile(`(?mi)^原理分析[::]\s*`)
+ RegexpIsNewTpl2 = regexp.MustCompile(`(?mi)^规避方案或消减措施[::]\s*`)
+ regexpEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]受影响`)
regexpNoEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]不受影响`)
+ regexpOtherEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]`)
)
var (
@@ -78,10 +80,11 @@ type CommentAnalysis struct {
KeyValue string
}
type CaSlice []CommentAnalysis
+
func (a CaSlice) Len() int {
return len(a)
}
-func (a CaSlice) Swap(i, j int){
+func (a CaSlice) Swap(i, j int) {
a[i], a[j] = a[j], a[i]
}
func (a CaSlice) Less(i, j int) bool {
@@ -334,46 +337,58 @@ func ExtractCommentAnalysisAllValue(content string) map[string]string {
res := make(map[string]string, 0)
ca := GenerateCommentAnalysis(content)
if len(ca) > 0 {
- value ,ext:= ExtractCommentValue(ca, KwAnalysisDesc)
+ value, ext := ExtractCommentValue(ca, KwAnalysisDesc)
if ext {
res["cve_analysis"] = TrimStringNR(value)
}
- value,ext = ExtractCommentValue(ca, KwEffectVersion)
+ value, ext = ExtractCommentValue(ca, KwEffectVersion)
if ext {
value = ExtractCommentEffectVersion(value)
//if value != "" {
- res["affected_version"] = value
+ res["affected_version"] = value
//}
}
- value ,ext= ExtractCommentValue(ca, KwOpenEulerScore)
+ value, ext = ExtractCommentValue(ca, KwOpenEulerScore)
if ext {
score, vector := ExtractCommentOpenEulerScore(value)
- //if score != ""{
- res["openeuler_score"] = score
- //}
- //if vector != "" {
- res["openeuler_vector"] = vector
- //}
+ if score != ""{
+ res["openeuler_score"] = score
+ }
+ if vector != "" {
+ res["openeuler_vector"] = vector
+ }
}
}
return res
}
func ExtractCommentEffectVersion(str string) string {
+ str = strings.Trim(str, " ")
var res []string
match := regexpEffectVersion.FindAllStringSubmatch(str, -1)
match2 := regexpNoEffectVersion.FindAllStringSubmatch(str, -1)
- if len(match) > 0 {
- for _, v := range match {
- if len(v) > 1 {
- res = append(res, TrimString(v[1])+":受影响")
+ if len(match) > 0 || len(match2) > 0 {
+ if len(match) > 0 {
+ for _, v := range match {
+ if len(v) > 1 {
+ res = append(res, TrimString(v[1])+":受影响")
+ }
}
}
- }
- if len(match2) >0 {
- for _, v := range match2 {
- if len(v) > 1 {
- res = append(res, TrimString(v[1])+":不受影响")
+ if len(match2) > 0 {
+ for _, v := range match2 {
+ if len(v) > 1 {
+ res = append(res, TrimString(v[1])+":不受影响")
+ }
+ }
+ }
+ } else {
+ match3 := regexpOtherEffectVersion.FindAllStringSubmatch(str, -1)
+ if len(match3) > 0 {
+ for _, v := range match3 {
+ if len(v) > 1 {
+ res = append(res, TrimString(v[1])+":")
+ }
}
}
}
@@ -383,21 +398,21 @@ func ExtractCommentEffectVersion(str string) string {
return ""
}
-func ExtractCommentValue(ca CaSlice, keyWord string) (string,bool) {
+func ExtractCommentValue(ca CaSlice, keyWord string) (string, bool) {
for _, v := range ca {
if v.KeyName == keyWord {
- return v.KeyValue,true
+ return v.KeyValue, true
}
}
- return "",false
+ return "", false
}
-func ExtractCommentOpenEulerScore(str string) (score, vector string){
+func ExtractCommentOpenEulerScore(str string) (score, vector string) {
str = TrimString(str)
score = ExtractDigital(str)
- vector = ExtractVector(str,CvsScoreV3)
- if vector == ""{
- vector = ExtractVector(str,CvsScoreV2)
+ vector = ExtractVector(str, CvsScoreV3)
+ if vector == "" {
+ vector = ExtractVector(str, CvsScoreV2)
}
return
}
@@ -421,11 +436,29 @@ func TrimStringNR(str string) string {
return str
}
+func RemoveSpecialDigital(body string) string {
+ if body == "" {
+ return body
+ }
+ sds := RegexpSpecialDigital.ReplaceAllString(body, "")
+ if len(sds) > 0 {
+ return sds
+ }
+ return ""
+}
+
func ExtractDigital(body string) string {
if body == "" {
return body
}
- sds := RegexpDigital.FindAllStringSubmatch(body, -1)
+ scoreStr := ""
+ tempStr := RemoveSpecialDigital(body)
+ if tempStr != "" && len(tempStr) > 0 {
+ scoreStr = tempStr
+ } else {
+ scoreStr = body
+ }
+ sds := RegexpDigital.FindAllStringSubmatch(scoreStr, -1)
if len(sds) > 0 {
return sds[0][0]
}
--
Gitee
From 43d50ada52eaf4ea7e7763e4372682889a3c5fbe Mon Sep 17 00:00:00 2001
From: zhangjianjun_code <7844966+zhangjianjun_code@user.noreply.gitee.com>
Date: Wed, 30 Sep 2020 17:54:52 +0800
Subject: [PATCH 2/5] 1. Add comments to the function; 2. Modify the irregular
code format
---
common/aes.go | 47 ++++---
common/logs.go | 12 +-
controllers/file.go | 11 +-
controllers/hook.go | 136 ++++++++++---------
controllers/issue.go | 12 +-
controllers/login.go | 24 ++--
controllers/object.go | 25 ++--
controllers/packages.go | 68 +++++-----
controllers/upload.go | 28 ++--
controllers/user.go | 2 +-
errcode/errcode.go | 71 +++++-----
models/common.go | 2 +
models/cve.go | 8 +-
models/excel.go | 27 ++--
models/giteeissue.go | 28 ++--
models/hookevent.go | 5 +-
models/initdb.go | 2 +-
models/issue.go | 17 ++-
models/modeldb.go | 267 ++++++++++++++++++-------------------
models/user.go | 4 +-
models/ymal.go | 2 +-
task/cve.go | 14 +-
task/genexcel.go | 2 +-
task/grabissue.go | 1 +
task/inittask.go | 29 ++--
task/issuetask.go | 60 ++++-----
task/oricvecheck.go | 15 ++-
task/yaml.go | 15 ++-
taskhandler/assist.go | 10 +-
taskhandler/comment.go | 6 +-
taskhandler/common.go | 70 +++++-----
taskhandler/createissue.go | 76 +++++------
taskhandler/cve.go | 56 ++++----
taskhandler/excel.go | 84 ++++++------
taskhandler/grabissue.go | 46 ++++---
taskhandler/oricvecheck.go | 10 +-
taskhandler/yaml.go | 93 ++++++-------
tests/createrepo_test.go | 6 +-
util/http.go | 83 +++++++-----
util/parsepayload.go | 152 +++++++++++++--------
40 files changed, 872 insertions(+), 754 deletions(-)
diff --git a/common/aes.go b/common/aes.go
index c4a15c8..fe6f79e 100644
--- a/common/aes.go
+++ b/common/aes.go
@@ -9,13 +9,12 @@ import (
"flag"
"fmt"
"github.com/astaxie/beego/logs"
+ jwt "github.com/dgrijalva/jwt-go"
"math/rand"
"time"
- jwt "github.com/dgrijalva/jwt-go"
)
-
-//PKCS7 填充模式
+//PKCS7Padding PKCS7 填充模式
func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
//Repeat()函数的功能是把切片[]byte{byte(padding)}复制padding个,然后合并成新的字节切片返回
@@ -23,21 +22,21 @@ func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
return append(ciphertext, padtext...)
}
-//填充的反向操作,删除填充字符串
+//PKCS7UnPadding 填充的反向操作,删除填充字符串
func PKCS7UnPadding(origData []byte) ([]byte, error) {
//获取数据长度
length := len(origData)
if length == 0 {
return nil, errors.New("加密字符串错误!")
- } else {
- //获取填充字符串长度
- unpadding := int(origData[length-1])
- //截取切片,删除填充字节,并且返回明文
- return origData[:(length - unpadding)], nil
}
+ //获取填充字符串长度
+ unPadding := int(origData[length-1])
+ //截取切片,删除填充字节,并且返回明文
+ return origData[:(length - unPadding)], nil
+
}
-//实现加密
+//AesEcrypt 实现加密
func AesEcrypt(origData []byte, key []byte) ([]byte, error) {
//创建加密算法实例
block, err := aes.NewCipher(key)
@@ -56,7 +55,7 @@ func AesEcrypt(origData []byte, key []byte) ([]byte, error) {
return crypted, nil
}
-//实现解密
+//AesDeCrypt 实现解密
func AesDeCrypt(cypted []byte, key []byte) ([]byte, error) {
//创建加密算法实例
block, err := aes.NewCipher(key)
@@ -78,7 +77,7 @@ func AesDeCrypt(cypted []byte, key []byte) ([]byte, error) {
return origData, err
}
-//加密base64
+//EnPwdCode 加密base64
func EnPwdCode(pwd []byte, key []byte) (string, error) {
result, err := AesEcrypt(pwd, key)
if err != nil {
@@ -87,7 +86,7 @@ func EnPwdCode(pwd []byte, key []byte) (string, error) {
return base64.StdEncoding.EncodeToString(result), err
}
-//解密
+//DePwdCode 解密
func DePwdCode(pwd string, key []byte) ([]byte, error) {
//解密base64字符串
pwdByte, err := base64.StdEncoding.DecodeString(pwd)
@@ -98,6 +97,7 @@ func DePwdCode(pwd string, key []byte) ([]byte, error) {
return AesDeCrypt(pwdByte, key)
}
+
//func main() {
// str := []byte("12fff我是ww.topgoer.com的站长枯藤")
// pwd, _ := EnPwdCode(str)
@@ -123,10 +123,10 @@ func parseArgs(lens int) {
//flag.StringVar(&charset, "t", "num",
// //反引号以原样输出
// `-t 制定密码生成的字符集,
- // num:只使用数字[0-9],
- // char:只使用英文字母[a-zA-Z],
- // mix:使用数字和字母,
- // advance:使用数字、字母以及特殊字符`)
+ // num:只使用数字[0-9],
+ // char:只使用英文字母[a-zA-Z],
+ // mix:使用数字和字母,
+ // advance:使用数字、字母以及特殊字符`)
length = lens
charset = "advance"
flag.Parse()
@@ -171,7 +171,8 @@ func generatePasswd() string {
return string(passwd)
}
-func GenPrivKey(lens int) string{
+//GenPrivKey 生成私有key
+func GenPrivKey(lens int) string {
//随机种子
rand.Seed(time.Now().UnixNano())
parseArgs(lens)
@@ -183,15 +184,13 @@ func GenPrivKey(lens int) string{
return passwd
}
-
-
type Claims struct {
username string
password string
jwt.StandardClaims
}
-func setting(jwtkey []byte, username, password string) (string, error){
+func setting(jwtkey []byte, username, password string) (string, error) {
expireTime := time.Now().Add(7 * 24 * time.Hour)
claims := &Claims{
username: username,
@@ -213,10 +212,11 @@ func setting(jwtkey []byte, username, password string) (string, error){
return tokenString, nil
}
-func GenToken(username, password string) (string, error){
+//GenToken 生成Token
+func GenToken(username, password string) (string, error) {
pKey := GenPrivKey(16)
var jwtkey = []byte(pKey)
- tokens,err := setting(jwtkey, username, password)
+ tokens, err := setting(jwtkey, username, password)
return tokens, err
}
@@ -236,4 +236,3 @@ func GenToken(username, password string) (string, error){
// })
// return token, Claims, err
//}
-
diff --git a/common/logs.go b/common/logs.go
index 423137e..caad326 100644
--- a/common/logs.go
+++ b/common/logs.go
@@ -9,7 +9,7 @@ import (
func InitLogger() (err error) {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
fmt.Println("config init error:", err)
return
}
@@ -20,7 +20,7 @@ func InitLogger() (err error) {
logConf := make(map[string]interface{})
logConf["filename"] = BConfig.String("log::log_path")
- level,_ := BConfig.Int("log::log_level")
+ level, _ := BConfig.Int("log::log_level")
logConf["level"] = level
logConf["maxlines"] = maxlines
@@ -29,7 +29,11 @@ func InitLogger() (err error) {
fmt.Println("marshal failed,err:", err)
return
}
- logs.SetLogger(logs.AdapterFile, string(confStr))
+ err = logs.SetLogger(logs.AdapterFile, string(confStr))
+ if err != nil {
+ fmt.Println("marshal failed,err:", err)
+ return
+ }
logs.SetLogFuncCall(true)
return
}
@@ -40,4 +44,4 @@ func LogInit() {
fmt.Println(err)
}
fmt.Println("log init success !")
-}
\ No newline at end of file
+}
diff --git a/controllers/file.go b/controllers/file.go
index 54bc1ac..54bb97c 100644
--- a/controllers/file.go
+++ b/controllers/file.go
@@ -4,18 +4,19 @@ import (
"cvevulner/models"
"github.com/astaxie/beego"
)
-
+//FileController file operation routing processing
type FileController struct {
beego.Controller
}
+//DownloadLastExcel Download the latest excel file
// @router /lastExcel [get]
-func (f *FileController) DownloadLastExcel() {
- er :=models.ExportRecord{}
+func (f *FileController) DownloadLastExcel() {
+ er := models.ExportRecord{}
err := er.QueryLast()
if err != nil {
_ = f.Ctx.Output.Body([]byte("no file "))
}
- fp := "./"+er.FileName
- f.Ctx.Output.Download(fp,er.FileName)
+ fp := "./" + er.FileName
+ f.Ctx.Output.Download(fp, er.FileName)
}
diff --git a/controllers/hook.go b/controllers/hook.go
index c8576c8..b15be03 100644
--- a/controllers/hook.go
+++ b/controllers/hook.go
@@ -15,28 +15,46 @@ import (
)
var (
- GiteeUserAgent = "git-oschina-hook" //gitee hook request flag
- XGiteeToken = "X-Gitee-Token" // password or sign
- XGIteeEventType = "X-Gitee-Event" //webhook event type
- NoteHookType = "Note Hook" // type of comment
- PullReqHookType = "merge_request_hooks" // type of pull request
- PushTagHookType = "push_hooks/tag_push_hooks" // type of push or tag
- IssueHookType = "Issue Hook" //type of issue
+ //GiteeUserAgent gitee hook request flag
+ GiteeUserAgent = "git-oschina-hook"
+ //XGiteeToken password or sign
+ XGiteeToken = "X-Gitee-Token"
+ //XGIteeEventType webhook event type
+ XGIteeEventType = "X-Gitee-Event"
+ //NoteHookType type of comment
+ NoteHookType = "Note Hook"
+ //PullReqHookType type of pull request
+ PullReqHookType = "merge_request_hooks"
+ //PushTagHookType type of push or tag
+ PushTagHookType = "push_hooks/tag_push_hooks"
+ //IssueHookType type of issue
+ IssueHookType = "Issue Hook"
)
const (
- CommentAnalysisCplTpl = "@%v %v"
+ //CommentAnalysisCplTpl complete comment analysis reply template
+ CommentAnalysisCplTpl = "@%v %v"
+ //ReviewPrivateLettersTpl send private review letters template
ReviewPrivateLettersTpl = `%s(%s)analysis is over,CVEScore:%v;OpenEulerScore:%v。Please review!`
- ReviewRejectScore = `@%v you submit issue score audit failed(reject by %v),Please re-analyze and submit!`
- ReviewApproveScore = `@%v you submit issue score audit success(approved by %v),You can proceed to the next step!`
- CommentReviewTpl = `%v The CVE score needs to be reviewed (the review instruction /approve&/reject means agreement and rejection)。`
- IssueRejectState = "rejected"
- IssueCloseState = "closed"
- IssueProgressState = "progressing"
- IssueOpenState = "open"
- AnalysisComplete = "@%v 经过 CVE-Manager 解析, 您分析的内容如下表所示:\n"
+ //ReviewRejectScore reply the review reject template
+ ReviewRejectScore = `@%v you submit issue score audit failed(reject by %v),Please re-analyze and submit!`
+ //ReviewApproveScore replay the review approve template
+ ReviewApproveScore = `@%v you submit issue score audit success(approved by %v),You can proceed to the next step!`
+ //CommentReviewTpl comment review template
+ CommentReviewTpl = `%v The CVE score needs to be reviewed (the review instruction /approve&/reject means agreement and rejection)。`
+ //IssueRejectState issue state rejected
+ IssueRejectState = "rejected"
+ //IssueCloseState issue state closed
+ IssueCloseState = "closed"
+ //IssueProgressState issue state progressing
+ IssueProgressState = "progressing"
+ //IssueOpenState issue state open
+ IssueOpenState = "open"
+ //AnalysisComplete issue analysis complete comment
+ AnalysisComplete = "@%v 经过 cve-manager 解析, 您分析的内容如下表所示:\n"
)
+//HookEventControllers gitee hook callback
type HookEventControllers struct {
beego.Controller
}
@@ -62,16 +80,7 @@ func (c *HookEventControllers) Post() {
}
}
-// @router / [get]
-func (c *HookEventControllers) Get() {
- if ok := c.isLegitimateHookEvent(); !ok {
- logs.Info("hah:", "giteeUseAgent")
- return
- }
-
-}
-
-// isLegitimateHookEvent according to gitee doc judge
+//isLegitimateHookEvent according to gitee doc judge
func (c *HookEventControllers) isLegitimateHookEvent() (ok bool) {
ok = true
//judge user agent
@@ -191,11 +200,11 @@ func handleIssueStateChange(issueHook *models.IssuePayload) error {
return nil
}
-func isNormalCloseIssue(cveId int64, issueState int8) bool {
+func isNormalCloseIssue(cveID int64, issueState int8) bool {
if issueState == 1 {
return false
}
- score, err := models.QueryIssueScore(cveId)
+ score, err := models.QueryIssueScore(cveID)
if err != nil {
logs.Error(err)
return false
@@ -419,7 +428,7 @@ func notifyAuditorReview(payload *models.CommentPayload, issueTmp models.IssueTe
path := issueTmp.Repo
ns := make([]string, len(list))
for k, v := range list {
- ns[k] = "@" + v.NameSpace+" "
+ ns[k] = "@" + v.NameSpace + " "
taskhandler.SendPrivateLetters(accessToken, content, v.NameSpace)
//add @comment
}
@@ -428,8 +437,8 @@ func notifyAuditorReview(payload *models.CommentPayload, issueTmp models.IssueTe
}
-func changeOpenEulerScoreStatus(cveId int64, status int8) error {
- score, err := models.QueryIssueScore(cveId)
+func changeOpenEulerScoreStatus(cveID int64, status int8) error {
+ score, err := models.QueryIssueScore(cveID)
if err != nil {
return err
}
@@ -455,23 +464,22 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok
ok = true
tbContent := make([]interface{}, 12)
if i.OpenEulerScore == 0.0 {
- msg = fmt.Sprintf("openEulerScore没有填写:%v", i.OpenEulerScore)
+ msg = fmt.Sprintf("openEulerScore没有填写或正确填写(0-10)")
ok = false
return
- } else {
- tbContent[0] = "已分析"
- tbContent[1] = "openEulerScore"
- tbContent[2] = i.OpenEulerScore
}
+ tbContent[0] = "已分析"
+ tbContent[1] = "openEulerScore"
+ tbContent[2] = i.OpenEulerScore
+
if util.TrimString(i.CveAnalysis) == "" {
msg = fmt.Sprintf("影响性分析说明没有填写:%v", i.CveAnalysis)
ok = false
return
- } else {
- tbContent[3] = "已分析"
- tbContent[4] = "影响性分析说明"
- tbContent[5] = util.TrimStringNR(i.CveAnalysis)
}
+ tbContent[3] = "已分析"
+ tbContent[4] = "影响性分析说明"
+ tbContent[5] = util.TrimStringNR(i.CveAnalysis)
//新模板没有该值
/*if i.PrincipleAnalysis == "" {
msg = fmt.Sprintf("原理分析:%v",i.PrincipleAnalysis)
@@ -482,11 +490,10 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok
msg = fmt.Sprintf("openEulerVector没有填写:%v", i.OpenEulerVector)
ok = false
return
- } else {
- tbContent[6] = "已分析"
- tbContent[7] = "openEulerVector"
- tbContent[8] = util.TrimStringNR(i.OpenEulerVector)
}
+ tbContent[6] = "已分析"
+ tbContent[7] = "openEulerVector"
+ tbContent[8] = util.TrimStringNR(i.OpenEulerVector)
if i.AffectedVersion != "" {
versionfFlag := true
affectedVersionArry := strings.Split(i.AffectedVersion, ",")
@@ -506,6 +513,11 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok
}
}
}
+ if !versionfFlag {
+ msg = fmt.Sprintf("受影响版本排查 没有分析或未按正确格式填写:%v", i.AffectedVersion)
+ ok = false
+ return
+ }
if versionfFlag {
tbContent[9] = "已分析"
tbContent[10] = "受影响版本排查"
@@ -562,8 +574,8 @@ func commentUpdateIssue(issueTmp models.IssueTemplate) {
}
}
-func saveVectorData(vct string, cveId int64) error {
- score, err := models.QueryIssueScore(cveId)
+func saveVectorData(vct string, cveID int64) error {
+ score, err := models.QueryIssueScore(cveID)
if err != nil {
return err
}
@@ -579,74 +591,74 @@ func saveVectorData(vct string, cveId int64) error {
}
if util.RegexpVectorV2.Match([]byte(vct)) {
//update v2 vector
- avv := util.ReadVmValueV2(vMap["AV"])
+ avv := util.ReadVMValueV2(vMap["AV"])
if avv != "" {
score.OaccessVector = avv
upFields = append(upFields, "o_access_vector")
}
- acv := util.ReadVmValueV2(vMap["AC"])
+ acv := util.ReadVMValueV2(vMap["AC"])
if acv != "" {
score.OaccessComplexity = acv
upFields = append(upFields, "o_access_complexity")
}
- au := util.ReadVmValueV2(vMap["Au"])
+ au := util.ReadVMValueV2(vMap["Au"])
if au != "" {
score.Oauthentication = au
upFields = append(upFields, "o_authentication")
}
- cv := util.ReadVmValueV2(vMap["C"])
+ cv := util.ReadVMValueV2(vMap["C"])
if cv != "" {
score.Oconfidentiality = cv
upFields = append(upFields, "o_confidentiality")
}
- iv := util.ReadVmValueV2(vMap["I"])
+ iv := util.ReadVMValueV2(vMap["I"])
if iv != "" {
score.Ointegrity = iv
upFields = append(upFields, "o_integrity")
}
- av := util.ReadVmValueV2(vMap["A"])
+ av := util.ReadVMValueV2(vMap["A"])
if av != "" {
score.Oavailability = av
upFields = append(upFields, "o_availability")
}
} else {
//update v3 vector
- avv := util.ReadVmValue(vMap["AV"])
+ avv := util.ReadVMValue(vMap["AV"])
if avv != "" {
score.OattackVector = avv
upFields = append(upFields, "o_attack_vector")
}
- acv := util.ReadVmValue(vMap["AC"])
+ acv := util.ReadVMValue(vMap["AC"])
if acv != "" {
score.OattackComplexity = acv
upFields = append(upFields, "o_attack_complexity")
}
- prv := util.ReadVmValue(vMap["PR"])
+ prv := util.ReadVMValue(vMap["PR"])
if prv != "" {
score.OprivilegeRequired = prv
upFields = append(upFields, "o_privilege_required")
}
- uiv := util.ReadVmValue(vMap["UI"])
+ uiv := util.ReadVMValue(vMap["UI"])
if uiv != "" {
score.OuserInteraction = uiv
upFields = append(upFields, "o_user_interaction")
}
- sv := util.ReadVmValue(vMap["S"])
+ sv := util.ReadVMValue(vMap["S"])
if sv != "" {
score.Oscope = sv
upFields = append(upFields, "o_scope")
}
- cv := util.ReadVmValue(vMap["C"])
+ cv := util.ReadVMValue(vMap["C"])
if cv != "" {
score.Oconfidentiality = cv
upFields = append(upFields, "o_confidentiality")
}
- iv := util.ReadVmValue(vMap["I"])
+ iv := util.ReadVMValue(vMap["I"])
if iv != "" {
score.Ointegrity = iv
upFields = append(upFields, "o_integrity")
}
- av := util.ReadVmValue(vMap["A"])
+ av := util.ReadVMValue(vMap["A"])
if av != "" {
score.Oavailability = av
upFields = append(upFields, "o_availability")
@@ -662,9 +674,9 @@ func saveVectorData(vct string, cveId int64) error {
return nil
}
-func handleCommentPackage(packageStr string, cveId int64) error {
+func handleCommentPackage(packageStr string, cveID int64) error {
packageStr = util.TrimString(packageStr)
- err := models.UpdatePackageByCveId(packageStr, cveId)
+ err := models.UpdatePackageByCveId(packageStr, cveID)
if err != nil {
return err
}
diff --git a/controllers/issue.go b/controllers/issue.go
index a48d786..bb5ef08 100644
--- a/controllers/issue.go
+++ b/controllers/issue.go
@@ -20,17 +20,17 @@ func (c *IssueOathCallbackController) RetData(resp map[string]interface{}) {
// @Title UserLogin
// @Description UserLogin
// @Param body body models.User true "body for user content"
-// @Success 200 {int} models.User.Id
+// @Success 200 {int} models.User.ID
// @Failure 403 body is empty
// @router / [post]
-func (u *IssueOathCallbackController) Post() {
+func (c *IssueOathCallbackController) Post() {
req := make(map[string]interface{})
resp := make(map[string]interface{})
- resp["errno"]=errcode.RECODE_LOGINERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_LOGINERR)
+ resp["errno"]=errcode.RecodeLoginErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeLoginErr)
resp["body"] = Result{}
- defer u.RetData(resp)
- json.Unmarshal(u.Ctx.Input.RequestBody,&req)
+ defer c.RetData(resp)
+ json.Unmarshal(c.Ctx.Input.RequestBody,&req)
logs.Info("登录请求参数:", &req)
//判断是否合法
//if req["UserName"] == nil || req["PassWord"] ==nil{
diff --git a/controllers/login.go b/controllers/login.go
index 240c470..f9c31d2 100644
--- a/controllers/login.go
+++ b/controllers/login.go
@@ -28,22 +28,26 @@ func (c *UserLoginController) RetData(resp map[string]interface{}) {
// @Title UserLogin
// @Description UserLogin
// @Param body body models.User true "body for user content"
-// @Success 200 {int} models.User.Id
+// @Success 200 {int} models.User.ID
// @Failure 403 body is empty
// @router / [post]
func (u *UserLoginController) Post() {
req := make(map[string]interface{})
resp := make(map[string]interface{})
- resp["errno"]=errcode.RECODE_LOGINERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_LOGINERR)
+ resp["errno"]=errcode.RecodeLoginErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeLoginErr)
resp["body"] = Result{}
defer u.RetData(resp)
- json.Unmarshal(u.Ctx.Input.RequestBody,&req)
+ err := json.Unmarshal(u.Ctx.Input.RequestBody, &req)
+ if err != nil{
+ logs.Error(err)
+ return
+ }
logs.Info("登录请求参数:", &req)
//判断是否合法
if req["userName"] == nil || req["passWord"] == nil{
- resp["errno"]=errcode.RECODE_DATAERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_DATAERR)
+ resp["errno"]=errcode.RecodeDataErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeDataErr)
resp["body"] = Result{}
logs.Error("数据错误")
return
@@ -52,8 +56,8 @@ func (u *UserLoginController) Post() {
// 加密先注释
//password = common.DesString(password)
if password == "" || len(password) == 0{
- resp["errno"]=errcode.RECODE_PWDERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_PWDERR)
+ resp["errno"]=errcode.RecodePwdErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodePwdErr)
logs.Error("密码解析错误", password)
resp["body"] = Result{}
return
@@ -70,8 +74,8 @@ func (u *UserLoginController) Post() {
user_id := resp_model[0]["user_id"]
strc.UserId = user_id
resp["body"] = strc
- resp["errno"]=errcode.RECODE_OK
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_OK)
+ resp["errno"]=errcode.RecodeOk
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
expirTime := common.GetTokenExpirTime()
newTime := time.Now().AddDate(0, 0, expirTime)
models.UpdateToken(resp_model[0]["user_id"], token, newTime)
diff --git a/controllers/object.go b/controllers/object.go
index 714a066..bde796f 100644
--- a/controllers/object.go
+++ b/controllers/object.go
@@ -3,11 +3,11 @@ package controllers
import (
"cvevulner/models"
"encoding/json"
-
"github.com/astaxie/beego"
+ "github.com/astaxie/beego/logs"
)
-// Operations about object
+//ObjectController Operations about object
type ObjectController struct {
beego.Controller
}
@@ -15,14 +15,18 @@ type ObjectController struct {
// @Title Create
// @Description create object
// @Param body body models.Object true "The object content"
-// @Success 200 {string} models.Object.Id
+// @Success 200 {string} models.Object.ID
// @Failure 403 body is empty
// @router / [post]
func (o *ObjectController) Post() {
var ob models.Object
- json.Unmarshal(o.Ctx.Input.RequestBody, &ob)
- objectid := models.AddOne(ob)
- o.Data["json"] = map[string]string{"ObjectId": objectid}
+ err := json.Unmarshal(o.Ctx.Input.RequestBody, &ob)
+ if err != nil {
+ logs.Error(err)
+ o.Abort("500")
+ }
+ objectId := models.AddOne(ob)
+ o.Data["json"] = map[string]string{"ObjectId": objectId}
o.ServeJSON()
}
@@ -66,9 +70,11 @@ func (o *ObjectController) GetAll() {
func (o *ObjectController) Put() {
objectId := o.Ctx.Input.Param(":objectId")
var ob models.Object
- json.Unmarshal(o.Ctx.Input.RequestBody, &ob)
-
- err := models.Update(objectId, ob.Score)
+ err := json.Unmarshal(o.Ctx.Input.RequestBody, &ob)
+ if err != nil {
+ o.Data["json"] = err.Error()
+ }
+ err = models.Update(objectId, ob.Score)
if err != nil {
o.Data["json"] = err.Error()
} else {
@@ -89,4 +95,3 @@ func (o *ObjectController) Delete() {
o.Data["json"] = "delete success!"
o.ServeJSON()
}
-
diff --git a/controllers/packages.go b/controllers/packages.go
index 41ed97a..a6f619f 100644
--- a/controllers/packages.go
+++ b/controllers/packages.go
@@ -78,8 +78,8 @@ func (u *PackagesController) Get() {
logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
resp := make(map[string]interface{})
var pd []PackageData
- resp["errno"]=errcode.RECODE_UNKNOWERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_UNKNOWERR)
+ resp["errno"]=errcode.RecodeUnknowErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
resp["body"] = []PackageData{}
resp["totalCount"] = 0
resp["totalPage"] = 0
@@ -89,40 +89,40 @@ func (u *PackagesController) Get() {
addrIp := strings.Split(addr, ":")
err := models.GetIpWhite(addrIp[0], &iw)
if err != nil {
- resp["errno"]=errcode.RECODE_IPERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_IPERR)
+ resp["errno"]=errcode.RecodeIpErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
return
}
} else {
- resp["errno"]=errcode.RECODE_IPERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_IPERR)
+ resp["errno"]=errcode.RecodeIpErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
return
}
token := u.GetString("token")
if token == "" {
- resp["errno"]=errcode.RECODE_SESSIONERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_SESSIONERR)
+ resp["errno"]=errcode.RecodeSessionErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
return
} else {
ok := models.CheckToken(token)
if !ok {
- resp["errno"]=errcode.RECODE_ROLEERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_ROLEERR)
+ resp["errno"]=errcode.RecodeRoleErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeRoleErr)
return
}
}
PageNum, err := u.GetInt64("pageNum")
if err != nil {
logs.Error("pageNum, err: ", err)
- resp["errno"]=errcode.RECODE_PARAMERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_PARAMERR)
+ resp["errno"]=errcode.RecodeParamErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
return
}
PageSize, err := u.GetInt64("pageSize")
if err != nil {
logs.Error("PageSize, err: ", err)
- resp["errno"]=errcode.RECODE_PARAMERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_PARAMERR)
+ resp["errno"]=errcode.RecodeParamErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
return
}
QueryPkgName := u.GetString("queryPkgName")
@@ -160,12 +160,12 @@ func (u *PackagesController) Get() {
pd = append(pd, pg)
}
resp["body"] = pd
- resp["errno"]=errcode.RECODE_OK
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_OK)
+ resp["errno"]=errcode.RecodeOk
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
}
} else {
- resp["errno"]=errcode.RECODE_NODATA
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_NODATA)
+ resp["errno"]=errcode.RecodeNodata
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
return
}
}
@@ -183,8 +183,8 @@ func (u *PackagesInfoController) Get() {
logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
resp := make(map[string]interface{})
var pd PackageInfoData
- resp["errno"]=errcode.RECODE_UNKNOWERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_UNKNOWERR)
+ resp["errno"]=errcode.RecodeUnknowErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
resp["body"] = PackageInfoData{}
defer u.RetData(resp)
var iw models.IpWhite
@@ -192,40 +192,40 @@ func (u *PackagesInfoController) Get() {
addrIp := strings.Split(addr, ":")
err := models.GetIpWhite(addrIp[0], &iw)
if err != nil {
- resp["errno"]=errcode.RECODE_IPERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_IPERR)
+ resp["errno"]=errcode.RecodeIpErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
return
}
} else {
- resp["errno"]=errcode.RECODE_IPERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_IPERR)
+ resp["errno"]=errcode.RecodeIpErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
return
}
token := u.GetString("token")
if token == "" {
- resp["errno"]=errcode.RECODE_SESSIONERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_SESSIONERR)
+ resp["errno"]=errcode.RecodeSessionErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
return
} else {
ok := models.CheckToken(token)
if !ok {
- resp["errno"]=errcode.RECODE_ROLEERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_ROLEERR)
+ resp["errno"]=errcode.RecodeRoleErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeRoleErr)
return
}
}
pkgName := u.GetString("pkgName")
if pkgName == "" {
logs.Error("pkgName, 参数错误")
- resp["errno"]=errcode.RECODE_PARAMERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_PARAMERR)
+ resp["errno"]=errcode.RecodeParamErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
return
}
var gi models.GitPackageInfo
err := models.GetPackageInfo(pkgName, &gi)
if err != nil {
- resp["errno"]=errcode.RECODE_NODATA
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_NODATA)
+ resp["errno"]=errcode.RecodeNodata
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
return
}
pd.OriginUrl = gi.OriginUrl
@@ -285,8 +285,8 @@ func (u *PackagesInfoController) Get() {
} else {
pd.Subpack = []SubPack{}
}
- resp["errno"]=errcode.RECODE_OK
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_OK)
+ resp["errno"]=errcode.RecodeOk
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
resp["body"] = pd
return
}
\ No newline at end of file
diff --git a/controllers/upload.go b/controllers/upload.go
index f3ebf79..a54f1ad 100644
--- a/controllers/upload.go
+++ b/controllers/upload.go
@@ -37,8 +37,8 @@ func (u *UserUploadController) Post() {
addr := req.RemoteAddr
logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header)
resp := make(map[string]interface{})
- resp["errno"]=errcode.RECODE_UNKNOWERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_UNKNOWERR)
+ resp["errno"]=errcode.RecodeUnknowErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
resp["body"] = []ResultData{}
defer u.RetData(resp)
json.Unmarshal(u.Ctx.Input.RequestBody,&uploaddata)
@@ -48,19 +48,19 @@ func (u *UserUploadController) Post() {
addrIp := strings.Split(addr, ":")
err := models.GetIpWhite(addrIp[0], &iw)
if err != nil {
- resp["errno"]=errcode.RECODE_IPERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_IPERR)
+ resp["errno"]=errcode.RecodeIpErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
return
}
} else {
- resp["errno"]=errcode.RECODE_IPERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_IPERR)
+ resp["errno"]=errcode.RecodeIpErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
return
}
//判断是否合法
if uploaddata.Token == "" {
- resp["errno"]=errcode.RECODE_SESSIONERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_SESSIONERR)
+ resp["errno"]=errcode.RecodeSessionErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
resp["body"] = []ResultData{}
logs.Error("token 校验失败")
return
@@ -68,16 +68,16 @@ func (u *UserUploadController) Post() {
// 校验token
ok := models.CheckToken(uploaddata.Token)
if !ok {
- resp["errno"]=errcode.RECODE_SESSIONERR
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_SESSIONERR)
+ resp["errno"]=errcode.RecodeSessionErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
resp["body"] = []ResultData{}
logs.Error("token 校验失败")
return
}
}
if uploaddata.CveData == nil || len(uploaddata.CveData) == 0{
- resp["errno"]=errcode.RECODE_NODATA
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_NODATA)
+ resp["errno"]=errcode.RecodeNodata
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
resp["body"] = []ResultData{}
logs.Error("数据为空")
return
@@ -226,8 +226,8 @@ func (u *UserUploadController) Post() {
ResDataList = append(ResDataList, ResData)
}
}
- resp["errno"]=errcode.RECODE_OK
- resp["errmsg"]=errcode.RecodeText(errcode.RECODE_OK)
+ resp["errno"]=errcode.RecodeOk
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
resp["body"] = ResDataList
return
}
diff --git a/controllers/user.go b/controllers/user.go
index 1c689d4..2a7b360 100644
--- a/controllers/user.go
+++ b/controllers/user.go
@@ -15,7 +15,7 @@ type UserController struct {
// @Title CreateUser
// @Description create users
// @Param body body models.User true "body for user content"
-// @Success 200 {int} models.User.Id
+// @Success 200 {int} models.User.ID
// @Failure 403 body is empty
// @router / [post]
func (u *UserController) Post() {
diff --git a/errcode/errcode.go b/errcode/errcode.go
index c47f459..f24d0d5 100644
--- a/errcode/errcode.go
+++ b/errcode/errcode.go
@@ -2,50 +2,51 @@ package errcode
const (
- RECODE_OK = "200"
- RECODE_DBERR = "4001"
- RECODE_NODATA = "4002"
- RECODE_DATAEXIST = "4003"
- RECODE_DATAERR = "4004"
- RECODE_SESSIONERR = "4101"
- RECODE_LOGINERR = "4102"
- RECODE_PARAMERR = "4103"
- RECODE_USERERR = "4104"
- RECODE_ROLEERR = "4105"
- RECODE_PWDERR = "4106"
- RECODE_REQERR = "4201"
- RECODE_IPERR = "4202"
- RECODE_THIRDERR = "4301"
- RECODE_IOERR = "4302"
- RECODE_SERVERERR = "4500"
- RECODE_UNKNOWERR = "4501"
+ RecodeOk = "200"
+ RecodeDbErr = "4001"
+ RecodeNodata = "4002"
+ RecodeDataExist = "4003"
+ RecodeDataErr = "4004"
+ RecodeSessionErr = "4101"
+ RecodeLoginErr = "4102"
+ RecodeParamErr = "4103"
+ RecodeUserErr = "4104"
+ RecodeRoleErr = "4105"
+ RecodePwdErr = "4106"
+ RecodeReqErr = "4201"
+ RecodeIpErr = "4202"
+ RecodeThirdErr = "4301"
+ RecodeIoErr = "4302"
+ RecodeServerErr = "4500"
+ RecodeUnknowErr = "4501"
)
var recodeText = map[string]string{
- RECODE_OK: "成功",
- RECODE_DBERR: "数据库查询错误",
- RECODE_NODATA: "无数据",
- RECODE_DATAEXIST: "数据已存在",
- RECODE_DATAERR: "数据错误",
- RECODE_SESSIONERR: "用户未登录",
- RECODE_LOGINERR: "用户登录失败",
- RECODE_PARAMERR: "请求参数错误",
- RECODE_USERERR: "用户不存在或未激活",
- RECODE_ROLEERR: "登录身份错误",
- RECODE_PWDERR: "密码错误",
- RECODE_REQERR: "非法请求或请求次数受限",
- RECODE_IPERR: "IP受限",
- RECODE_THIRDERR: "第三方系统错误",
- RECODE_IOERR: "文件读写错误",
- RECODE_SERVERERR: "内部错误",
- RECODE_UNKNOWERR: "未知错误",
+ RecodeOk: "成功",
+ RecodeDbErr: "数据库查询错误",
+ RecodeNodata: "无数据",
+ RecodeDataExist: "数据已存在",
+ RecodeDataErr: "数据错误",
+ RecodeSessionErr: "用户未登录",
+ RecodeLoginErr: "用户登录失败",
+ RecodeParamErr: "请求参数错误",
+ RecodeUserErr: "用户不存在或未激活",
+ RecodeRoleErr: "登录身份错误",
+ RecodePwdErr: "密码错误",
+ RecodeReqErr: "非法请求或请求次数受限",
+ RecodeIpErr: "IP受限",
+ RecodeThirdErr: "第三方系统错误",
+ RecodeIoErr: "文件读写错误",
+ RecodeServerErr: "内部错误",
+ RecodeUnknowErr: "未知错误",
}
+//RecodeText get resp string by code
func RecodeText(code string)string {
str,ok := recodeText[code]
if ok {
return str
}
- return RecodeText(RECODE_UNKNOWERR)
+ return RecodeText(RecodeUnknowErr)
}
\ No newline at end of file
diff --git a/models/common.go b/models/common.go
index 0d6ab12..138951d 100644
--- a/models/common.go
+++ b/models/common.go
@@ -5,6 +5,7 @@ import (
"time"
)
+//Time2Str format time to string
func Time2Str() string {
const shortForm = "2006-01-02 15:04:05"
t := time.Now()
@@ -12,6 +13,7 @@ func Time2Str() string {
return str
}
+//CheckToken Check whether the token is legal
func CheckToken(token string) bool {
var ou OtherUser
err := GetUserByToken(token, &ou)
diff --git a/models/cve.go b/models/cve.go
index 9a158dd..e456ebb 100644
--- a/models/cve.go
+++ b/models/cve.go
@@ -210,11 +210,11 @@ func CreateSecurityNotice(sec *SecurityNotice) (SecId int64, err error) {
logs.Info("insert cve_security_notice success, num:, cveNum", num, sec.CveNum)
} else {
logs.Error("insert cve_security_notice failed, cveNum:", sec.CveNum)
- o.Rollback()
+ err = o.Rollback()
return 0, err
}
SecId = sec.SecId
- o.Commit()
+ _ = o.Commit()
} else {
logs.Error("事务创建失败,cveNum:", sec.CveNum)
return 0, errs
@@ -611,7 +611,7 @@ func UpdateVulnCenter(cve *VulnCenter, field ...string) bool {
return true
}
-func GetVulnCenterByCid(cve *VulnCenter,field ...string) error {
+func GetVulnCenterByCid(cve *VulnCenter, field ...string) error {
o := orm.NewOrm()
err := o.Read(cve, field...)
return err
@@ -683,7 +683,7 @@ ON e.cve_id = a.cve_id
WHERE a.cve_id IN (%s)
ORDER BY c.openeuler_score DESC
`
- sql = fmt.Sprintf(sql,cId)
+ sql = fmt.Sprintf(sql, cId)
o := orm.NewOrm()
_, err = o.Raw(sql).QueryRows(&list)
return
diff --git a/models/excel.go b/models/excel.go
index 9762689..e0c8831 100644
--- a/models/excel.go
+++ b/models/excel.go
@@ -2,30 +2,33 @@ package models
import "github.com/astaxie/beego/orm"
+//ExcelExport the export excel row content model
type ExcelExport struct {
Num int64
Score
- CveBrief string `json:"cve_brief"`
- OwnedComponent string `json:"owned_component"`
- SecId int64 `json:"sec_id"`
- Introduction string `json:"introduction"`
- Summary string `json:"summary"`
- Theme string `json:"theme"`
- Description string `json:"description"`
+ CveBrief string `json:"cve_brief"`
+ OwnedComponent string `json:"owned_component"`
+ SecID int64 `json:"sec_id"`
+ Introduction string `json:"introduction"`
+ Summary string `json:"summary"`
+ Theme string `json:"theme"`
+ Description string `json:"description"`
InfluenceComponent string `json:"influence_component" orm:"size(256);null;column(influence_component)"`
- AffectProduct string `json:"affect_product"`
- ReferenceLink string `json:"reference_link"`
- AffectStatus string `json:"affect_status"`
- PublicDate string `json:"public_date"`
- OpenEulerSANum string `json:"openeuler_sa_num" orm:"size(128);column(openeuler_sa_num)"`
+ AffectProduct string `json:"affect_product"`
+ ReferenceLink string `json:"reference_link"`
+ AffectStatus string `json:"affect_status"`
+ PublicDate string `json:"public_date"`
+ OpenEulerSANum string `json:"openeuler_sa_num" orm:"size(128);column(openeuler_sa_num)"`
}
+//Insert Insert a generated excel file record
func (er ExportRecord) Insert() error {
o := orm.NewOrm()
_, err := o.Insert(&er)
return err
}
+//QueryLast query the last excel record
func (er *ExportRecord) QueryLast() error {
o := orm.NewOrm()
err := o.QueryTable(er).OrderBy("-create_time").One(er)
diff --git a/models/giteeissue.go b/models/giteeissue.go
index 86ba822..369ab62 100644
--- a/models/giteeissue.go
+++ b/models/giteeissue.go
@@ -113,14 +113,14 @@ func (v *VectorValue) VctToVectorValue(vector string) bool {
if !ok {
return false
}
- v.AttackVector = util.ReadVmValue(m["AV"])
- v.AttackComplexity = util.ReadVmValue(m["AC"])
- v.Availability = util.ReadVmValue(m["A"])
- v.Confidentiality = util.ReadVmValue(m["C"])
- v.Integrity = util.ReadVmValue(m["I"])
- v.PrivilegesRequired = util.ReadVmValue(m["PR"])
- v.UserInteraction = util.ReadVmValue(m["UI"])
- v.Scope = util.ReadVmValue(m["S"])
+ v.AttackVector = util.ReadVMValue(m["AV"])
+ v.AttackComplexity = util.ReadVMValue(m["AC"])
+ v.Availability = util.ReadVMValue(m["A"])
+ v.Confidentiality = util.ReadVMValue(m["C"])
+ v.Integrity = util.ReadVMValue(m["I"])
+ v.PrivilegesRequired = util.ReadVMValue(m["PR"])
+ v.UserInteraction = util.ReadVMValue(m["UI"])
+ v.Scope = util.ReadVMValue(m["S"])
return true
}
@@ -132,12 +132,12 @@ func (v *VectorValueV2) VctToVectorValue(vector string) bool {
if !ok {
return false
}
- v.AccessVector = util.ReadVmValueV2(m["AV"])
- v.AccessComplexity = util.ReadVmValueV2(m["AC"])
- v.Availability = util.ReadVmValueV2(m["A"])
- v.Confidentiality = util.ReadVmValueV2(m["C"])
- v.IntegrityImpact = util.ReadVmValueV2(m["I"])
- v.Authentication = util.ReadVmValueV2(m["Au"])
+ v.AccessVector = util.ReadVMValueV2(m["AV"])
+ v.AccessComplexity = util.ReadVMValueV2(m["AC"])
+ v.Availability = util.ReadVMValueV2(m["A"])
+ v.Confidentiality = util.ReadVMValueV2(m["C"])
+ v.IntegrityImpact = util.ReadVMValueV2(m["I"])
+ v.Authentication = util.ReadVMValueV2(m["Au"])
return true
}
diff --git a/models/hookevent.go b/models/hookevent.go
index 683cf21..6b8f4d1 100644
--- a/models/hookevent.go
+++ b/models/hookevent.go
@@ -1,7 +1,7 @@
package models
import "time"
-
+//HookUser gitee user model
type HookUser struct {
Id int64
Login string //同下username
@@ -13,6 +13,7 @@ type HookUser struct {
}
+//HookIssue gitee issue model
type HookIssue struct {
Id int64
Number string
@@ -31,6 +32,7 @@ type HookIssue struct {
SecurityHole bool `json:"security_hole"`
}
+//HookRepository gitee repository model
type HookRepository struct {
Id int64
FullName string `json:"full_name"`
@@ -42,6 +44,7 @@ type HookRepository struct {
public bool
}
+//HookComment gitee comment model
type HookComment struct {
User *HookUser //评论的作者信息
HtmlUrl string `json:"html_url"` //评论在码云上的url
diff --git a/models/initdb.go b/models/initdb.go
index 79143c7..6c40301 100644
--- a/models/initdb.go
+++ b/models/initdb.go
@@ -13,7 +13,7 @@ import (
func init() {
Initdb()
}
-
+//InitDb init database
func Initdb() {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil{
diff --git a/models/issue.go b/models/issue.go
index c66a4b7..5293a96 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -13,6 +13,7 @@ import (
var mutex sync.Mutex
+//QueryIssueCveByNum query issue by cve num
func QueryIssueCveByNum(cvenum, repoPath string) (GiteOriginIssue, bool) {
o := orm.NewOrm()
var cve GiteOriginIssue
@@ -25,6 +26,7 @@ func QueryIssueCveByNum(cvenum, repoPath string) (GiteOriginIssue, bool) {
}
}
+//QueryIssue query center
func QueryIssue(days string, prcnum int) ([]VulnCenter, error) {
o := orm.NewOrm()
var vc []VulnCenter
@@ -51,7 +53,7 @@ func GetVulnCenterByCVEID(vc *VulnCenter, cveId int64, fields ...string) error {
err := o.Raw(sqlStr, cveId).QueryRow(vc)
return err
}
-
+//QueryIssueSecurity 查找安全公告
func QueryIssueSecurity(cveId int64) (SecurityNotice, error) {
o := orm.NewOrm()
var sn SecurityNotice
@@ -175,7 +177,7 @@ func UpdatePackageByCveId(pkgStr string, cveId int64) error {
if err != nil {
return err
}
- _, err = o.Raw(delPkgSql, sec.SecId).Exec()
+ _, err = o.Raw(delPkgSql, sec.SecID).Exec()
if err != nil {
err = o.Rollback()
return err
@@ -183,7 +185,7 @@ func UpdatePackageByCveId(pkgStr string, cveId int64) error {
pkgVals := make([]Package, 0)
for _, v := range ps {
pkgUrl := fmt.Sprintf(`https://repo.openeuler.org/openEuler-20.03-LTS/update/aarch64/Packages/%s`, v)
- pv := Package{SecId: sec.SecId, PackName: v, PackUrl: pkgUrl}
+ pv := Package{SecID: sec.SecID, PackName: v, PackUrl: pkgUrl}
pkgVals = append(pkgVals, pv)
}
_, err = o.InsertMulti(1, pkgVals)
@@ -207,7 +209,7 @@ func QueryPackageByCveId(cveId int64) ([]Package, error) {
return res, err
}
-func CreateIssueTemplet(it *IssueTemplate) (issTempId int64, err error) {
+func CreateIssueTemplate(it *IssueTemplate) (issTempId int64, err error) {
o := orm.NewOrm()
var localIt IssueTemplate
errx := o.Raw("select *"+
@@ -298,9 +300,9 @@ func UpdateSecNotice(sec *SecurityNotice) (secId int64, err error) {
sec.Status = localSec.Status
sec.ReferenceLink = localSec.ReferenceLink
if num, err := o.Update(sec); err == nil {
- logs.Info("update cve_security_notice success, SecId: ", num, "CveNum: ", sec.CveNum)
+ logs.Info("update cve_security_notice success, SecID: ", num, "CveNum: ", sec.CveNum)
} else {
- logs.Error("update cve_security_notice failed, SecId:", sec.SecId, "err: ", err)
+ logs.Error("update cve_security_notice failed, SecID:", sec.SecId, "err: ", err)
return 0, err
}
return sec.SecId, nil
@@ -308,7 +310,7 @@ func UpdateSecNotice(sec *SecurityNotice) (secId int64, err error) {
logs.Info("查询 cve_security_notic err, cveId: ", sec.CveId, "err: ", err)
var SecId int64
if SecId, err = o.Insert(sec); err == nil {
- logs.Info("insert cve_security_notice success, SecId: ", SecId, "CveNum: ", sec.CveNum)
+ logs.Info("insert cve_security_notice success, SecID: ", SecId, "CveNum: ", sec.CveNum)
} else {
logs.Error("insert cve_security_notice failed, CveNum:", sec.CveNum, "err: ", err)
return 0, err
@@ -341,6 +343,7 @@ func UpdateIssueCommentId(issueNum, cveNum string, commentId int64) (id int64) {
return
}
+//IssueExistByNumber Determine whether the issue exists
func IssueExistByNumber(number string) bool {
if number == "" {
return false
diff --git a/models/modeldb.go b/models/modeldb.go
index ba9a96c..0b37dce 100644
--- a/models/modeldb.go
+++ b/models/modeldb.go
@@ -182,15 +182,15 @@ type IssueHooks struct {
NoteEvent int8 `orm:"column(note_events);default(1)" description:"评论了Issue/代码等等, 默认1:已监听; 0: 未监听"`
MergeRequestEvent int8 `orm:"column(merge_requests_events);default(1)" description:"合并请求和合并后, 默认1:已监听; 0: 未监听"`
Status int8 `orm:"default(1);column(status)" description:"1:有效; 2:无效"`
- CreateTime string `orm:"size(32);column(create_time)"`
- UpdateTime string `orm:"size(32);column(update_time);null"`
- DeleteTime string `orm:"size(32);column(delete_time);null"`
+ CreateTime string `orm:"size(32);column(create_time)"`
+ UpdateTime string `orm:"size(32);column(update_time);null"`
+ DeleteTime string `orm:"size(32);column(delete_time);null"`
}
type GitPackageTable struct {
TableId int64 `orm:"pk;auto;column(table_id)"`
TableName string `orm:"size(128);column(table_name)" description:"数据库pkginfo下的表名,如:mainline, bringInRely"`
- Brands string `orm:"size(256);column(brands)" description:"对应分支信息"`
+ Brands string `orm:"size(256);column(brands)" description:"对应分支信息"`
}
type GitOpenEuler struct {
@@ -218,13 +218,12 @@ type GitOpenEuler struct {
}
type GitOpenEulerTableRelate struct {
- RelateId int64 `orm:"pk;auto;column(relate_id)"`
- GitId int64 `orm:"index;column(git_id)" description:"GitOpenEuler,外键"`
- Brands string `orm:"size(256);column(brands)" description:"对应分支信息"`
+ RelateId int64 `orm:"pk;auto;column(relate_id)"`
+ GitId int64 `orm:"index;column(git_id)" description:"GitOpenEuler,外键"`
+ Brands string `orm:"size(256);column(brands)" description:"对应分支信息"`
TableName string `orm:"size(256);column(table_name)" description:"数据库pkginfo下的表名,如:mainline, bringInRely"`
}
-
type GitPackageInfo struct {
DetailId int64 `orm:"pk;auto;column(detail_id)"`
GitId int64 `orm:"index;column(git_id)" description:"包id,外键"`
@@ -272,28 +271,28 @@ type GitSubPackProvides struct {
type GitSubPackRequiredby struct {
Id int64 `orm:"pk;auto;column(id)"`
- ProvideId int64 `orm:"index;column(provide_id)"description:"包id,外键"`
+ ProvideId int64 `orm:"index;column(provide_id)" description:" 包id,外键"`
Requiredby string `orm:"size(256);column(requiredb)" description:"依赖该组件的二进制包列表"`
}
type OriginUpstream struct {
CveId int64 `orm:"pk;auto;column(cve_id)"`
- Ids string `orm:"size(256);column(cve_un_ids);unique"description:"唯一编号,根据此字段去重数据, 唯一识别码,可以填cve编号"`
- CveNum string `orm:"size(256);column(cve_num);index"description:"cve编号"`
- UpdateType string `orm:"size(32);column(update_type);"description:"数据上传类型:insert, update, delete"`
- CvePackName string `orm:"size(512);column(cve_packname);index;null"description:"Cve在上游对应的包名"`
- PackName string `orm:"size(512);column(git_packname);index;null"description:"Cve对应的openEuler包名称(或者影响的包名)"`
- Title string `orm:"size(1024);column(cve_title);null"description:"标题"`
- AffectProduct string `orm:"size(512);column(affect_porduct);null"description:"Cve影响的组件, 对应"`
- CnnvdID string `orm:"size(256);column(cnnvd_id);null"description:"Cnnvd_id"`
- CnvdID string `orm:"size(256);column(cnvd_id);null"description:"Cnvd_id"`
- PublishedDate string `orm:"size(32);column(published_date);null"description:"漏洞发布日期"`
- VulStatus string `orm:"size(64);column(vul_status);null"description:"漏洞状态,REJECT, DISPUTED"`
- Status int8 `orm:"default(0);column(cve_status)"description:"0:cve新增;1:数据已变化;2:数据已处理"`
- AffectedScope string `orm:"size(512);column(affected_scope);null"description:"影响范围推理"`
+ Ids string `orm:"size(256);column(cve_un_ids);unique" description:" 唯一编号,根据此字段去重数据, 唯一识别码,可以填cve编号"`
+ CveNum string `orm:"size(256);column(cve_num);index" description:"cve编号"`
+ UpdateType string `orm:"size(32);column(update_type);" description:"数据上传类型:insert, update, delete"`
+ CvePackName string `orm:"size(512);column(cve_packname);index;null" description:"Cve在上游对应的包名"`
+ PackName string `orm:"size(512);column(git_packname);index;null" description:"Cve对应的openEuler包名称(或者影响的包名)"`
+ Title string `orm:"size(1024);column(cve_title);null" description:"标题"`
+ AffectProduct string `orm:"size(512);column(affect_porduct);null" description:"Cve影响的组件, 对应"`
+ CnnvdID string `orm:"size(256);column(cnnvd_id);null" description:"Cnnvd_id"`
+ CnvdID string `orm:"size(256);column(cnvd_id);null" description:"Cnvd_id"`
+ PublishedDate string `orm:"size(32);column(published_date);null" description:"漏洞发布日期"`
+ VulStatus string `orm:"size(64);column(vul_status);null" description:"漏洞状态,REJECT, DISPUTED"`
+ Status int8 `orm:"default(0);column(cve_status)" description:"0:cve新增;1:数据已变化;2:数据已处理"`
+ AffectedScope string `orm:"size(512);column(affected_scope);null" description:"影响范围推理"`
Version string `orm:"size(64);column(version);index" description:"包对应的版本号"`
- AttackLink string `orm:"size(512);column(attack_link);null"description:"攻击链路推理"`
- IsExit int8 `orm:"default(1);column(is_exit)"description:"1: 当前包对应在src-openEuler有对应仓库; 0: 无;2:临时值"`
+ AttackLink string `orm:"size(512);column(attack_link);null" description:"攻击链路推理"`
+ IsExit int8 `orm:"default(1);column(is_exit)" description:"1: 当前包对应在src-openEuler有对应仓库; 0: 无;2:临时值"`
CreateTime string `orm:"size(32);column(create_time)"`
UpdateTime string `orm:"size(32);column(update_time);null"`
DeleteTime string `orm:"size(32);column(delete_time);null"`
@@ -301,21 +300,21 @@ type OriginUpstream struct {
type OriginUpstreamDesc struct {
DescId int64 `orm:"pk;auto;column(desc_id)"`
- CveId int64 `orm:"index;column(cve_id)"description:"OriginUpstream 外键"`
- EnDescription string `orm:"size(8192);column(en_desc);null"description:"cve英文描述"`
- ZhDescription string `orm:"size(8192);column(zh_desc);null"description:"cve中文描述"`
+ CveId int64 `orm:"index;column(cve_id)" description:"OriginUpstream 外键"`
+ EnDescription string `orm:"size(8192);column(en_desc);null" description:"cve英文描述"`
+ ZhDescription string `orm:"size(8192);column(zh_desc);null" description:"cve中文描述"`
}
type OriginUpstreamConfig struct {
ConfId int64 `orm:"pk;auto;column(conf_id)"`
- CveId int64 `orm:"index;column(cve_id)"description:"OriginUpstream 外键"`
- Nodes string `orm:"size(32);column(nodes);null"description:"nodes数组"`
+ CveId int64 `orm:"index;column(cve_id)" description:"OriginUpstream 外键"`
+ Nodes string `orm:"size(32);column(nodes);null" description:"nodes数组"`
}
type OriginUpstreamConfigNode struct {
NodeId int64 `orm:"pk;auto;column(node_id)"`
- ConfId int64 `orm:"index;column(conf_id)"description:"OriginUpstreamConfig 外键"`
- Operator string `orm:"size(256);column(operator);null"description:"operator"`
+ ConfId int64 `orm:"index;column(conf_id)" description:"OriginUpstreamConfig 外键"`
+ Operator string `orm:"size(256);column(operator);null" description:"operator"`
}
type SecurityReviewer struct {
@@ -325,16 +324,16 @@ type SecurityReviewer struct {
type OriginUpstreamConfigNodeCpe struct {
CpeId int64 `orm:"pk;auto;column(cpe_id)"`
- NodeId int64 `orm:"index;column(node_id)"description:"OriginUpstreamConfigNode 外键"`
- Cpe23Uri string `orm:"size(1024);column(cpe_uri);null"description:"cpe"`
- CpeMatchString string `orm:"size(1024);column(cpe_match);null"description:"过滤字符串"`
- Vulnerable string `orm:"size(64);column(vulner_able);null"description:"易受攻击"`
+ NodeId int64 `orm:"index;column(node_id)" description:"OriginUpstreamConfigNode 外键"`
+ Cpe23Uri string `orm:"size(1024);column(cpe_uri);null" description:"cpe"`
+ CpeMatchString string `orm:"size(1024);column(cpe_match);null" description:"过滤字符串"`
+ Vulnerable string `orm:"size(64);column(vulner_able);null" description:"易受攻击"`
}
type OriginUpstreamImpact struct {
ImpactId int64 `orm:"pk;auto;column(impact_id)"`
- CveId int64 `orm:"index;column(cve_id)"description:"OriginUpstream 外键"`
- Impact string `orm:"size(32);column(impact);null"description:"包含v2,v3评分数据"`
+ CveId int64 `orm:"index;column(cve_id)" description:"OriginUpstream 外键"`
+ Impact string `orm:"size(32);column(impact);null" description:"包含v2,v3评分数据"`
}
type OriginUpstreamImpactScore struct {
@@ -352,19 +351,19 @@ type OriginUpstreamImpactScoreV3 struct {
ScoreId int64 `orm:"index;column(score_id)" description:"OriginUpstreamImpactScore 外键"`
BaseScore float64 `orm:"digits(10);decimals(1);column(base_score);null" description:"nvd 基准分"`
VectorString string `orm:"size(256);column(vector_value);null" description:"nvd vector 评分向量值"`
- AttackComplexity string `orm:"size(64);column(attack_complexity);null"description:"攻击复杂性"`
- AttackVector string `orm:"size(64);column(attack_vector);null"description:"攻击目标"`
- AvailabilityImpact string `orm:"size(64);column(availability_impact);null"description:"可用性影响"`
- BaseSeverity string `orm:"size(64);column(base_severity);null"description:"严重程度"`
- UserInteraction string `orm:"size(64);column(user_interaction);null"description:"用户交互"`
- PrivilegesRequired string `orm:"size(64);column(privilege_required);null"description:"所需特权"`
- Version string `orm:"size(64);column(version);null"description:"Cvss版本"`
- ConfidentialityImpact string `orm:"size(64);column(confidentiality_impact);null"description:"可信性影响"`
- IntegrityImpact string `orm:"size(64);column(integrity_impact);null"description:"完整性影响"`
- Scope string `orm:"size(64);column(scope);null"description:"范围"`
+ AttackComplexity string `orm:"size(64);column(attack_complexity);null" description:"攻击复杂性"`
+ AttackVector string `orm:"size(64);column(attack_vector);null" description:"攻击目标"`
+ AvailabilityImpact string `orm:"size(64);column(availability_impact);null" description:"可用性影响"`
+ BaseSeverity string `orm:"size(64);column(base_severity);null" description:"严重程度"`
+ UserInteraction string `orm:"size(64);column(user_interaction);null" description:"用户交互"`
+ PrivilegesRequired string `orm:"size(64);column(privilege_required);null" description:"所需特权"`
+ Version string `orm:"size(64);column(version);null" description:"Cvss版本"`
+ ConfidentialityImpact string `orm:"size(64);column(confidentiality_impact);null" description:"可信性影响"`
+ IntegrityImpact string `orm:"size(64);column(integrity_impact);null" description:"完整性影响"`
+ Scope string `orm:"size(64);column(scope);null" description:"范围"`
ImpactScore float64 `orm:"digits(10);decimals(1);column(impact_score);null" description:"nvd 影响评分"`
ExploitabilityScore float64 `orm:"digits(10);decimals(1);column(exploitability_score);null" description:"nvd 可利用性评分"`
- CveLevel string `orm:"size(32);column(cve_level);null"description:"致命(Critical) >= 9.0;严重(High)>=7.0&&<=8.9;中等(Medium)>4.0 && <=6.9;一般(Low)<=4.0;其他"`
+ CveLevel string `orm:"size(32);column(cve_level);null" description:"致命(Critical) >= 9.0;严重(High)>=7.0&&<=8.9;中等(Medium)>4.0 && <=6.9;一般(Low)<=4.0;其他"`
}
type OriginUpstreamImpactScoreV2 struct {
@@ -373,72 +372,72 @@ type OriginUpstreamImpactScoreV2 struct {
AcInsufInfo string `orm:"size(64);column(acinsuf_info);null" description:"nvd vector 原始值"`
BaseScore float64 `orm:"digits(10);decimals(1);column(base_score);null" description:"nvd 基准分"`
VectorString string `orm:"size(256);column(vector_value);null" description:"nvd vector 评分向量值"`
- AccessComplexity string `orm:"size(64);column(access_complexity);null"description:"攻击复杂性"`
- Authentication string `orm:"size(64);column(authentication);null"description:"身份认证"`
- AvailabilityImpact string `orm:"size(64);column(availability_impact);null"description:"可用性影响"`
- Version string `orm:"size(64);column(version);null"description:"Cvss版本"`
- ConfidentialityImpact string `orm:"size(64);column(confidentiality_impact);null"description:"可信性影响"`
- IntegrityImpact string `orm:"size(64);column(integrity_impact);null"description:"完整性影响"`
- AccessVector string `orm:"size(64);column(access_vector);null"description:"攻击目标"`
- UserInteractionRequired string `orm:"size(64);column(user_interaction_required);null"description:"需要用户交互"`
- Severity string `orm:"size(64);column(severity);null"description:"严重程度"`
- ObtainUserPrivilege string `orm:"size(64);column(obtain_user_privilege);null"description:"获取用户特权"`
- ObtainAllPrivilege string `orm:"size(64);column(obtain_all_privilege);null"description:"获取所有特权"`
- ObtainOtherPrivilege string `orm:"size(64);column(obtain_other_privilege);null"description:"获取其他特权"`
+ AccessComplexity string `orm:"size(64);column(access_complexity);null" description:"攻击复杂性"`
+ Authentication string `orm:"size(64);column(authentication);null" description:"身份认证"`
+ AvailabilityImpact string `orm:"size(64);column(availability_impact);null" description:"可用性影响"`
+ Version string `orm:"size(64);column(version);null" description:"Cvss版本"`
+ ConfidentialityImpact string `orm:"size(64);column(confidentiality_impact);null" description:"可信性影响"`
+ IntegrityImpact string `orm:"size(64);column(integrity_impact);null" description:"完整性影响"`
+ AccessVector string `orm:"size(64);column(access_vector);null" description:"攻击目标"`
+ UserInteractionRequired string `orm:"size(64);column(user_interaction_required);null" description:"需要用户交互"`
+ Severity string `orm:"size(64);column(severity);null" description:"严重程度"`
+ ObtainUserPrivilege string `orm:"size(64);column(obtain_user_privilege);null" description:"获取用户特权"`
+ ObtainAllPrivilege string `orm:"size(64);column(obtain_all_privilege);null" description:"获取所有特权"`
+ ObtainOtherPrivilege string `orm:"size(64);column(obtain_other_privilege);null" description:"获取其他特权"`
ImpactScore float64 `orm:"digits(10);decimals(1);column(impact_score);null" description:"nvd 影响评分"`
ExploitabilityScore float64 `orm:"digits(10);decimals(1);column(exploitability_score);null" description:"nvd 可利用性评分"`
- CveLevel string `orm:"size(32);column(cve_level);null"description:"致命(Critical) >= 9.0;严重(High)>=7.0&&<=8.9;中等(Medium)>4.0 && <=6.9;一般(Low)<=4.0;其他"`
+ CveLevel string `orm:"size(32);column(cve_level);null" description:"致命(Critical) >= 9.0;严重(High)>=7.0&&<=8.9;中等(Medium)>4.0 && <=6.9;一般(Low)<=4.0;其他"`
}
type OriginUpstreamPoc struct {
PocId int64 `orm:"pk;auto;column(poc_id)"`
- CveId int64 `orm:"index;column(cve_id)"description:"OriginUpstream 外键"`
- Source string `orm:"size(512);column(source);null"description:"来源"`
- Date string `orm:"size(32);column(date);null"description:"日期"`
- Path string `orm:"size(512);column(path);null"description:"文件路径"`
- Dbindex string `orm:"size(512);column(dbindex);null"description:"数据库索引"`
- Url string `orm:"size(512);column(url);null"description:"下载链接"`
- Desc string `orm:"size(2048);column(desc);null"description:"说明"`
+ CveId int64 `orm:"index;column(cve_id)" description:"OriginUpstream 外键"`
+ Source string `orm:"size(512);column(source);null" description:"来源"`
+ Date string `orm:"size(32);column(date);null" description:"日期"`
+ Path string `orm:"size(512);column(path);null" description:"文件路径"`
+ Dbindex string `orm:"size(512);column(dbindex);null" description:"数据库索引"`
+ Url string `orm:"size(512);column(url);null" description:"下载链接"`
+ Desc string `orm:"size(2048);column(desc);null" description:"说明"`
}
type OriginUpstreamEvent struct {
EventId int64 `orm:"pk;auto;column(event_id)"`
- CveId int64 `orm:"index;column(cve_id)"description:"OriginUpstream 外键"`
- Title string `orm:"size(512);column(title);null"description:"标题"`
- Date string `orm:"size(32);column(date);null"description:"日期"`
- Url string `orm:"size(512);column(url);null"description:"连接"`
- Description string `orm:"size(2048);column(description);null"description:"说明"`
+ CveId int64 `orm:"index;column(cve_id)" description:"OriginUpstream 外键"`
+ Title string `orm:"size(512);column(title);null" description:"标题"`
+ Date string `orm:"size(32);column(date);null" description:"日期"`
+ Url string `orm:"size(512);column(url);null" description:"连接"`
+ Description string `orm:"size(2048);column(description);null" description:"说明"`
}
type OriginUpstreamReference struct {
RefId int64 `orm:"pk;auto;column(ref_id)"`
- CveId int64 `orm:"index;column(cve_id)"description:"OriginUpstream 外键"`
- Name string `orm:"size(512);column(name);null"description:"名称"`
- Refsource string `orm:"size(512);column(refsource);null"description:"参考来源"`
- Url string `orm:"size(512);column(url);null"description:"链接"`
- Tags string `orm:"size(2048);column(tags);null"description:"tags"`
+ CveId int64 `orm:"index;column(cve_id)" description:"OriginUpstream 外键"`
+ Name string `orm:"size(512);column(name);null" description:"名称"`
+ Refsource string `orm:"size(512);column(refsource);null" description:"参考来源"`
+ Url string `orm:"size(512);column(url);null" description:"链接"`
+ Tags string `orm:"size(2048);column(tags);null" description:"tags"`
}
type OriginUpstreamVulType struct {
VulId int64 `orm:"pk;auto;column(vul_id)"`
- CveId int64 `orm:"index;column(cve_id)"description:"OriginUpstream 外键"`
- Cwe string `orm:"size(256);column(cwe);null"description:"Cwe编号"`
- EnDesc string `orm:"size(2048);column(en_desc);null"description:"英文描述"`
- ZhDesc string `orm:"size(2048);column(zh_desc);null"description:"中文描述"`
+ CveId int64 `orm:"index;column(cve_id)" description:"OriginUpstream 外键"`
+ Cwe string `orm:"size(256);column(cwe);null" description:"Cwe编号"`
+ EnDesc string `orm:"size(2048);column(en_desc);null" description:"英文描述"`
+ ZhDesc string `orm:"size(2048);column(zh_desc);null" description:"中文描述"`
}
type OriginUpstreamFixSuggest struct {
FixId int64 `orm:"pk;auto;column(fix_id)"`
- CveId int64 `orm:"index;column(cve_id)"description:"OriginUpstream 外键"`
- Detail string `orm:"size(1024);column(detail);null"description:"细节"`
+ CveId int64 `orm:"index;column(cve_id)" description:"OriginUpstream 外键"`
+ Detail string `orm:"size(1024);column(detail);null" description:"细节"`
}
type OriginUpstreamFixSuggestRef struct {
FixRefId int64 `orm:"pk;auto;column(fix_ref_id)"`
- FixId int64 `orm:"index;column(fix_id)"description:"OriginUpstreamFixSuggest 外键"`
- Refsource string `orm:"size(512);column(refsource);null"description:"参考文献,包含以下内容"`
- Url string `orm:"size(1024);column(url);null"description:"链接"`
- Name string `orm:"size(1024);column(name);null"description:"名称"`
+ FixId int64 `orm:"index;column(fix_id)" description:"OriginUpstreamFixSuggest 外键"`
+ Refsource string `orm:"size(512);column(refsource);null" description:"参考文献,包含以下内容"`
+ Url string `orm:"size(1024);column(url);null" description:"链接"`
+ Name string `orm:"size(1024);column(name);null" description:"名称"`
}
//GiteOriginIssue 码云上已经存在的issue
@@ -458,7 +457,7 @@ type GiteOriginIssue struct {
IssueType string `json:"issue_type" description:"issue 类型"`
IssueExistTpl bool `json:"issue_exist_tpl" description:"此 issue 是否有对应的模板"`
SecurityHole bool `json:"security_hole" description:"是否为安全漏洞"`
- Status int8 `orm:"default(0);column(proc_status)"description:"0:cve新增;1:数据已变化;2:数据已处理"`
+ Status int8 `orm:"default(0);column(proc_status)" description:"0:cve新增;1:数据已变化;2:数据已处理"`
IssueCreateAt time.Time `json:"issue_create_at" orm:"null" description:"issue 创建的时间"`
IssueUpdateAt time.Time `json:"issue_update_at" orm:"null" description:"issue 更新的时间"`
IssueFinishAt time.Time `json:"issue_finish_at" orm:"null" description:"issue 关闭的时间"`
@@ -474,52 +473,50 @@ type OriginUpstreamFixSuggestRefTag struct {
}
type OriginExcel struct {
- CveId int64 `orm:"pk;auto;column(cve_id)"`
- CveNum string `orm:"size(256);column(cve_num)" description:"cve编号"`
- CveUrl string `orm:"size(2048);column(cve_url);null" description:"cve下载链接"`
- CveVersion string `orm:"size(256);column(cve_version);null" description:"漏洞归属版本"`
- PackName string `orm:"size(128);column(pack_name);null" description:"包名"`
- ScoreType string `orm:"size(16);column(score_type);null" description:"评分类型:v3"`
- NVDScore float64 `orm:"digits(10);decimals(1);column(nvd_score);null" description:"nvd评分"`
- CveLevel string `orm:"size(32);column(cve_level);null" description:"致命(Critical);严重(High);中等(Medium);一般(Low);其他"`
- CveDesc string `orm:"size(4096);column(cve_desc);null" description:"漏洞简述"`
- RepairTime string `orm:"size(32);column(repair_time);null" description:"cve发布时间"`
- NVDVector string `orm:"size(256);column(vector_value);null" description:"nvd 评分向量"`
- AttackVector string `orm:"size(256);column(attack_vector);null" description:"nvd 3.0评分"`
- AccessVector string `orm:"size(256);column(access_vector);null" description:"nvd 2.0 评分"`
- AttackComplexity string `orm:"size(64);column(attack_complexity);null"`
- AccessComplexity string `orm:"size(64);column(access_complexity);null"`
- PrivilegeRequired string `orm:"size(64);column(privilege_required);null"`
- UserInteraction string `orm:"size(64);column(user_interaction);null"`
- Scope string `orm:"size(64);column(scope);null"`
- Confidentiality string `orm:"size(64);column(confidentiality);null"`
- Integrity string `orm:"size(64);column(integrity);null"`
- Availability string `orm:"size(64);column(availability);null"`
- Authentication string `orm:"size(64);column(authentication);null"`
- CveStatus int8 `orm:"default(0);column(cve_status);null" description:"0:未处理;1:已修改;2:已处理; 3: 数据错误,不做处理"`
- CreateTime string `orm:"type(datetime);column(create_time);null"`
- UpdateTime string `orm:"type(datetime);column(update_time);null"`
- DeleteTime string `orm:"type(datetime);column(delete_time);null"`
-
+ CveId int64 `orm:"pk;auto;column(cve_id)"`
+ CveNum string `orm:"size(256);column(cve_num)" description:"cve编号"`
+ CveUrl string `orm:"size(2048);column(cve_url);null" description:"cve下载链接"`
+ CveVersion string `orm:"size(256);column(cve_version);null" description:"漏洞归属版本"`
+ PackName string `orm:"size(128);column(pack_name);null" description:"包名"`
+ ScoreType string `orm:"size(16);column(score_type);null" description:"评分类型:v3"`
+ NVDScore float64 `orm:"digits(10);decimals(1);column(nvd_score);null" description:"nvd评分"`
+ CveLevel string `orm:"size(32);column(cve_level);null" description:"致命(Critical);严重(High);中等(Medium);一般(Low);其他"`
+ CveDesc string `orm:"size(4096);column(cve_desc);null" description:"漏洞简述"`
+ RepairTime string `orm:"size(32);column(repair_time);null" description:"cve发布时间"`
+ NVDVector string `orm:"size(256);column(vector_value);null" description:"nvd 评分向量"`
+ AttackVector string `orm:"size(256);column(attack_vector);null" description:"nvd 3.0评分"`
+ AccessVector string `orm:"size(256);column(access_vector);null" description:"nvd 2.0 评分"`
+ AttackComplexity string `orm:"size(64);column(attack_complexity);null"`
+ AccessComplexity string `orm:"size(64);column(access_complexity);null"`
+ PrivilegeRequired string `orm:"size(64);column(privilege_required);null"`
+ UserInteraction string `orm:"size(64);column(user_interaction);null"`
+ Scope string `orm:"size(64);column(scope);null"`
+ Confidentiality string `orm:"size(64);column(confidentiality);null"`
+ Integrity string `orm:"size(64);column(integrity);null"`
+ Availability string `orm:"size(64);column(availability);null"`
+ Authentication string `orm:"size(64);column(authentication);null"`
+ CveStatus int8 `orm:"default(0);column(cve_status);null" description:"0:未处理;1:已修改;2:已处理; 3: 数据错误,不做处理"`
+ CreateTime string `orm:"type(datetime);column(create_time);null"`
+ UpdateTime string `orm:"type(datetime);column(update_time);null"`
+ DeleteTime string `orm:"type(datetime);column(delete_time);null"`
}
-
type GitRepoGroups struct {
- GroupId int64 `orm:"pk;auto;column(group_id)"`
+ GroupId int64 `orm:"pk;auto;column(group_id)"`
GroupName string `orm:"index"`
}
//GiteRepo 码云仓库
type GiteRepo struct {
- RepoId int64 `orm:"pk;auto;column(repo_id)"`
- GroupId int64 `orm:"index;column(group_id)"description:"GitRepoGroups 外键"`
- OrgId int64
- OrgPath string `orm:"size(128);column(org_path);null" description:"组织名称"`
- Path string `orm:"size(512);column(path);null" description:"仓库名称"`
- Status int8 `orm:"default(0);column(status);null" description:"1: 正常;2:已删除"`
- Public bool
- Private bool
- Fork bool
+ RepoId int64 `orm:"pk;auto;column(repo_id)"`
+ GroupId int64 `orm:"index;column(group_id)" description:"GitRepoGroups 外键"`
+ OrgId int64
+ OrgPath string `orm:"size(128);column(org_path);null" description:"组织名称"`
+ Path string `orm:"size(512);column(path);null" description:"仓库名称"`
+ Status int8 `orm:"default(0);column(status);null" description:"1: 正常;2:已删除"`
+ Public bool
+ Private bool
+ Fork bool
CreateTime string `orm:"type(datetime);column(create_time);null"`
UpdateTime string `orm:"type(datetime);column(update_time);null"`
DeleteTime string `orm:"type(datetime);column(delete_time);null"`
@@ -527,10 +524,10 @@ type GiteRepo struct {
//GiteMember 码云仓库成员
type GiteRepoMember struct {
- MemBerId int64 `orm:"pk;auto;column(repo_id)"`
- GroupId int64 `orm:"index;column(group_id)"description:"GitRepoGroups 外键"`
+ MemBerId int64 `orm:"pk;auto;column(repo_id)"`
+ GroupId int64 `orm:"index;column(group_id)" description:"GitRepoGroups 外键"`
MemberName string `orm:"size(512);column(member_name);null" description:"成员名称"`
- MemberType string `orm:"size(128);column(member_type);null" description:"Maintainer;Committer"`
+ MemberType string `orm:"size(128);column(member_type);null" description:"Maintainer;Committer"`
CreateTime string `orm:"type(datetime);column(create_time);null"`
UpdateTime string `orm:"type(datetime);column(update_time);null"`
DeleteTime string `orm:"type(datetime);column(delete_time);null"`
@@ -539,7 +536,7 @@ type GiteRepoMember struct {
//GiteRepoBranch 码云仓库分支
type GiteRepoBranch struct {
Id int64 `orm:"pk;auto"`
- RepoId int64 `orm:"index;column(repo_id)"description:"GiteRepo 外键"`
+ RepoId int64 `orm:"index;column(repo_id)" description:"GiteRepo 外键"`
ProtectionUrl string
Name string
Protected string
@@ -563,7 +560,7 @@ func CreateDb() bool {
orm.RegisterModelWithPrefix(prefix, new(OtherUser), new(AdminUser), new(VulnCenter),
new(OpenEulerSA), new(Score), new(SecurityNotice), new(Package),
new(IssueTemplate), new(ScoreRecord), new(IssueHooks),
- new(GitPackageTable), new(GitOpenEuler), new(GitPackageInfo), new(GitSubPack),new(GitOpenEulerTableRelate),
+ new(GitPackageTable), new(GitOpenEuler), new(GitPackageInfo), new(GitSubPack), new(GitOpenEulerTableRelate),
new(SecurityReviewer), new(GitSubPackRequire), new(GitSubPackProvides), new(GitSubPackRequiredby),
new(IpWhite), new(OriginUpstream), new(OriginUpstreamDesc),
new(OriginUpstreamConfig), new(OriginUpstreamConfigNode),
@@ -571,9 +568,9 @@ func CreateDb() bool {
new(OriginUpstreamImpactScoreV3), new(OriginUpstreamImpactScoreV2),
new(OriginUpstreamPoc), new(OriginUpstreamEvent), new(OriginUpstreamReference), new(OriginUpstreamVulType),
new(OriginUpstreamFixSuggest), new(OriginUpstreamFixSuggestRefTag),
- new(OriginUpstreamFixSuggestRef), new(GiteOriginIssue), new(OriginExcel), new(ExportRecord),new(GitRepoGroups),
- new(GiteRepo),new(GiteRepoMember),new(GiteRepoBranch),
- )
+ new(OriginUpstreamFixSuggestRef), new(GiteOriginIssue), new(OriginExcel), new(ExportRecord), new(GitRepoGroups),
+ new(GiteRepo), new(GiteRepoMember), new(GiteRepoBranch),
+ )
logs.Info("table create success!")
errosyn := orm.RunSyncdb("default", false, true)
if errosyn != nil {
diff --git a/models/user.go b/models/user.go
index d4bebb2..99dbfc5 100644
--- a/models/user.go
+++ b/models/user.go
@@ -40,7 +40,7 @@ func GetUser(uid string) (u *User, err error) {
if u, ok := UserList[uid]; ok {
return u, nil
}
- return nil, errors.New("User not exists")
+ return nil, errors.New(" User not exists")
}
func GetAllUsers() map[string]*User {
@@ -69,7 +69,7 @@ func UpdateUser(uid string, uu *User) (a *User, err error) {
}
return u, nil
}
- return nil, errors.New("User Not Exist")
+ return nil, errors.New(" User Not Exist")
}
func Login(username, password string) bool {
diff --git a/models/ymal.go b/models/ymal.go
index 8313eff..c96fa7a 100644
--- a/models/ymal.go
+++ b/models/ymal.go
@@ -229,7 +229,7 @@ func CreateYamlSubPackRequiredb(gs *GitSubPackRequiredby) (Id int64, typex strin
// 创建
var Id int64
if Id, err = o.Insert(gs); err == nil {
- logs.Info("insert cve_git_sub_pack_requiredby success, Id: ", Id, "requiredb: ", gs.Requiredby)
+ logs.Info("insert cve_git_sub_pack_requiredby success, ID: ", Id, "requiredb: ", gs.Requiredby)
} else {
logs.Error("insert cve_git_sub_pack_requiredby failed, ", "requiredb: ", gs.Requiredby, "err: ", err)
return 0, "insert", err
diff --git a/task/cve.go b/task/cve.go
index 0bb41ba..3854eaf 100644
--- a/task/cve.go
+++ b/task/cve.go
@@ -8,25 +8,27 @@ import (
"github.com/astaxie/beego/logs"
)
-func ProcCveOriginData(prcnum, days , openeulernum int, cveRef, owner string)(bool, error) {
+//ProcCveOriginData 处理api获取的原始数据
+func ProcCveOriginData(prcNum, days , openeulerNum int, cveRef, owner string)(bool, error) {
// 处理api获取的原始数据
- ok, err := taskhandler.GetCveOriginData(prcnum, days, openeulernum, cveRef)
+ ok, err := taskhandler.GetCveOriginData(prcNum, days, openeulerNum, cveRef)
if !ok {
logs.Error("接口上的原始数据处理失败(GetCveOriginData), err: ", err)
}
// 处理excel的原始数据
- okx, errx := taskhandler.GetCveOriginExcelData(prcnum, days, openeulernum, cveRef)
+ okx, err := taskhandler.GetCveOriginExcelData(prcNum, days, openeulerNum, cveRef)
if !okx {
- logs.Error("excel数据处理失败(GetCveOriginExcelData), errx: ", errx)
+ logs.Error("excel数据处理失败(GetCveOriginExcelData), errx: ", err)
}
// 兼容已创建的issue数据
- oki, erri := taskhandler.GetCveIssueData(prcnum, days, openeulernum, cveRef, owner)
+ oki, err := taskhandler.GetCveIssueData(prcNum, days, openeulerNum, cveRef, owner)
if !oki {
- logs.Error("issue数据处理失败(GetCveIssueData), erri: ", erri)
+ logs.Error("issue数据处理失败(GetCveIssueData), erri: ", err)
}
return true, nil
}
+//ParamsCveOriginData 处理cve原始数据
func ParamsCveOriginData() error{
defer common.Catchs()
// 查询需要处理的cve, 1:新增;2:修改
diff --git a/task/genexcel.go b/task/genexcel.go
index 05f3454..db53e82 100644
--- a/task/genexcel.go
+++ b/task/genexcel.go
@@ -1,4 +1,3 @@
-// Issues that have been normally closed are exported to excel files
package task
import (
@@ -9,6 +8,7 @@ import (
"github.com/astaxie/beego/logs"
)
+//GenExcelData generate excel data
func GenExcelData() error{
defer common.Catchs()
// 查询需要处理的cve, 1:新增;2:修改
diff --git a/task/grabissue.go b/task/grabissue.go
index cb84268..a7ea7d5 100644
--- a/task/grabissue.go
+++ b/task/grabissue.go
@@ -9,6 +9,7 @@ import (
"os"
)
+//GetIssueData get the issue data
func GetIssueData() error{
defer common.Catchs()
// 查询需要处理的cve, 1:新增;2:修改
diff --git a/task/inittask.go b/task/inittask.go
index 648bb6c..453838a 100644
--- a/task/inittask.go
+++ b/task/inittask.go
@@ -6,9 +6,10 @@ import (
"github.com/astaxie/beego/toolbox"
)
-func CheckOriCveTask(oricvecheck string, ch *chan bool) {
+//CheckOriCveTask 校验原始cve数据
+func CheckOriCveTask(oriCveCheck string, ch *chan bool) {
logs.Info("校验原始cve数据 task start")
- CheckTask := toolbox.NewTask("CheckOriCve", oricvecheck, CheckOriCve)
+ CheckTask := toolbox.NewTask("CheckOriCve", oriCveCheck, CheckOriCve)
err := CheckTask.Run()
if err != nil {
logs.Error("创建校验原始cve数据失败 ,err:", err)
@@ -22,9 +23,10 @@ func CheckOriCveTask(oricvecheck string, ch *chan bool) {
//defer toolbox.StopTask()
}
-func InitYamlTask(getymal string, ch *chan bool) {
+//InitYamlTask 获取yaml数据源
+func InitYamlTask(getYaml string, ch *chan bool) {
logs.Info("获取yaml数据源 task start")
- YamlTask := toolbox.NewTask("GetYamlData", getymal, GetYamlData)
+ YamlTask := toolbox.NewTask("GetYamlData", getYaml, GetYamlData)
err := YamlTask.Run()
if err != nil {
logs.Error("创建获取yaml数据源任务失败 ,err:", err)
@@ -38,9 +40,10 @@ func InitYamlTask(getymal string, ch *chan bool) {
//defer toolbox.StopTask()
}
-func InitCveTask(getcve string, ch *chan bool) {
+//InitCveTask 将cve原始数据生成cve库
+func InitCveTask(getCve string, ch *chan bool) {
logs.Info("将cve原始数据生成cve库 task start")
- CveTask := toolbox.NewTask("ParamsCveOriginData", getcve, ParamsCveOriginData)
+ CveTask := toolbox.NewTask("ParamsCveOriginData", getCve, ParamsCveOriginData)
err := CveTask.Run()
if err != nil {
logs.Error("创建Cve任务失败 ,err:", err)
@@ -54,10 +57,11 @@ func InitCveTask(getcve string, ch *chan bool) {
//defer toolbox.StopTask()
}
-func InitIssueTask(getissue string, ch *chan bool) {
+//InitIssueTask 获取已经创建的issue数据源
+func InitIssueTask(getIssue string, ch *chan bool) {
logs.Info("获取已经创建的issue数据源 task start")
//taskhandler.GrabIssueByOrg("8457c66db66955376519059b97e33dd1","src-openeuler")
- issueTask := toolbox.NewTask("GetIssueData", getissue, GetIssueData)
+ issueTask := toolbox.NewTask("GetIssueData", getIssue, GetIssueData)
err := issueTask.Run()
if err != nil {
logs.Error("获取已经创建的issue数据源任务失败 ,err:", err)
@@ -71,9 +75,10 @@ func InitIssueTask(getissue string, ch *chan bool) {
//defer toolbox.StopTask()
}
-func InitIssueToken(issueoath string, ch *chan bool) {
+//InitIssueToken 执行获取token任务开始
+func InitIssueToken(issueOath string, ch *chan bool) {
logs.Info("执行获取token任务开始")
- TokenTask := toolbox.NewTask("GetGiteeToken", issueoath, GetGiteeToken)
+ TokenTask := toolbox.NewTask("GetGiteeToken", issueOath, GetGiteeToken)
err := TokenTask.Run()
if err != nil {
logs.Error("create Issue token task failed ,err:", err)
@@ -87,6 +92,7 @@ func InitIssueToken(issueoath string, ch *chan bool) {
//defer toolbox.StopTask()
}
+//CreatTask 执行创建issue任务开始
func CreatTask(createIssue string, ch *chan bool) {
logs.Info("执行创建issue任务开始")
cIssueTask := toolbox.NewTask("CreateIssue", createIssue, CreateIssue)
@@ -103,6 +109,7 @@ func CreatTask(createIssue string, ch *chan bool) {
//defer toolbox.StopTask()
}
+//GenSAExcelTask 执行issue生成excel任务开始
func GenSAExcelTask(genExcel string, ch *chan bool) {
logs.Info("执行issue生成excel任务开始")
genExcelTask := toolbox.NewTask("GenExcelData", genExcel, GenExcelData)
@@ -119,7 +126,7 @@ func GenSAExcelTask(genExcel string, ch *chan bool) {
//defer toolbox.StopTask()
}
-// 定时任务初始化
+//InitTask 定时任务初始化
func InitTask() {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil {
diff --git a/task/issuetask.go b/task/issuetask.go
index 8d04fd6..de3c812 100644
--- a/task/issuetask.go
+++ b/task/issuetask.go
@@ -12,23 +12,23 @@ import (
"strings"
)
-
-func GetGiteeToken() error{
+//GetGiteeToken 获取码云API TOKEN
+func GetGiteeToken() error {
defer common.Catchs()
// 查询需要处理的cve, 1:新增;2:修改
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
logs.Error("config init error:", err)
return err
}
- clientId := BConfig.String("gitee::client_id")
- if clientId == "" {
- logs.Error("config gitee::clientId error: invalid value is ",clientId)
+ clientID := BConfig.String("gitee::client_id")
+ if clientID == "" {
+ logs.Error("config gitee::clientID error: invalid value is ", clientID)
return errors.New("value is nil")
}
clientSecret := beego.AppConfig.String("gitee::client_secret")
- if clientSecret == "" {
- logs.Error("config gitee::clientSecret error: invalid value is ",clientSecret)
+ if clientSecret == "" {
+ logs.Error("config gitee::clientSecret error: invalid value is ", clientSecret)
return errors.New("value is nil")
}
@@ -48,24 +48,24 @@ func GetGiteeToken() error{
logs.Error("config gitee::scope error: value is nil")
return errors.New("value is nil")
}
- logs.Info(clientId,clientSecret,password)
+ logs.Info(clientID, clientSecret, password)
var gt taskhandler.GiteeToken
gt.GrantType = "password"
gt.UserName = Email
gt.Password = password
- gt.ClientId = clientId
+ gt.ClientID = clientID
gt.ClientSecret = clientSecret
gt.Scope = Scope
taskhandler.GetOautToken(gt)
return nil
}
-
-func CreateIssue() error{
+//CreateIssue 创建issue
+func CreateIssue() error {
defer common.Catchs()
// 查询需要处理的cve, 1:新增;2:修改
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
logs.Error("config init error:", err)
return err
}
@@ -81,7 +81,7 @@ func CreateIssue() error{
}
beforeTime := common.GetBeforeTime(days)
cveData, err := models.QueryIssue(beforeTime, prcnum)
- if err == nil && len(cveData) > 0{
+ if err == nil && len(cveData) > 0 {
logs.Info(cveData)
} else {
logs.Info("无cve数据可以使用, 当前时间: ", common.GetCurTime())
@@ -114,7 +114,7 @@ func CreateIssue() error{
}
// 处理每一条cve数据
if issueValue.Status == 0 {
- err := ProcIssue(issueValue , accessToken, owner, path)
+ err := ProcIssue(issueValue, accessToken, owner, path)
if err != nil {
logs.Error("创建issue失败, cvenum: ", issueValue.CveNum, "err,err: ", err)
continue
@@ -130,7 +130,8 @@ func CreateIssue() error{
return nil
}
-func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path string) error{
+//ProcUpdateIssue 更新issue
+func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path string) error {
// 查询修改评分
sr, err := models.QueryIssueScoreRecord(issueValue.CveId, 0)
if err != nil {
@@ -151,24 +152,25 @@ func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path stri
issueValue, lit)
if err != nil {
logs.Error("更新issue 模板失败, cveId: ", issueValue.CveId, "err: ", err)
- return err
+ return err
}
// 更新issue状态
models.UpdateIssueStatus(issueValue, 2)
// 更新分数状态
models.UpdateIssueScore(issueValue, 2)
- templetId, err := models.CreateIssueTemplet(&lit)
+ templetID, err := models.CreateIssueTemplate(&lit)
if err != nil {
logs.Error("修改issue模板失败, cveId: ", issueValue.CveId, "err: ", err)
return err
}
models.UpdateIssueScoreRe(issueValue, 1)
- logs.Info("更新issue模板成功,cveId: ", issueValue.CveId, "templetId: ", templetId)
+ logs.Info("更新issue模板成功,cveId: ", issueValue.CveId, "templetID: ", templetID)
}
return nil
}
-func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) error{
+//ProcIssue 处理issue
+func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) error {
assignee := ""
brandArry := []string{}
sn, err := models.QueryIssueSecurity(issueValue.CveId)
@@ -177,7 +179,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er
logs.Info("查询安全信息:sn: ", sn)
// 获取issue处理人
gitYaml, ok := models.QueryCveOpeneulerdata(issueValue.PackName, issueValue.CveVersion)
- if !ok || gitYaml.MainTainer == "" || len(gitYaml.MainTainer) < 1{
+ if !ok || gitYaml.MainTainer == "" || len(gitYaml.MainTainer) < 1 {
assignee, err = taskhandler.GetCollaboratorInfo(accessToken, owner, path)
if assignee == "" {
logs.Error("获取仓库: owner:", owner, "path:", path, "分析人失败", "err:", err, "cveid: ", issueValue.CveId)
@@ -187,7 +189,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er
assignee = gitYaml.MainTainer
// 查询受影响的分支信息
gt, errgt := models.QueryCveBrands(gitYaml.GitId)
- if errgt == nil{
+ if errgt == nil {
for _, t := range gt {
if t.Brands != "" && t.Brands != "master" && len(t.Brands) > 1 {
brandArry = append(brandArry, t.Brands)
@@ -214,7 +216,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er
}
}
if branchs != "" && len(branchs) > 1 {
- branchs = branchs[:len(branchs) - 1]
+ branchs = branchs[:len(branchs)-1]
}
} else {
branchs, errBrands = taskhandler.GetBranchesInfo(accessToken, owner, path)
@@ -231,19 +233,11 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er
// 存储安全公告相关信息
var sec models.SecurityNotice
taskhandler.CreateSecNoticeData(&sec, issueValue, path, branchs)
- secId, err := models.UpdateSecNotice(&sec)
+ secID, err := models.UpdateSecNotice(&sec)
if err != nil {
logs.Error("更新安全信息失败,CveNum: ", issueValue.CveNum, "path: ", path, "err: ", err)
return err
- } else {
- logs.Info("更新安全信息成功, secId: ", secId, "cveNum: ", issueValue.CveNum)
}
+ logs.Info("更新安全信息成功, secID: ", secID, "cveNum: ", issueValue.CveNum)
return nil
}
-
-
-
-
-
-
-
diff --git a/task/oricvecheck.go b/task/oricvecheck.go
index a229341..4b0cee6 100644
--- a/task/oricvecheck.go
+++ b/task/oricvecheck.go
@@ -8,21 +8,22 @@ import (
"github.com/astaxie/beego/logs"
)
-func CheckOriCve() error{
+//CheckOriCve 检查原始数据的CVE
+func CheckOriCve() error {
defer common.Catchs()
// 查询需要处理的cve, 1:新增;2:修改
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
logs.Error("config init error:", err)
return err
}
// 单次处理的数据量
- prcnum, err := BConfig.Int("crontab::prcnum")
+ prcNum, err := BConfig.Int("crontab::prcNum")
if err != nil {
- logs.Error("config crontab::prcnum error: invalid value is ",prcnum)
+ logs.Error("config crontab::prcNum error: invalid value is ", prcNum)
return errors.New("value is nil")
}
// 获取表的数据源
- _, errx := taskhandler.CheckCveOriginData(prcnum)
- return errx
-}
\ No newline at end of file
+ _, err = taskhandler.CheckCveOriginData(prcNum)
+ return err
+}
diff --git a/task/yaml.go b/task/yaml.go
index cc2951c..57c9c33 100644
--- a/task/yaml.go
+++ b/task/yaml.go
@@ -8,24 +8,25 @@ import (
"github.com/astaxie/beego/logs"
)
-func GetYamlData() error{
+//GetYamlData 获取yaml数据源
+func GetYamlData() error {
defer common.Catchs()
// 查询需要处理的cve, 1:新增;2:修改
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
logs.Error("config init error:", err)
return err
}
apiUrl := BConfig.String("yaml::apiurl")
if apiUrl == "" {
- logs.Error("config yaml::apiurl error: invalid value is ",apiUrl)
+ logs.Error("config yaml::apiurl error: invalid value is ", apiUrl)
return errors.New("value is nil")
}
// 获取表的数据源
- _, errx := taskhandler.GetYamlTables(apiUrl)
+ _, err = taskhandler.GetYamlTables(apiUrl)
// 获取yaml
- if errx == nil {
- _, errx = taskhandler.GetYamlByGit(apiUrl)
+ if err == nil {
+ _, err = taskhandler.GetYamlByGit(apiUrl)
}
- return errx
+ return err
}
diff --git a/taskhandler/assist.go b/taskhandler/assist.go
index b5c187d..fc2c72b 100644
--- a/taskhandler/assist.go
+++ b/taskhandler/assist.go
@@ -13,15 +13,15 @@ import (
func GetOautToken(gt GiteeToken) {
url := "https://gitee.com/oauth/token"
var req util.RequestInfo
- req.Url = url
+ req.URL = url
req.Data = make(map[string]string)
req.Data["grant_type"] = gt.GrantType
req.Data["username"] = gt.UserName
req.Data["password"] = gt.Password
- req.Data["client_id"] = gt.ClientId
+ req.Data["client_id"] = gt.ClientID
req.Data["client_secret"] = gt.ClientSecret
req.Data["scope"] = gt.Scope
- resp, err := util.PostUrlEncoded(req)
+ resp, err := util.PostURLEncoded(req)
if err != nil {
logs.Error("获取 token 失败,url: ", url, "请求参数:", gt, "err:", err)
return
@@ -44,7 +44,7 @@ func GetOautToken(gt GiteeToken) {
func GetCollaboratorInfo(accessToken string, owner string, path string) (string, error){
if accessToken != "" && owner != "" && path !="" {
url := "https://gitee.com/api/v5/repos/" + owner + "/" + path + "/collaborators?access_token=" + accessToken
- collabor, err:= util.HttpGet(url)
+ collabor, err:= util.HTTPGet(url)
if err == nil && collabor != nil {
for _, value := range collabor {
if _, ok := value["id"]; !ok {
@@ -82,7 +82,7 @@ func GetBranchesInfo(accessToken string, owner string, path string) (string, err
branchName := ""
if accessToken != "" && owner != "" && path != "" {
url := "https://gitee.com/api/v5/repos/"+ owner +"/"+ path +"/branches?access_token=" + accessToken
- branch, err:= util.HttpGet(url)
+ branch, err:= util.HTTPGet(url)
if err == nil && branch != nil {
for _, value := range(branch) {
if _, ok := value["name"]; !ok {
diff --git a/taskhandler/comment.go b/taskhandler/comment.go
index 4f61df6..a1e2822 100644
--- a/taskhandler/comment.go
+++ b/taskhandler/comment.go
@@ -6,20 +6,22 @@ import (
"github.com/astaxie/beego/logs"
)
+//AddCommentToIssue Add a comment to the issue
func AddCommentToIssue(msg,issueNum,owner,repo ,access string) {
url := fmt.Sprintf(`https://gitee.com/api/v5/repos/%v/%v/issues/%v/comments`,owner,repo,issueNum)
param := fmt.Sprintf(`{"access_token": "%s","body":"%s"}`,access,msg)
- res, err := util.HttpPost(url, param)
+ res, err := util.HTTPPost(url, param)
if err != nil {
logs.Error(err)
}
logs.Info("添加评论返回:",res)
}
+//SendPrivateLetters Send a private message to a gitee user
func SendPrivateLetters(access,content,useName string) {
url := "https://gitee.com/api/v5/notifications/messages"
param := fmt.Sprintf(`{"access_token":"%s","username":"%s","content":"%s"}`,access,useName,content)
- res,err := util.HttpPost(url,param)
+ res,err := util.HTTPPost(url,param)
if err != nil {
logs.Error(err)
}
diff --git a/taskhandler/common.go b/taskhandler/common.go
index 8ff8d69..aba4b09 100644
--- a/taskhandler/common.go
+++ b/taskhandler/common.go
@@ -13,7 +13,7 @@ type GiteeToken struct {
GrantType string
UserName string
Password string
- ClientId string
+ ClientID string
ClientSecret string
Scope string
}
@@ -32,7 +32,7 @@ const bodyTpl = `一、漏洞信息
%v
openEuler评分:
%v
- 受影响的版本排查(受影响/不受影响):
+ 受影响版本排查(受影响/不受影响):
%v
`
@@ -51,7 +51,7 @@ const bodyUpTpl = `一、漏洞信息
openEuler评分:
%v
Vector:CVSS:%v
- 受影响的版本排查(受影响/不受影响):
+ 受影响版本排查(受影响/不受影响):
%v
`
@@ -286,14 +286,14 @@ type GitTablePackCount struct {
func CreateIssueBody(accessToken string, owner string, path string, assignee string,
cve models.VulnCenter, sc models.Score, openEulerScore, score, labels string,
- its models.IssueTemplate, flag int, issueType, pkgLink string, brandArry []string) string {
+ its models.IssueTemplate, flag int, issueType, pkgLink string, brandArray []string) string {
requestBody := ""
- scoretype := ""
+ scoreType := ""
affectedVersion := ""
if sc.ScoreType == "v2" {
- scoretype = "2.0"
+ scoreType = "2.0"
} else {
- scoretype = "3.0"
+ scoreType = "3.0"
}
floatOpenEulerScore, err := strconv.ParseFloat(openEulerScore, 64)
if err != nil {
@@ -319,8 +319,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
}
}
if flag == 1 {
- if len(brandArry) > 0 {
- for i, brand := range brandArry {
+ if len(brandArray) > 0 {
+ for i, brand := range brandArray {
if brand == "" || len(brand) < 2 {
continue
}
@@ -332,19 +332,19 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
if floatOpenEulerScore > 0.0 || (its.OpenEulerVector != "" && len(its.OpenEulerVector) > 1) {
cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
nveScore := score + " " + cve.CveLevel
- nveVector := scoretype + "/" + sc.NvectorVule
- oVector := scoretype + "/" + its.OpenEulerVector
- body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ nveVector := scoreType + "/" + sc.NvectorVule
+ oVector := scoreType + "/" + its.OpenEulerVector
+ body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
cve.Description, cveAnalysis, openEulerScore, oVector, affectedVersion)
/*body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
"
漏洞归属组件: " + path + "" +
- "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoretype + "分值: " +
+ "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoreType + "分值: " +
"
BaseScore: " + score + " " + cve.CveLevel + "" +
- "
Vector: CVSS:" + scoretype + "/" + sc.NvectorVule + "" + "
漏洞简述: " +
+ "
Vector: CVSS:" + scoreType + "/" + sc.NvectorVule + "" + "
漏洞简述: " +
"
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
"
" + cveAnalysis + " " +
"
openEuler评分: " + "
" + openEulerScore + "" +
- "
Vector: CVSS:" + scoretype + "/" + its.OpenEulerVector + "" +
+ "
Vector: CVSS:" + scoreType + "/" + its.OpenEulerVector + "" +
"
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"*/
requestBody = fmt.Sprintf(`{
"access_token": "%s",
@@ -359,10 +359,9 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
} else {
cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
nveScore := score + " " + cve.CveLevel
- nveVector := scoretype + "/" + sc.NvectorVule
- //oVector := scoretype + "/" + its.OpenEulerVector
+ nveVector := scoreType + "/" + sc.NvectorVule
openEulerScore = " "
- body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
cve.Description, cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
@@ -377,8 +376,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
}
} else if flag == 2 {
- if len(brandArry) > 0 {
- for i, brand := range brandArry {
+ if len(brandArray) > 0 {
+ for i, brand := range brandArray {
if brand == "" || len(brand) < 2 {
continue
}
@@ -389,10 +388,9 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
}
cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
nveScore := score + " " + cve.CveLevel
- nveVector := scoretype + "/" + sc.NvectorVule
- //oVector := scoretype + "/" + its.OpenEulerVector
+ nveVector := scoreType + "/" + sc.NvectorVule
openEulerScore = " "
- body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
cve.Description, cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
@@ -422,9 +420,9 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
if len(cveAnalysis) > 1 {
cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
nveScore := score + " " + cve.CveLevel
- nveVector := scoretype + "/" + its.NVDVector
- oVector := scoretype + "/" + its.OpenEulerVector
- body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ nveVector := scoreType + "/" + its.NVDVector
+ oVector := scoreType + "/" + its.OpenEulerVector
+ body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
cve.Description, cveAnalysis, openEulerScore, oVector, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
@@ -439,9 +437,10 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
} else {
cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
nveScore := score + " " + cve.CveLevel
- nveVector := scoretype + "/" + its.NVDVector
- oVector := scoretype + "/" + its.OpenEulerVector
- body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+
+ nveVector := scoreType + "/" + its.NVDVector
+ oVector := scoreType + "/" + its.OpenEulerVector
+ body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
cve.Description, cveAnalysis, openEulerScore, oVector, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
@@ -460,9 +459,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
if len(cveAnalysis) > 1 {
cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
nveScore := score + " " + cve.CveLevel
- nveVector := scoretype + "/" + sc.NvectorVule
- //oVector := scoretype + "/" + its.OpenEulerVector
- body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+ nveVector := scoreType + "/" + sc.NvectorVule
+ body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
cve.Description, cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
@@ -477,9 +475,9 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
} else {
cveNumber := "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")"
nveScore := score + " " + cve.CveLevel
- nveVector := scoretype + "/" + sc.NvectorVule
- //oVector := scoretype + "/" + its.OpenEulerVector
- body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoretype, nveScore, nveVector,
+
+ nveVector := scoreType + "/" + sc.NvectorVule
+ body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
cve.Description, cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
@@ -508,11 +506,9 @@ func Duplicate(a interface{}) (ret []interface{}) {
return ret
}
-
func RemoveSubstring(s, sub string) string {
if strings.Contains(s, sub) {
return strings.ReplaceAll(s, sub, "")
}
return s
}
-
diff --git a/taskhandler/createissue.go b/taskhandler/createissue.go
index c166524..e6d926b 100644
--- a/taskhandler/createissue.go
+++ b/taskhandler/createissue.go
@@ -27,7 +27,7 @@ func CreateIssueData(issueTemp *models.IssueTemplate, cve models.VulnCenter, sc
issueTemp.IssueNum = resp["number"].(string)
issueTemp.Assignee = assignee
issueTemp.StatusName = resp["state"].(string)
- if strings.ToLower(resp["state"].(string)) == "open" || resp["state"].(string) == "待办的"{
+ if strings.ToLower(resp["state"].(string)) == "open" || resp["state"].(string) == "待办的" {
issueTemp.Status = 1
issueTemp.StatusName = "open"
} else if strings.ToLower(resp["state"].(string)) == "started" ||
@@ -35,7 +35,7 @@ func CreateIssueData(issueTemp *models.IssueTemplate, cve models.VulnCenter, sc
strings.ToLower(resp["state"].(string)) == "进行中" {
issueTemp.Status = 2
issueTemp.StatusName = "progressing"
- } else if strings.ToLower(resp["state"].(string)) == "closed" || resp["state"].(string) == "已完成"{
+ } else if strings.ToLower(resp["state"].(string)) == "closed" || resp["state"].(string) == "已完成" {
issueTemp.Status = 3
issueTemp.StatusName = "closed"
} else {
@@ -59,7 +59,7 @@ func CreateIssueData(issueTemp *models.IssueTemplate, cve models.VulnCenter, sc
}
func CreateIssueToGit(accessToken string, owner string, path string, assignee string,
- cve models.VulnCenter, sc models.Score, brandArry []string) (string, error) {
+ cve models.VulnCenter, sc models.Score, brandArray []string) (string, error) {
defer common.Catchs()
var it models.IssueTemplate
it.CveId = cve.CveId
@@ -75,9 +75,9 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
score := strconv.FormatFloat(sc.NVDScore, 'f', 1, 64)
OpenEulerScore := strconv.FormatFloat(its.OpenEulerScore, 'f', 1, 64)
requestBody := CreateIssueBody(accessToken, owner, path, its.Assignee,
- cve, sc, OpenEulerScore, score, labels, its, 1, its.IssueType, "", brandArry)
+ cve, sc, OpenEulerScore, score, labels, its, 1, its.IssueType, "", brandArray)
logs.Info("isssue_body: ", requestBody)
- resp, err := util.HttpPatch(url, requestBody)
+ resp, err := util.HTTPPatch(url, requestBody)
if err != nil {
logs.Error("创建issue失败, cveNum: ", cve.CveNum, "err: ", err)
return "", err
@@ -90,22 +90,21 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
// 构建数据
var issueTemp models.IssueTemplate
CreateIssueData(&issueTemp, cve, sc, resp, path, its.Assignee, issueType, labels, owner)
- if len(brandArry) > 0 {
+ if len(brandArray) > 0 {
var brandArryTmp []string
- for _, brand := range brandArry {
+ for _, brand := range brandArray {
brandArryTmp = append(brandArryTmp, brand + ":")
}
brandStr := strings.Join(brandArryTmp, ",")
issueTemp.AffectedVersion = brandStr
}
// 存储issue数据
- issTempId, err := models.CreateIssueTemplet(&issueTemp)
+ issTempID, err := models.CreateIssueTemplate(&issueTemp)
if err != nil {
logs.Error("创建issue 模板的数据失败, cveNum: ", cve.CveNum, "err: ", err)
return "", err
- } else {
- logs.Info("创建issue 模板的数据成功, issTempId: ", issTempId, "cveNum: ", cve.CveNum)
}
+ logs.Info("创建issue 模板的数据成功, issTempID: ", issTempID, "cveNum: ", cve.CveNum)
// 构建回调
//err = CreateIssueHooks(accessToken, owner, path, cve, resp)
//if err != nil {
@@ -130,9 +129,9 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
url := "https://gitee.com/api/v5/repos/" + owner + "/issues"
score := strconv.FormatFloat(sc.NVDScore, 'f', 1, 64)
requestBody := CreateIssueBody(accessToken, owner, path, assignee,
- cve, sc, "", score, labels, its, 2, issueType, "", brandArry)
+ cve, sc, "", score, labels, its, 2, issueType, "", brandArray)
logs.Info("isssue_body: ", requestBody)
- resp, err := util.HttpPost(url, requestBody)
+ resp, err := util.HTTPPost(url, requestBody)
if err != nil {
logs.Error("创建issue失败, cveNum: ", cve.CveNum, "err: ", err)
return "", err
@@ -145,29 +144,28 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
var issueTemp models.IssueTemplate
CreateIssueData(&issueTemp, cve, sc, resp, path, assignee, issueType, labels, owner)
// 存储issue数据
- if len(brandArry) > 0 {
- var brandArryTmp []string
- for _, brand := range brandArry {
- brandArryTmp = append(brandArryTmp, brand + ":")
+ issTempID, err := models.CreateIssueTemplate(&issueTemp)
+ if len(brandArray) > 0 {
+ var brandArrayTmp []string
+ for _, brand := range brandArray {
+ brandArrayTmp = append(brandArrayTmp, brand + ":")
}
- brandStr := strings.Join(brandArryTmp, ",")
+ brandStr := strings.Join(brandArrayTmp, ",")
issueTemp.AffectedVersion = brandStr
}
- issTempId, err := models.CreateIssueTemplet(&issueTemp)
if err != nil {
logs.Error("创建issue 模板的数据失败, cveNum: ", cve.CveNum, "err: ", err)
return "", err
- } else {
- logs.Info("创建issue 模板的数据成功, issTempId: ", issTempId, "cveNum: ", cve.CveNum)
}
+ logs.Info("创建issue 模板的数据成功, issTempID: ", issTempID, "cveNum: ", cve.CveNum)
// 创建issue评论
affectedVersion := ""
- if len(brandArry) > 0 {
- for i, brand := range brandArry {
+ if len(brandArray) > 0 {
+ for i, brand := range brandArray {
if brand == "" || len(brand) < 2 {
continue
}
- affectedVersion = affectedVersion + strconv.Itoa(i + 1) +"." + brand + ":\n"
+ affectedVersion = affectedVersion + strconv.Itoa(i+1) + "." + brand + ":\n"
}
} else {
affectedVersion = affectedVersion + "\n"
@@ -176,14 +174,13 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
logs.Info("issue评论创建结果, err: ", errx)
// 构建回调
issueNum := resp["number"].(string)
- issueId := int64(resp["id"].(float64))
- err = CreateDepositHooks(accessToken, owner, path, cve, issueNum, issueId)
+ issueID := int64(resp["id"].(float64))
+ err = CreateDepositHooks(accessToken, owner, path, cve, issueNum, issueID)
if err != nil {
logs.Error("创建hooks 失败, cveNum: ", cve.CveNum, "err: ", err)
return "", err
- } else {
- logs.Info("创建hooks 成功, cveNum: ", cve.CveNum)
}
+ logs.Info("创建hooks 成功, cveNum: ", cve.CveNum)
// 创建issue标签
//CreateIssueLabel(accessToken, owner, path, resp["number"].(string))
// 更新issue状态
@@ -222,7 +219,7 @@ func UpdateIssueToGit(accessToken string, owner string, path string,
requestBody := CreateIssueBody(accessToken, owner, path, its.Assignee,
cve, sc, OpenEulerScore, score, labels, its, 3, its.IssueType, pkgLink, brandArray)
logs.Info("isssue_body: ", requestBody)
- resp, err := util.HttpPatch(url, requestBody)
+ resp, err := util.HTTPPatch(url, requestBody)
if err != nil {
logs.Error("更新issue失败, cveNum: ", cve.CveNum, "err: ", err)
return "", err
@@ -247,7 +244,7 @@ func UpdateIssueToGit(accessToken string, owner string, path string,
//func UpdateCommentInfo(owner, path, issueNumber string) {
// issueUrl := "https://gitee.com/" + owner + "/" + path + "/issues/" + issueNumber
-// util.HttpGet(issueUrl)
+// util.HTTPGet(issueUrl)
//}
func CreateIssueHookData(issHook *models.IssueHooks, cve models.VulnCenter, resp map[string]interface{},
@@ -330,7 +327,7 @@ func CreateDepositHooks(accessToken string, owner string, path string,
"merge_requests_events": "%s"
}`, accessToken, hookurl, pwd, push_events, tag_push_events, issues_events, note_events, merge_requests_events)
logs.Info("hook_body: ", requestBody)
- resp, err := util.HttpPatch(url, requestBody)
+ resp, err := util.HTTPPatch(url, requestBody)
if err != nil {
logs.Error("创建钩子失败, url: ", url, "cveId", cve.CveId, "err: ", err)
return err
@@ -375,7 +372,7 @@ func CreateDepositHooks(accessToken string, owner string, path string,
"merge_requests_events": "%s"
}`, accessToken, hookurl, pwd, push_events, tag_push_events, issues_events, note_events, merge_requests_events)
logs.Info("hook_body: ", requestBody)
- resp, err := util.HttpPost(url, requestBody)
+ resp, err := util.HTTPPost(url, requestBody)
if err != nil {
logs.Error("创建钩子失败, url: ", url, "cveId", cve.CveId, "err: ", err)
return err
@@ -419,7 +416,7 @@ func CreateDepositHooks(accessToken string, owner string, path string,
"merge_requests_events": "%s"
}`, accessToken, hookurl, pwd, push_events, tag_push_events, issues_events, note_events, merge_requests_events)
logs.Info("hook_body: ", requestBody)
- resp, err := util.HttpPost(url, requestBody)
+ resp, err := util.HTTPPost(url, requestBody)
if err != nil {
logs.Error("创建钩子失败, url: ", url, "cveId", cve.CveId, "err: ", err)
return err
@@ -434,13 +431,12 @@ func CreateDepositHooks(accessToken string, owner string, path string,
CreateIssueHookData(&issHook, cve, resp,
path, owner, issueNum, issueId)
// 存储issue数据
- hookId, err := models.CreateDepositHooks(&issHook)
+ hookID, err := models.CreateDepositHooks(&issHook)
if err != nil {
logs.Error("创建仓库hook失败, cveNum: ", cve.CveNum, "err: ", err)
return err
- } else {
- logs.Info("创建仓库 hook数据成功, hookId: ", hookId, "cveNum: ", cve.CveNum)
}
+ logs.Info("创建仓库 hook数据成功, hookID: ", hookID, "cveNum: ", cve.CveNum)
}
}
}
@@ -466,7 +462,7 @@ func CreateIssueComment(accessToken, owner, path, Assignee string,
"body": "%s"
}`, accessToken, commentBody)
logs.Info("create issue comment body: ", requestBody)
- resp, err := util.HttpPost(url, requestBody)
+ resp, err := util.HTTPPost(url, requestBody)
if err != nil {
logs.Error("创建issue评论失败, url: ", url, "cveId", cve.CveId, ",issueNum: ", issueNum, ",err: ", err)
return err
@@ -475,8 +471,8 @@ func CreateIssueComment(accessToken, owner, path, Assignee string,
logs.Error("创建issue评论失败, err: ", ok, "url: ", url)
return errors.New("创建issue评论失败")
}
- commentId := int64(resp["id"].(float64))
- models.UpdateIssueCommentId(issueNum, cve.CveNum, commentId)
+ commentID := int64(resp["id"].(float64))
+ models.UpdateIssueCommentId(issueNum, cve.CveNum, commentID)
}
return nil
}
@@ -509,7 +505,7 @@ func CreateSecNoticeData(sec *models.SecurityNotice, iss models.VulnCenter, path
}
}
if branchs != "" && len(branchs) > 1 {
- branchs = branchs[: len(branchs) - 1]
+ branchs = branchs[:len(branchs)-1]
}
sec.CveId = iss.CveId
sec.CveNum = iss.CveNum
@@ -540,7 +536,7 @@ func CreateIssueLabel(accessToken string, owner string, path string,
body["body"] = "[\"CVE/Undisclosed\",\"CVE/Disclosed\"]"
requestBody, _ := json.Marshal(body)
logs.Info("create issue label: ", string(requestBody))
- resp, err := util.HttpPost1(url, string(requestBody))
+ resp, err := util.HTTPPost1(url, string(requestBody))
if err != nil {
logs.Error("cve标签创建失败, url: ", url, "requestBody: ", requestBody, "err: ", err)
return err
diff --git a/taskhandler/cve.go b/taskhandler/cve.go
index e0beee4..99d0cd2 100644
--- a/taskhandler/cve.go
+++ b/taskhandler/cve.go
@@ -829,16 +829,16 @@ func GetCveOriginData(prcnum, days, openeulernum int, cveRef string) (bool, erro
}
logs.Info("总共有: ", num, "条的数据需要处理, ", osx)
ch := make(chan int, len(osx))
- for i, cveData := range osx {
+ for i, cveOrg := range osx {
count = count + 1
- logs.Info("当前正常解析第: ", count, "条数据,i:", i, ", cvenum: ", cveData.Ids)
- go func() {
+ logs.Info("当前正常解析第: ", count, "条数据,i:", i, ", cvenum: ", cveOrg.Ids)
+ go func(idx int, cveData models.OriginUpstream) {
ok, err := GenCveVuler(cveData, cveRef, openeulernum)
if !ok {
logs.Error("cveData: ", cveData, "处理失败, err: ", err)
}
- ch <- i
- }()
+ ch <- idx
+ }(i, cveOrg)
}
for i := 0; i < cap(ch); i++ {
<-ch
@@ -863,16 +863,16 @@ func GetCveOriginExcelData(prcnum, days, openeulerNum int, cveRef string) (bool,
}
logs.Info("excel总共有: ", num, "条的数据需要处理, ", osx)
ch := make(chan int, len(osx))
- for i, cveData := range osx {
+ for i, cveOrg := range osx {
count = count + 1
- logs.Info("当前正常解析第: ", count, "条数据,i:", i, ", cvenum: ", cveData.CveNum)
- go func() {
+ logs.Info("当前正常解析第: ", count, "条数据,i:", i, ", cvenum: ", cveOrg.CveNum)
+ go func(idx int, cveData models.OriginExcel) {
ok, err := SyncCveVuler(cveData, cveRef, openeulerNum)
if !ok {
logs.Error("cveData: ", cveData, "处理失败, err: ", err)
}
ch <- i
- }()
+ }(i, cveOrg)
}
for i := 0; i < cap(ch); i++ {
<-ch
@@ -1028,7 +1028,7 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
issueTemp.IssueType = cveData.IssueType
issueTemp.CveLevel = vul.CveLevel
// 存储issue数据
- issTempId, issError := models.CreateIssueTemplet(&issueTemp)
+ issTempId, issError := models.CreateIssueTemplate(&issueTemp)
if issError != nil {
logs.Error("创建issue 模板的数据失败, cveNum: ", cveData.CveNumber, "err: ", issError)
return false, issError
@@ -1037,7 +1037,8 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
}
if cveData.State != "" && (strings.ToLower(cveData.State) == "open" || strings.ToLower(cveData.State) == "progressing") {
accessToken := os.Getenv("GITEE_TOKEN")
- CreateDepositHooks(accessToken, owner, cveData.RepoPath, vul, cveData.Number, cveData.IssueId)
+ hookError := CreateDepositHooks(accessToken, owner, cveData.RepoPath, vul, cveData.Number, cveData.IssueId)
+ logs.Info(hookError)
}
return true, nil
}
@@ -1185,7 +1186,8 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
}
if vul.Status == 0 {
accessToken := os.Getenv("GITEE_TOKEN")
- CreateDepositHooks(accessToken, owner, cveData.RepoPath, vul, cveData.Number, cveData.IssueId)
+ hookError := CreateDepositHooks(accessToken, owner, cveData.RepoPath, vul, cveData.Number, cveData.IssueId)
+ logs.Info(hookError)
}
osa, osaError := models.QueryOpenSaById(vul.CveId)
if osaError == nil && osa.OpenId > 0 {
@@ -1231,7 +1233,8 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
scorecode.NVDScore = score.NVDScore
scorecode.NvectorVule = score.NvectorVule
scorecode.Status = 0
- models.InsertScoreRecord(&scorecode)
+ scRecordId, scError := models.InsertScoreRecord(&scorecode)
+ logs.Info(scRecordId, scError)
}
}
var issueTemp models.IssueTemplate
@@ -1318,7 +1321,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
issueTemp.CveLevel = vul.CveLevel
}
// 存储issue数据
- issTempId, issError := models.CreateIssueTemplet(&issueTemp)
+ issTempId, issError := models.CreateIssueTemplate(&issueTemp)
if issError != nil {
logs.Error("创建issue 模板的数据失败, cveNum: ", cveData.CveNumber, "err: ", issError)
return false, issError
@@ -1346,7 +1349,8 @@ func GenCveVulerByIssue(cveData models.GiteOriginIssue, cveRef string, openeuler
cvd, ok := models.QueryCveByNum(cveData.CveNumber, cveData.RepoPath, hole.Version)
if ok && cvd.CveNum != "" {
lock.Lock()
- UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, cvd, owner)
+ upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, cvd, owner)
+ logs.Info(upOk, upError)
lock.Unlock()
} else {
lock.Lock()
@@ -1365,7 +1369,8 @@ func GenCveVulerByIssue(cveData models.GiteOriginIssue, cveRef string, openeuler
cvd, ok := models.QueryCveByNum(cveData.CveNumber, cveData.RepoPath, hole.Version)
if ok && cvd.CveNum != "" {
lock.Lock()
- UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, cvd, owner)
+ upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, cvd, owner)
+ logs.Info(upOk, upError)
lock.Unlock()
//models.UpdateCveStatusExportByNum(common.GetCurTime(), cveData.CveNumber, 2, 2)
} else {
@@ -1385,7 +1390,8 @@ func GenCveVulerByIssue(cveData models.GiteOriginIssue, cveRef string, openeuler
cvd, ok := models.QueryCveByNum(cveData.CveNumber, cveData.RepoPath, hole.Version)
if ok && cvd.CveNum != "" {
lock.Lock()
- UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 1, goe, cvd, owner)
+ upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 1, goe, cvd, owner)
+ logs.Info(upOk, upError)
lock.Unlock()
//models.UpdateCveStatusExportByNum(common.GetCurTime(), cveData.CveNumber, 2, 2)
} else {
@@ -1414,21 +1420,21 @@ func GetCveIssueData(prcnum, days, openeulernum int, cveRef, owner string) (bool
}
logs.Info("总共有: ", num, "条的数据需要处理, ", gs)
ch := make(chan int, len(gs))
- for i, cveData := range gs {
+ for i, cveOrg := range gs {
count = count + 1
- logs.Info("当前正常解析第: ", count, "条数据,i:", i, ", cvenum: ", cveData.IssueId)
- if cveData.CveNumber == "" || len(cveData.CveNumber) == 0 {
- logs.Error("数据异常, 不处理, cveData: ", cveData)
- models.UpdateCveIssueStatusById(3, cveData.Id)
+ logs.Info("当前正常解析第: ", count, "条数据,i:", i, ", cvenum: ", cveOrg.IssueId)
+ if cveOrg.CveNumber == "" || len(cveOrg.CveNumber) == 0 {
+ logs.Error("数据异常, 不处理, cveData: ", cveOrg)
+ models.UpdateCveIssueStatusById(3, cveOrg.Id)
continue
}
- go func() {
+ go func(idx int, cveData models.GiteOriginIssue) {
ok, err := GenCveVulerByIssue(cveData, cveRef, openeulernum, owner)
if !ok {
logs.Error("cveData: ", cveData, "处理失败, err: ", err)
}
- ch <- i
- }()
+ ch <- idx
+ }(i, cveOrg)
}
for i := 0; i < cap(ch); i++ {
<-ch
diff --git a/taskhandler/excel.go b/taskhandler/excel.go
index aae25f8..1b39b31 100644
--- a/taskhandler/excel.go
+++ b/taskhandler/excel.go
@@ -12,6 +12,7 @@ import (
"time"
)
+//CveExcel Excel export client
type CveExcel struct {
ExcelName string //excel 名字
ExcelHandel *excelize.File //excel 文件句柄
@@ -23,8 +24,8 @@ type CveExcel struct {
SecNoticeSuffixIdx int64 //安全公告后缀起始值
InfProductSheetName string //CVE 影响的产品
InfProductSheetIndex int
- PackageUrlSheetName string
- PackageUrlSheetIndex int
+ PackageURLSheetName string
+ PackageURLSheetIndex int
}
//GenerateCveExcel Generate Excel documents based on data.
@@ -56,6 +57,7 @@ func GenerateCveExcel(excelName, snPrefix string, snSuffix int64, forceRewrite b
return ec.Save(mode)
}
+//Init init excel client
func (ec *CveExcel) Init(excelName, snPrefix string, snSuffix int64) (err error) {
if excelName == "" || !(strings.HasSuffix(excelName, ".xlsx") || strings.HasSuffix(excelName, "xls")) {
err = errors.New("excel name illegal")
@@ -70,8 +72,8 @@ func (ec *CveExcel) Init(excelName, snPrefix string, snSuffix int64) (err error)
ec.SecNoticeSheetName = "安全公告"
ec.InfProductSheetIndex = 2
ec.InfProductSheetName = "CVE影响的产品"
- ec.PackageUrlSheetIndex = 3
- ec.PackageUrlSheetName = "安全公告升级包链接"
+ ec.PackageURLSheetIndex = 3
+ ec.PackageURLSheetName = "安全公告升级包链接"
return nil
}
@@ -93,24 +95,26 @@ func (ec *CveExcel) InitFileHandle(forceRewrite bool) (wm int8) {
if err != nil {
ec.ExcelHandel = excelize.NewFile()
return 0
- } else {
- ec.ExcelHandel = file
- return 1
}
- } else {
- ec.ExcelHandel = excelize.NewFile()
- return 0
+ ec.ExcelHandel = file
+ return 1
+
}
+ ec.ExcelHandel = excelize.NewFile()
+ return 0
+
}
+//InitSheet init excel sheet
func (ec *CveExcel) InitSheet() {
ec.SecNoticeSheetIdx = ec.ExcelHandel.NewSheet(ec.SecNoticeSheetName)
ec.InfProductSheetIndex = ec.ExcelHandel.NewSheet(ec.InfProductSheetName)
- ec.PackageUrlSheetIndex = ec.ExcelHandel.NewSheet(ec.PackageUrlSheetName)
+ ec.PackageURLSheetIndex = ec.ExcelHandel.NewSheet(ec.PackageURLSheetName)
sn := ec.ExcelHandel.GetSheetName(ec.CveSheetIdx)
ec.ExcelHandel.SetSheetName(sn, ec.CveSheetName)
}
+//FillHeader fill the excel sheet header
func (ec *CveExcel) FillHeader() (err error) {
err = ec.ExcelHandel.SetCellValue(ec.CveSheetName, "A1", "CVE编号")
if err != nil {
@@ -309,18 +313,19 @@ func (ec *CveExcel) FillHeader() (err error) {
return err
}
ph := []interface{}{"包名", "包下载链接"}
- err = ec.ExcelHandel.SetSheetRow(ec.PackageUrlSheetName, "A1", &ph)
+ err = ec.ExcelHandel.SetSheetRow(ec.PackageURLSheetName, "A1", &ph)
if err != nil {
return err
}
return nil
}
+//FillContent fill the excel content
func (ec *CveExcel) FillContent(count int64) {
pageSize := 50
pageCount := count / int64(pageSize)
if count%int64(pageSize) > 0 {
- pageCount += 1
+ pageCount++
}
for i := int64(0); i < pageCount; i++ {
off := i * int64(pageSize)
@@ -357,27 +362,27 @@ func (ec *CveExcel) handleWriteContent(off int64, size int) (err error) {
break
}
if t.IssueStatus == 2 {
- mergerList = append(mergerList, strconv.FormatInt(t.CveId,10))
+ mergerList = append(mergerList, strconv.FormatInt(t.CveId, 10))
}
}
//2.从issue_status == 2 的模板数据中找到评分最高的对应的ExcelExport数据
- if canMerger && len(mergerList)>0{
+ if canMerger && len(mergerList) > 0 {
canExport, err := models.GetCanExportCveDataSameNum(strings.Join(mergerList, ","))
if err != nil {
logs.Error(err)
}
- ep := canExport[0]
- if len(canExport)>1{
- canExport = canExport[1:]
- for _,ex := range canExport {
- ep.Introduction = ep.Introduction+"\n"+ex.Introduction
- ep.Summary = ep.Summary+"\n"+ex.Summary
- ep.Theme = ep.Theme+"\n"+ex.Theme
- ep.Description = ep.Description+"\n"+ex.Description
- ep.OwnedComponent = ep.OwnedComponent+"\n"+ex.OwnedComponent
- ep.InfluenceComponent = ep.InfluenceComponent+"\n"+ex.InfluenceComponent
- ep.AffectProduct = ep.AffectProduct+"\n"+ex.AffectProduct
+ ep := canExport[0]
+ if len(canExport) > 1 {
+ canExport = canExport[1:]
+ for _, ex := range canExport {
+ ep.Introduction = ep.Introduction + "\n" + ex.Introduction
+ ep.Summary = ep.Summary + "\n" + ex.Summary
+ ep.Theme = ep.Theme + "\n" + ex.Theme
+ ep.Description = ep.Description + "\n" + ex.Description
+ ep.OwnedComponent = ep.OwnedComponent + "\n" + ex.OwnedComponent
+ ep.InfluenceComponent = ep.InfluenceComponent + "\n" + ex.InfluenceComponent
+ ep.AffectProduct = ep.AffectProduct + "\n" + ex.AffectProduct
}
}
@@ -391,7 +396,7 @@ func (ec *CveExcel) handleWriteContent(off int64, size int) (err error) {
}
func (ec *CveExcel) setContentRow(v models.ExcelExport) {
- pkg, err := models.GetCvePackageList(v.SecId)
+ pkg, err := models.GetCvePackageList(v.SecID)
if err != nil {
logs.Error(err)
}
@@ -403,24 +408,24 @@ func (ec *CveExcel) setContentRow(v models.ExcelExport) {
v.NattackComplexity, v.OattackComplexity, v.NprivilegeRequired, v.OprivilegeRequired, v.NuserInteraction,
v.OuserInteraction, v.Nscope, v.Oscope, v.Nconfidentiality, v.Oconfidentiality, v.Nintegrity, v.Ointegrity,
v.Navailability, v.Oavailability, v.ScoreType, v.OpenEulerSANum, v.PublicDate}
- err = ec.FillCveSheetRow(cve)
+ err = ec.fillCveSheetRow(cve)
if err != nil {
logs.Error(err)
}
sn := []interface{}{v.OpenEulerSANum, v.CveNum, v.Introduction, v.Summary, v.Theme, v.Description, v.InfluenceComponent,
v.AffectProduct, pkgStr, v.ReferenceLink, v.PublicDate}
- err = ec.FillSecurityNoticeSheet(sn)
+ err = ec.fillSecurityNoticeSheet(sn)
if err != nil {
logs.Error(err)
}
ap := []interface{}{v.CveNum, v.AffectProduct, v.InfluenceComponent, v.AffectStatus}
- err = ec.FillAffectProductSheet(ap)
+ err = ec.fillAffectProductSheet(ap)
if err != nil {
logs.Error(err)
}
for _, v := range pkg {
pk := []interface{}{v.PackName, v.PackUrl}
- err := ec.FillPackageSheet(pk)
+ err := ec.fillPackageSheet(pk)
if err != nil {
logs.Error(err)
}
@@ -441,7 +446,7 @@ func getPkgStr(pkg []models.Package) string {
return strings.Join(ps, ";\n")
}
-func (ec *CveExcel) FillCveSheetRow(row []interface{}) (err error) {
+func (ec *CveExcel) fillCveSheetRow(row []interface{}) (err error) {
rows, err := ec.ExcelHandel.GetRows(ec.CveSheetName)
if err != nil {
return err
@@ -452,7 +457,7 @@ func (ec *CveExcel) FillCveSheetRow(row []interface{}) (err error) {
return err
}
-func (ec *CveExcel) FillSecurityNoticeSheet(row []interface{}) (err error) {
+func (ec *CveExcel) fillSecurityNoticeSheet(row []interface{}) (err error) {
rows, err := ec.ExcelHandel.GetRows(ec.SecNoticeSheetName)
if err != nil {
return err
@@ -463,7 +468,7 @@ func (ec *CveExcel) FillSecurityNoticeSheet(row []interface{}) (err error) {
return err
}
-func (ec *CveExcel) FillAffectProductSheet(row []interface{}) (err error) {
+func (ec *CveExcel) fillAffectProductSheet(row []interface{}) (err error) {
rows, err := ec.ExcelHandel.GetRows(ec.InfProductSheetName)
if err != nil {
return err
@@ -474,21 +479,22 @@ func (ec *CveExcel) FillAffectProductSheet(row []interface{}) (err error) {
return err
}
-func (ec *CveExcel) FillPackageSheet(row []interface{}) (err error) {
- rows, err := ec.ExcelHandel.GetRows(ec.PackageUrlSheetName)
+func (ec *CveExcel) fillPackageSheet(row []interface{}) (err error) {
+ rows, err := ec.ExcelHandel.GetRows(ec.PackageURLSheetName)
if err != nil {
return err
}
idx := len(rows) + 1
axis := fmt.Sprintf("A%d", idx)
- err = ec.ExcelHandel.SetSheetRow(ec.PackageUrlSheetName, axis, &row)
+ err = ec.ExcelHandel.SetSheetRow(ec.PackageURLSheetName, axis, &row)
return err
}
+//Save save the excel content to file
func (ec *CveExcel) Save(md int8) error {
if md == 0 {
return ec.ExcelHandel.SaveAs(ec.ExcelName)
- } else {
- return ec.ExcelHandel.Save()
}
+ return ec.ExcelHandel.Save()
+
}
diff --git a/taskhandler/grabissue.go b/taskhandler/grabissue.go
index 42fe6e9..cc382f2 100644
--- a/taskhandler/grabissue.go
+++ b/taskhandler/grabissue.go
@@ -13,26 +13,32 @@ import (
)
const (
- GiteOrgInfoUrl = `https://gitee.com/api/v5/orgs/%v?access_token=%v` //get gitee org info
- GiteOrgReposUrl = `https://gitee.com/api/v5/orgs/%v/repos?access_token=%v&type=all&page=%v&per_page=%v` //get all repository
- GiteRepoIssuesUrl = `https://gitee.com/api/v5/repos/%v/%v/issues?state=%v&sort=created&direction=desc&page=%v&per_page=%v` //get issue list
+ //GiteOrgInfoURL get gitee org info url
+ GiteOrgInfoURL = `https://gitee.com/api/v5/orgs/%v?access_token=%v`
+ //GiteOrgReposURL get all repository url
+ GiteOrgReposURL = `https://gitee.com/api/v5/orgs/%v/repos?access_token=%v&type=all&page=%v&per_page=%v`
+ //GiteRepoIssuesURL get issue list url
+ GiteRepoIssuesURL = `https://gitee.com/api/v5/repos/%v/%v/issues?state=%v&sort=created&direction=desc&page=%v&per_page=%v`
+ //GiteRepoBranch get repo branch url
GiteRepoBranch = `https://gitee.com/api/v5/repos/%v/%v/branches?access_token=%v`
- RepoInfoUrl = "https://api.openeuler.org/pkgmanagedebug/packages/packageInfo?table_name=mainline&pkg_name=%s"
+ //RepoInfoURL get repo info url
+ RepoInfoURL = "https://api.openeuler.org/pkgmanagedebug/packages/packageInfo?table_name=mainline&pkg_name=%s"
perPage = 50
+ //IssueType Types of issues crawled
IssueType = "CVE和安全问题"
)
var wg sync.WaitGroup
-//var mu sync.Mutex
+//OrgInfo 组织
type OrgInfo struct {
- Id int32 `json:"id,omitempty"`
+ ID int32 `json:"id,omitempty"`
Login string `json:"login,omitempty"`
- Url string `json:"url,omitempty"`
- AvatarUrl string `json:"avatar_url,omitempty"`
- ReposUrl string `json:"repos_url,omitempty"`
- EventsUrl string `json:"events_url,omitempty"`
- MembersUrl string `json:"members_url,omitempty"`
+ URL string `json:"url,omitempty"`
+ AvatarURL string `json:"avatar_url,omitempty"`
+ ReposURL string `json:"repos_url,omitempty"`
+ EventsURL string `json:"events_url,omitempty"`
+ MembersURL string `json:"members_url,omitempty"`
Description string `json:"description,omitempty"`
Name string `json:"name,omitempty"`
Enterprise string `json:"enterprise,omitempty"`
@@ -41,19 +47,21 @@ type OrgInfo struct {
PrivateRepos int64 `json:"private_repos,omitempty"`
}
-// 获取所有分支
+//Branch 获取所有分支
type Branch struct {
Name string `json:"name,omitempty"`
Protected bool `json:"protected,omitempty"`
- ProtectionUrl string `json:"protection_url,omitempty"`
+ ProtectionURL string `json:"protection_url,omitempty"`
}
+//PackageInfo package info model
type PackageInfo struct {
Code string
Msg string
Data Info
}
+//Info cve info
type Info struct {
Description string
}
@@ -165,9 +173,10 @@ func handleIssueList(list []models.HookIssue, product,desc string) {
}
}
+//GetOrgInfo get organization information
func GetOrgInfo(accToken, org string) (OrgInfo, error) {
oi := OrgInfo{}
- resp, err := http.Get(fmt.Sprintf(GiteOrgInfoUrl, org, accToken))
+ resp, err := http.Get(fmt.Sprintf(GiteOrgInfoURL, org, accToken))
if err != nil {
return oi, err
}
@@ -180,10 +189,11 @@ func GetOrgInfo(accToken, org string) (OrgInfo, error) {
return oi, err
}
+//GetOrgRepos get organization repository
func GetOrgRepos(accToken, org string, page int64) {
wg.Add(1)
defer wg.Done()
- resp, err := http.Get(fmt.Sprintf(GiteOrgReposUrl, org, accToken, page, perPage))
+ resp, err := http.Get(fmt.Sprintf(GiteOrgReposURL, org, accToken, page, perPage))
if err != nil {
logs.Error(err)
return
@@ -205,8 +215,9 @@ func GetOrgRepos(accToken, org string, page int64) {
}
}
+//GetIssueList get the repository issue list
func GetIssueList(accToken, owner, repo, state string, page int) (issueList []models.HookIssue, err error) {
- resp, err := http.Get(fmt.Sprintf(GiteRepoIssuesUrl, owner, repo, state, page, perPage))
+ resp, err := http.Get(fmt.Sprintf(GiteRepoIssuesURL, owner, repo, state, page, perPage))
if err != nil {
return issueList, err
}
@@ -219,11 +230,12 @@ func GetIssueList(accToken, owner, repo, state string, page int) (issueList []mo
return
}
+//GetRepoDescription get repository description
func GetRepoDescription(repo string) (desc string) {
if repo == "" {
return ""
}
- url := fmt.Sprintf(RepoInfoUrl, repo)
+ url := fmt.Sprintf(RepoInfoURL, repo)
resp, err := http.Get(url)
if err != nil {
return ""
diff --git a/taskhandler/oricvecheck.go b/taskhandler/oricvecheck.go
index d1196c9..e9f48f5 100644
--- a/taskhandler/oricvecheck.go
+++ b/taskhandler/oricvecheck.go
@@ -26,10 +26,10 @@ func CheckCveOriginData(prcnum int) (string, error) {
}
logs.Info("总共有: ", num, "条数据需要处理, ", os)
ch := make(chan int, len(os))
- for i, cveData := range os {
+ for i, cveOrg := range os {
count = count + 1
- logs.Info("当前正常解析第: ", count, "条数据,i:", i, ", cvenum: ", cveData.Ids)
- go func() {
+ logs.Info("当前正常解析第: ", count, "条数据,i:", i, ", cvenum: ", cveOrg.Ids)
+ go func(idx int, cveData models.OriginUpstream) {
packNameList := []string{}
if cveData.PackName != "" && len(cveData.PackName) > 0 {
packNameList = strings.Split(cveData.PackName, ",")
@@ -50,8 +50,8 @@ func CheckCveOriginData(prcnum int) (string, error) {
}
}
}
- ch <- i
- }()
+ ch <- idx
+ }(i, cveOrg)
}
for i :=0; i < cap(ch); i++ {
<- ch
diff --git a/taskhandler/yaml.go b/taskhandler/yaml.go
index 608ca1d..d204d1f 100644
--- a/taskhandler/yaml.go
+++ b/taskhandler/yaml.go
@@ -13,8 +13,8 @@ import (
)
func GetYamlTables(url string) (string, error){
- compUrl := url + "/lifeCycle/tables"
- body, err:= util.HttpGetCom(compUrl)
+ compURL := url + "/lifeCycle/tables"
+ body, err:= util.HTTPGetCom(compURL)
if err == nil && body != nil {
var respBody map[string]interface{}
err =json.Unmarshal(body, &respBody)
@@ -27,9 +27,9 @@ func GetYamlTables(url string) (string, error){
for i, values := range respBody["data"].([]interface{}) {
var gt models.GitPackageTable
gt.TableName = values.(string)
- table_id, err := models.CreateYamlTable(>)
- if table_id > 0 {
- logs.Info("第 ", i, "条数据, table: ", values, "插入成功, table_id: ", table_id)
+ tableID, err := models.CreateYamlTable(>)
+ if tableID > 0 {
+ logs.Info("第 ", i, "条数据, table: ", values, "插入成功, table_id: ", tableID)
} else {
logs.Error("第 ", i, "条数据, table: ", values, "插入失败, err: ", err)
return "", err
@@ -45,6 +45,7 @@ func GetYamlTables(url string) (string, error){
var lock sync.Mutex
//var wg sync.WaitGroup
+//GetYamlByGit
func GetYamlByGit(url string) (string, error) {
defer common.Catchs()
var gt []models.GitPackageTable
@@ -56,19 +57,19 @@ func GetYamlByGit(url string) (string, error) {
return "", err
}
logs.Info("总共有: ", num, "表的数据需要获取, ", gt)
- compUrl1 := url + "/packages"
+ compURL1 := url + "/packages"
var ch = make(chan int, len(gt))
for i, tableValue := range gt {
logs.Info("查询第 ", i, "tableName: ", tableValue.TableName, "开始...")
//wg.Add(1)
- go func() {
- ok, err := GetYaml(url, compUrl1, page, size, tableValue, &ch)
+ go func(tv models.GitPackageTable,idx int) {
+ ok, err := GetYaml(url, compURL1, page, size, tv, &ch)
if err == nil {
- logs.Info("当前数据处理成功,i: ", i)
+ logs.Info("当前数据处理成功,i: ", idx)
} else {
- logs.Error("当前数据处理失败, ok: ", ok, ",i: ", i, ", err: ", err)
+ logs.Error("当前数据处理失败, ok: ", ok, ",i: ", idx, ", err: ", err)
}
- }()
+ }(tableValue,i)
//<- ch
}
for i:=0; i< len(gt); i++ {
@@ -79,7 +80,7 @@ func GetYamlByGit(url string) (string, error) {
return "", nil
}
-func GetYaml(url, compUrl1 string, page, size int, tableValue models.GitPackageTable, ch *chan int) (string, error){
+func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageTable, ch *chan int) (string, error){
//defer wg.Done()
defer common.Catchs()
var tc GitTablePackCount
@@ -88,11 +89,11 @@ func GetYaml(url, compUrl1 string, page, size int, tableValue models.GitPackageT
tc.Size = 0
tc.Page = page
tc.Size = size
- compUrl2 := compUrl1 + "?table_name=" + tableValue.TableName
+ compURL2 := compURL1 + "?table_name=" + tableValue.TableName
for ;; {
- compUrl := compUrl2 +
+ compURL := compURL2 +
"&page_num=" + strconv.Itoa(tc.Page) + "&page_size=" + strconv.Itoa(size)
- body, err:= util.HttpGetCom(compUrl)
+ body, err:= util.HTTPGetCom(compURL)
var respBody map[string]interface{}
if err == nil && body != nil {
err =json.Unmarshal(body, &respBody)
@@ -101,15 +102,15 @@ func GetYaml(url, compUrl1 string, page, size int, tableValue models.GitPackageT
return "", err
}
} else {
- logs.Error( "http 请求失败, url: ", compUrl)
+ logs.Error( "http 请求失败, url: ", compURL)
return "", err
}
logs.Info("start: ", tc)
if respBody["code"].(string) == "2001"{
//chx := make(chan int)
- cur_count := 0
+ curCount := 0
if respBody == nil || respBody["data"] == nil || len(respBody["data"].([]interface{})) == 0{
- logs.Error("数据为空, url: ", compUrl)
+ logs.Error("数据为空, url: ", compURL)
return "", err
}
for i, values := range respBody["data"].([]interface{}) {
@@ -119,14 +120,14 @@ func GetYaml(url, compUrl1 string, page, size int, tableValue models.GitPackageT
if values == nil || values == "" || len(values.(map[string]interface{})) == 0{
logs.Error("第:",tc.Page,"页, 到: ", tc.Size, "条, tableName: ",tc.TableName,
",已处理到第count: ", tc.Count, "条, yaml values: ", values, ", 处理失败")
- cur_count = cur_count + 1
+ curCount = curCount + 1
continue
}
- valuesx := values.(map[string]interface{})
- ok, err := ProcPackDetail(url, valuesx, tableValue, i)
+ valuesX := values.(map[string]interface{})
+ ok, err := ProcPackDetail(url, valuesX, tableValue, i)
logs.Info("ok: ", ok, ", err: ", err)
//<- chx
- cur_count = cur_count + 1
+ curCount = curCount + 1
}
//close(chx)
totalPage := 0
@@ -158,23 +159,23 @@ func GetYaml(url, compUrl1 string, page, size int, tableValue models.GitPackageT
if tc.Page > totalPage || tc.Size >= totalCount{
logs.Info("已处理完成:tableName: ", tc.TableName, "数据获取完成, " +
"总页数(page_num):", totalPage, ", 总条数(page_size):", totalCount, "\n",
- ",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compUrl)
+ ",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compURL)
break
} else {
logs.Info("当前: tableName: ", tc.TableName, "数据获取完成, " +
"总页数(page_num):", totalPage, ", 总条数(page_size):", totalCount, "\n",
- ",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compUrl)
+ ",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compURL)
lock.Lock()
tc.Page = tc.Page + page
- tc.Size = tc.Size + cur_count
+ tc.Size = tc.Size + curCount
lock.Unlock()
logs.Info("增加后: tableName: ", tc.TableName, "数据获取完成, " +
"总页数(page_num):", totalPage, ", 总条数(page_size):", totalCount, "\n",
- ",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compUrl)
+ ",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compURL)
}
logs.Info("start: ", tc)
} else {
- logs.Error("网络请求失败,url:", compUrl)
+ logs.Error("网络请求失败,url:", compURL)
continue
}
}
@@ -199,11 +200,11 @@ func ProcPackDetail(url string, values map[string]interface{}, tableValue models
}
return ge.PackageName, nil
}
- git_id, typex, err := models.CreateYaml(&ge, tableValue)
- if git_id > 0 && err == nil {
- logs.Info("第 ", i, "条数据, PackageName: ", ge.PackageName, typex, "成功, git_id: ", git_id)
+ gitID, typeX, err := models.CreateYaml(&ge, tableValue)
+ if gitID > 0 && err == nil {
+ logs.Info("第 ", i, "条数据, PackageName: ", ge.PackageName, typeX, "成功, git_id: ", gitID)
} else {
- logs.Error("第 ", i, "条数据, PackageName: ", ge.PackageName, typex, "失败, err: ", err)
+ logs.Error("第 ", i, "条数据, PackageName: ", ge.PackageName, typeX, "失败, err: ", err)
if strings.ContainsAny(string(err.Error()), "Duplicate entry") {
ok, _ := models.GetSingleYaml(&ge)
if ok {
@@ -221,7 +222,7 @@ func ProcPackDetail(url string, values map[string]interface{}, tableValue models
}
return "", err
}
- if typex == "insert" && git_id > 0 {
+ if typeX == "insert" && gitID > 0 {
_, pierr := GetPackageInfo(url, tableValue, ge)
if pierr != nil {
logs.Error("获取包详情失败, url: ", url, ", PackageName: ", ge.PackageName, ",version: ", ge.Version, ",err: ", pierr)
@@ -232,8 +233,8 @@ func ProcPackDetail(url string, values map[string]interface{}, tableValue models
}
func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.GitOpenEuler) (string, error){
- subcompUrl := url + "/packages/packageInfo" + "?table_name=" + tableValue.TableName + "&pkg_name=" + ge.PackageName
- body, err:= util.HttpGetCom(subcompUrl)
+ scpURL := url + "/packages/packageInfo" + "?table_name=" + tableValue.TableName + "&pkg_name=" + ge.PackageName
+ body, err:= util.HTTPGetCom(scpURL)
var respBody map[string]interface{}
if err == nil && body != nil {
err =json.Unmarshal(body, &respBody)
@@ -242,13 +243,13 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
return "", err
}
} else {
- logs.Error( "http 请求失败, subcompUrl: ", subcompUrl)
+ logs.Error( "http 请求失败, scpURL: ", scpURL)
return "", err
}
logs.Info(respBody)
if respBody["code"].(string) == "2001"{
if respBody["data"] == nil || respBody["data"] == "" {
- logs.Error("获取包详情失败, subcompUrl: ", subcompUrl)
+ logs.Error("获取包详情失败, scpURL: ", scpURL)
return "", errors.New("数据错误")
}
var gp models.GitPackageInfo
@@ -288,8 +289,8 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
} else {
gb.SubPackName = packValue["name"].(string)
}
- SubId, typex, err := models.CreateYamlSubPack(&gb)
- if SubId > 0 && typex == "insert" && err == nil {
+ SubID, typex, err := models.CreateYamlSubPack(&gb)
+ if SubID > 0 && typex == "insert" && err == nil {
if packValue["provides"] != nil && len(packValue["provides"].([]interface{})) > 0{
provides := packValue["provides"].([]interface{})
for _, provValuex := range provides {
@@ -299,7 +300,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
}
provValue := provValuex.(map[string]interface{})
var gs models.GitSubPackProvides
- gs.SubId = SubId
+ gs.SubId = SubID
switch provValue["id"].(type) {
case string:
gs.Ids, _ = strconv.ParseInt(provValue["id"].(string), 10, 64)
@@ -319,8 +320,8 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
}
gs.Requiredby = ""
- ProvideId, typexx, err := models.CreateYamlSubPackProvides(&gs)
- if ProvideId > 0 && typexx == "insert" && err == nil {
+ ProvideID, typexx, err := models.CreateYamlSubPackProvides(&gs)
+ if ProvideID > 0 && typexx == "insert" && err == nil {
if provValue["requiredby"] != nil && len(provValue["requiredby"].([]interface{})) > 0{
requiredby := provValue["requiredby"].([]interface{})
for _, reqValue := range requiredby {
@@ -328,8 +329,8 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
var gr models.GitSubPackRequiredby
gr.ProvideId = gs.ProvideId
gr.Requiredby = reqValue.(string)
- Id, typexy, err := models.CreateYamlSubPackRequiredb(&gr)
- logs.Info("CreateYamlSubPackRequiredb", Id, typexy, err)
+ ID, typexy, err := models.CreateYamlSubPackRequiredb(&gr)
+ logs.Info("CreateYamlSubPackRequiredb", ID, typexy, err)
}
}
}
@@ -357,7 +358,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
reqStr = reqStr[:len(reqStr) -1]
}
var gs models.GitSubPackRequire
- gs.SubId = SubId
+ gs.SubId = SubID
switch reqValuex["id"].(type) {
case string:
gs.Ids, _ = strconv.ParseInt(reqValuex["id"].(string), 10, 64)
@@ -376,8 +377,8 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
gs.RequireName = reqValuex["name"].(string)
}
gs.Providedby = reqStr
- RequireId, typexx, err := models.CreateYamlSubPackRequires(&gs)
- logs.Info("CreateYamlSubPackRequires", RequireId, typexx, err)
+ RequireID, typexx, err := models.CreateYamlSubPackRequires(&gs)
+ logs.Info("CreateYamlSubPackRequires", RequireID, typexx, err)
}
}
}
diff --git a/tests/createrepo_test.go b/tests/createrepo_test.go
index c24fc6e..3750e66 100644
--- a/tests/createrepo_test.go
+++ b/tests/createrepo_test.go
@@ -71,7 +71,7 @@ func PostGroupRepo(packName string) error {
"private": "false"
}`, accessToken, packName, packName)
logs.Info("isssue_body: ", requestBody)
- resp, err := util.HttpPost(url, requestBody)
+ resp, err := util.HTTPPost(url, requestBody)
if err != nil {
logs.Error("创建",packName,"失败, err: ", err)
return err
@@ -99,7 +99,7 @@ func PostRepo(packName string) error{
"private": "false"
}`, accessToken, packName, packName)
logs.Info("isssue_body: ", requestBody)
- resp, err := util.HttpPost(url, requestBody)
+ resp, err := util.HTTPPost(url, requestBody)
if err != nil {
logs.Error("创建",packName,"失败, err: ", err)
return err
@@ -122,7 +122,7 @@ func CreateBrand(packName string) error{
"branch_name": "openEuler-20.03-LTS"
}`, accessToken)
logs.Info("isssue_body: ", requestBody)
- resp, err := util.HttpPost(url, requestBody)
+ resp, err := util.HTTPPost(url, requestBody)
if err != nil {
logs.Error("创建分支:openEuler-20.03-LTS",packName,"失败, err: ", err)
return err
diff --git a/util/http.go b/util/http.go
index 527153a..38a6b0d 100644
--- a/util/http.go
+++ b/util/http.go
@@ -12,15 +12,19 @@ import (
"strings"
)
+//RequestInfo http request information
type RequestInfo struct {
- Url string
- Data map[string]string //post要传输的数据,必须key value必须都是string
+ URL string
+ Data map[string]string //post要传输的数据,必须key value必须都是string
DataInterface map[string]interface{}
}
-
-func HttpPatch(url string, requestBody string) (map[string]interface{}, error){
+//HTTPPatch patch request
+func HTTPPatch(url string, requestBody string) (map[string]interface{}, error) {
req, err := http.NewRequest("PATCH", url, bytes.NewBuffer([]byte(requestBody)))
+ if err != nil {
+ return nil, err
+ }
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
@@ -44,7 +48,7 @@ func HttpPatch(url string, requestBody string) (map[string]interface{}, error){
}
logs.Info("post 返回成功!, body: ", string(body))
var iss map[string]interface{}
- err =json.Unmarshal(body, &iss)
+ err = json.Unmarshal(body, &iss)
if err != nil {
logs.Error(err, string(body))
return nil, err
@@ -53,9 +57,12 @@ func HttpPatch(url string, requestBody string) (map[string]interface{}, error){
return iss, nil
}
-
-func HttpPost(url string, requestBody string) (map[string]interface{}, error){
+//HTTPPost post request
+func HTTPPost(url string, requestBody string) (map[string]interface{}, error) {
req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(requestBody)))
+ if err != nil {
+ return nil, err
+ }
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
@@ -79,7 +86,7 @@ func HttpPost(url string, requestBody string) (map[string]interface{}, error){
}
logs.Info("post 返回成功!, body: ", string(body))
var iss map[string]interface{}
- err =json.Unmarshal(body, &iss)
+ err = json.Unmarshal(body, &iss)
if err != nil {
logs.Error(err, string(body))
return nil, err
@@ -88,8 +95,12 @@ func HttpPost(url string, requestBody string) (map[string]interface{}, error){
return iss, nil
}
-func HttpPost1(url string, requestBody string) ([]map[string]interface{}, error){
+//HTTPPost1 post request
+func HTTPPost1(url string, requestBody string) ([]map[string]interface{}, error) {
req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(requestBody)))
+ if err != nil {
+ return nil, err
+ }
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
@@ -113,7 +124,7 @@ func HttpPost1(url string, requestBody string) ([]map[string]interface{}, error)
}
logs.Info("post 返回成功!, body: ", string(body))
var iss []map[string]interface{}
- err =json.Unmarshal(body, &iss)
+ err = json.Unmarshal(body, &iss)
if err != nil {
logs.Error(err, string(body))
return nil, err
@@ -122,41 +133,42 @@ func HttpPost1(url string, requestBody string) ([]map[string]interface{}, error)
return iss, nil
}
-func PostUrlEncoded(this RequestInfo)([]byte,error){
+//PostURLEncoded request params encode
+func PostURLEncoded(this RequestInfo) ([]byte, error) {
client := &http.Client{}
//post要提交的数据
- DataUrlVal := url.Values{}
- for key,val := range this.Data{
- DataUrlVal.Add(key,val)
+ DataURLVal := url.Values{}
+ for key, val := range this.Data {
+ DataURLVal.Add(key, val)
}
- req,err := http.NewRequest("POST",this.Url,strings.NewReader(DataUrlVal.Encode()))
- if err != nil{
+ req, err := http.NewRequest("POST", this.URL, strings.NewReader(DataURLVal.Encode()))
+ if err != nil {
logs.Error(err)
- return nil,err
+ return nil, err
}
//伪装头部
- req.Header.Set("Accept","application/json")
- req.Header.Add("Content-Type","application/x-www-form-urlencoded")
+ req.Header.Set("Accept", "application/json")
+ req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
//提交请求
- resp,err := client.Do(req)
- defer resp.Body.Close()
- if err != nil{
+ resp, err := client.Do(req)
+ if err != nil {
logs.Error(err)
- return nil,err
+ return nil, err
}
+ defer resp.Body.Close()
//读取返回值
- result,err := ioutil.ReadAll(resp.Body)
- if err != nil{
+ result, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
logs.Error(err)
- return nil,err
+ return nil, err
}
logs.Info(string(result))
- return result,nil
+ return result, nil
}
-
-func HttpGet(url string) ([]map[string]interface{}, error){
+//HTTPGet get request
+func HTTPGet(url string) ([]map[string]interface{}, error) {
resp, err := http.Get(url)
if err != nil {
logs.Error("get error, url:", url, "error: ", err)
@@ -167,18 +179,18 @@ func HttpGet(url string) ([]map[string]interface{}, error){
if err != nil {
logs.Error("url:", url, ",err: ", err)
return nil, err
- }else {
- logs.Info("body: \n", string(body), "url: ", url)
}
+ logs.Info("body: \n", string(body), "url: ", url)
var col []map[string]interface{}
- err =json.Unmarshal(body, &col)
+ err = json.Unmarshal(body, &col)
if err != nil {
logs.Error(err)
}
return col, nil
}
-func HttpGetCom(url string) ([]byte, error){
+//HTTPGetCom common get request
+func HTTPGetCom(url string) ([]byte, error) {
resp, err := http.Get(url)
if err != nil {
logs.Error("get error, url:", url, "error: ", err)
@@ -189,8 +201,7 @@ func HttpGetCom(url string) ([]byte, error){
if err != nil {
logs.Error(err)
return nil, err
- }else {
- logs.Info("body: \n", string(body), "url: ", url)
}
+ logs.Info("body: \n", string(body), "url: ", url)
return body, nil
-}
\ No newline at end of file
+}
diff --git a/util/parsepayload.go b/util/parsepayload.go
index 9e0a935..5df705c 100644
--- a/util/parsepayload.go
+++ b/util/parsepayload.go
@@ -9,54 +9,84 @@ import (
)
const (
- KwAnalysisDesc = "影响性分析说明:"
+ //KwAnalysisDesc 影响性分析说明的关键字
+ KwAnalysisDesc = "影响性分析说明:"
+ //KwOpenEulerScore openEuler评分的关键字
KwOpenEulerScore = "openEuler评分:"
- KwEffectVersion = "受影响版本排查(受影响/不受影响):"
+ //KwEffectVersion 受影响的版本的关键字
+ KwEffectVersion = "受影响版本排查(受影响/不受影响):"
)
var (
- LAC = "LAC" //漏洞组件标签
- LN = "LN" //漏洞编号标签
- LAV = "LAV" //漏洞版本标签
- CVS = "CVS" //cvss 3.0分值标签
- CVV = "CVV" //cvss 3.1向量标签
- LD = "LD" //漏洞描述标签
- IAD = "IAD" //影响分析说明标签
- PA = "PA" //原理分析标签
- OES = "OES" //openEuler评分标签
- OEV = "OEV" //openEuler向量标签
- IV = "IV" //影响的版本标签
- CPMM = "CPMM" //规避方案措施
- IW = "IW" //影响的包
+ //LAC 漏洞组件标签
+ //LAC = "LAC"
+ //LN 漏洞编号标签
+ //LN = "LN"
+ //LAV 漏洞版本标签
+ //LAV = "LAV"
+ //CVS cvss 3.0分值标签
+ //CVS = "CVS"
+ //CVV cvss 3.1向量标签
+ //CVV = "CVV"
+ //LD 漏洞描述标签
+ LD = "LD"
+ //IAD 影响分析说明标签
+ IAD = "IAD"
+ //PA 原理分析标签
+ PA = "PA"
+ //OES openEuler评分标签
+ OES = "OES"
+ //OEV openEuler向量标签
+ OEV = "OEV"
+ //IV 影响的版本标签
+ IV = "IV"
+ //CPMM 规避方案措施
+ CPMM = "CPMM"
+ //IW 影响的包
+ IW = "IW"
+ //CommentKeys 新版评论解析的关键字
CommentKeys = []string{KwAnalysisDesc, KwOpenEulerScore, KwEffectVersion}
)
var (
- CvsScoreV3 = "v3"
- CvsScoreV2 = "v2"
+ //CvsScoreV3 nveScoreType v3
+ CvsScoreV3 = "v3"
+ //CvsScoreV2 nveScoreType V2
+ CvsScoreV2 = "v2"
+ //RegexpCveNumber cveNum extract regexp
RegexpCveNumber = regexp.MustCompile(`漏洞编号[::](?s:(.*?))漏洞归属组件[::]`)
- RegexpCveNumberLink = regexp.MustCompile(`\[(.*?)\]\((.*?)\)`)
+ regexpCveNumberLink = regexp.MustCompile(`\[(.*?)\]\((.*?)\)`)
+ //RegexpCveComponents components extract regexp
RegexpCveComponents = regexp.MustCompile(`漏洞归属组件[::](?s:(.*?))漏洞归属的?版本[::]`)
- RegexpCveVersion = regexp.MustCompile(`漏洞归属的?版本[::](?s:(.*?))CVSS V[23].0分值[::]`)
- RegexpCveScore = regexp.MustCompile(`CVSS V[23].0分值[::](?s:(.*?))漏洞[简描]述[::]`)
- //RegexpCveScore = regexp.MustCompile(`CVSS V3.0分值[::](?s:(.*?))Vector[::]`)
- //RegexpCveVector = regexp.MustCompile(`Vector[::](?s:(.*?))(漏洞简述[::])`)
- RegexpCveBriefDesc = regexp.MustCompile(`漏洞[简描]述[::](?s:(.*?))影响性分析说明[::]`)
- RegexpCveInfluencesDesc = regexp.MustCompile(`影响性分析说明[::](?s:(.*?))原理分析[::]`)
+ //RegexpCveVersion cveVersion extract regexp
+ RegexpCveVersion = regexp.MustCompile(`漏洞归属的?版本[::](?s:(.*?))CVSS V[23].0分值[::]`)
+ //RegexpCveScore cveScore extract regexp
+ RegexpCveScore = regexp.MustCompile(`CVSS V[23].0分值[::](?s:(.*?))漏洞[简描]述[::]`)
+ //RegexpCveBriefDesc brief description extract regexp
+ RegexpCveBriefDesc = regexp.MustCompile(`漏洞[简描]述[::](?s:(.*?))影响性分析说明[::]`)
+ //RegexpCveInfluencesDesc influences description regexp
+ RegexpCveInfluencesDesc = regexp.MustCompile(`影响性分析说明[::](?s:(.*?))原理分析[::]`)
+ //RegexpCveInfluencesDescNew new tpl influences description regexp
RegexpCveInfluencesDescNew = regexp.MustCompile(`影响性分析说明[::](?s:(.*?))openEuler评分[::]`)
- RegexpCvePrincipleDesc = regexp.MustCompile(`原理分析[::](?s:(.*?))openEuler评分[::]`)
- RegexpCveOpScore = regexp.MustCompile(`openEuler评分[::](?s:(.*?))受影响版本[::]`)
- RegexpCveOpScoreNew = regexp.MustCompile(`openEuler评分[::](?s:(.*?))受影响版本排查\(受影响/不受影响\)[::]`)
- //RegexpCveOpScore1 = regexp.MustCompile(`openEuler评分[::](?s:(.*?))受影响版本[::]`)
- //RegexpCveOpVector = regexp.MustCompile(`openEulerVector[::](?s:(.*?))受影响版本[::]`)
- RegexpCveInfluencesVersion = regexp.MustCompile(`受影响版本[::](?s:(.*?))规避方案或消减措施[::]`)
+ //RegexpCvePrincipleDesc principle description regexp
+ RegexpCvePrincipleDesc = regexp.MustCompile(`原理分析[::](?s:(.*?))openEuler评分[::]`)
+ //RegexpCveOpScore openEuler score regexp
+ RegexpCveOpScore = regexp.MustCompile(`openEuler评分[::](?s:(.*?))受影响版本[::]`)
+ //RegexpCveOpScoreNew new tpl openEuler score regexp
+ RegexpCveOpScoreNew = regexp.MustCompile(`openEuler评分[::](?s:(.*?))受影响版本排查\(受影响/不受影响\)[::]`)
+ //RegexpCveInfluencesVersion influences version regexp
+ RegexpCveInfluencesVersion = regexp.MustCompile(`受影响版本[::](?s:(.*?))规避方案或消减措施[::]`)
+ //RegexpCveInfluencesVersionNew new tpl influences version regexp
RegexpCveInfluencesVersionNew = regexp.MustCompile(`受影响版本排查\(受影响/不受影响\)[::](?s:(.*?))$`)
- RegexpCvePlannedMeasures = regexp.MustCompile(`规避方案或消减措施[::](?s:(.*?))受影响的包[::]`)
- RegexpCvePlannedMeasures1 = regexp.MustCompile(`规避方案或消减措施[::](?s:(.*?))$`)
- RegexpCveInfluencesPkg = regexp.MustCompile(`受影响的包[::](?s:(.*?))$`)
+ //RegexpCvePlannedMeasures the cve planned measures regexp
+ RegexpCvePlannedMeasures = regexp.MustCompile(`规避方案或消减措施[::](?s:(.*?))受影响的包[::]`)
+ //RegexpCvePlannedMeasures1 the second cve planned measures regexp
+ RegexpCvePlannedMeasures1 = regexp.MustCompile(`规避方案或消减措施[::](?s:(.*?))$`)
+ //RegexpCveInfluencesPkg the cve influences package regexp
+ RegexpCveInfluencesPkg = regexp.MustCompile(`受影响的包[::](?s:(.*?))$`)
+ //RegexpDigital digital regexp
+ RegexpDigital = regexp.MustCompile(`(\d){1,}(\.\d+)?`)
RegexpSpecialDigital = regexp.MustCompile(`(CVSS[::]3.0|CVSS[::]2.0|cvss[::]3.0|cvss[::]2.0|3.0/|2.0/|3.0 /|2.0 /)*`) //^((CVSS:3.0|CVSS:2.0|3.0/|2.0/|3.0 /|2.0 /).)*$
- RegexpDigital = regexp.MustCompile(`(\d){1,}(\.?\d+)?`) //(\d){1,}(\.\d+)?
- //`/AV:[NLAP]/AC:[HL]/PR:[NLH]/UI:[NR]/S:[UC]/C:[NLH]/I:[HNL]/A:[LNH]`
RegexpVector = regexp.MustCompile(`AV:[NLAP](?s:(.*?))/A:[LNH]`)
RegexpVectorV2 = regexp.MustCompile(`AV:[LAN](?s:(.*))/Au:[MSN](?s:(.*))/A:[NPC]`)
RegexpScoreTypeV2 = regexp.MustCompile(`(?mi)^CVSS v2.0分值\s*`)
@@ -69,16 +99,21 @@ var (
)
var (
+ //VectorMapV2 the vector v2.0 map
VectorMapV2 map[string]map[string]string
- VectorMap map[string]map[string]string
- mutex sync.Mutex
+ //VectorMap the vector v3.0 map
+ VectorMap map[string]map[string]string
+ mutex sync.Mutex
)
+//CommentAnalysis issue comment analysis keyword and value container
type CommentAnalysis struct {
KeyName string
KeyIdx int
KeyValue string
}
+
+//CaSlice define the CommentAnalysis slice
type CaSlice []CommentAnalysis
func (a CaSlice) Len() int {
@@ -109,10 +144,10 @@ func init() {
mPr["N"] = "None"
mPr["L"] = "Low"
VectorMap["PR"] = mPr
- mUi := make(map[string]string)
- mUi["N"] = "None"
- mUi["R"] = "Require"
- VectorMap["UI"] = mUi
+ mUI := make(map[string]string)
+ mUI["N"] = "None"
+ mUI["R"] = "Require"
+ VectorMap["UI"] = mUI
mS := make(map[string]string)
mS["U"] = "Unchanged"
mS["C"] = "Changed"
@@ -184,7 +219,7 @@ func GenerateCommentAnalysis(content string) (ca CaSlice) {
//sort by index
sort.Sort(ca)
//extract keyword value
- for k, _ := range ca {
+ for k := range ca {
if k == len(ca)-1 {
start := ca[k].KeyIdx + len(ca[k].KeyName)
ca[k].KeyValue = content[start:]
@@ -209,11 +244,13 @@ func ParseCommentContent(content string, label string) (res string, ok bool) {
return
}
+//ParseCommentVector extract vector from issue comment
func ParseCommentVector(content string) string {
sm := RegexpVector.Find([]byte(content))
return string(sm)
}
+//ExtractVector extract vector from issue body
func ExtractVector(body, scoreType string) string {
if body == "" {
return body
@@ -233,7 +270,8 @@ func ExtractVector(body, scoreType string) string {
return ""
}
-func ReadVmValue(kStr string) (value string) {
+//ReadVMValue get vector v3 value from the vector map by keyword
+func ReadVMValue(kStr string) (value string) {
if kStr == "" {
return ""
}
@@ -253,7 +291,8 @@ func ReadVmValue(kStr string) (value string) {
return
}
-func ReadVmValueV2(kStr string) (value string) {
+//ReadVMValueV2 get vector v2 value from the vector map by keyword
+func ReadVMValueV2(kStr string) (value string) {
if kStr == "" {
return ""
}
@@ -273,6 +312,7 @@ func ReadVmValueV2(kStr string) (value string) {
return
}
+//VctToMap Convert vector string value to map
func VctToMap(vct string) (vctMap map[string]string, ok bool) {
if vct == "" {
return nil, false
@@ -291,11 +331,12 @@ func VctToMap(vct string) (vctMap map[string]string, ok bool) {
}
if len(vMap) > 0 {
return vMap, true
- } else {
- return nil, false
}
+ return nil, false
+
}
+//ParseCommentWithAllLabel extract comment value with custom label
func ParseCommentWithAllLabel(content string) map[string]string {
res := make(map[string]string, 0)
s, ok := ParseCommentContent(content, IAD)
@@ -333,6 +374,7 @@ func ParseCommentWithAllLabel(content string) map[string]string {
return res
}
+//ExtractCommentAnalysisAllValue Extract all value by issue comment
func ExtractCommentAnalysisAllValue(content string) map[string]string {
res := make(map[string]string, 0)
ca := GenerateCommentAnalysis(content)
@@ -351,17 +393,18 @@ func ExtractCommentAnalysisAllValue(content string) map[string]string {
value, ext = ExtractCommentValue(ca, KwOpenEulerScore)
if ext {
score, vector := ExtractCommentOpenEulerScore(value)
- if score != ""{
- res["openeuler_score"] = score
+ if score != "" {
+ res["openeuler_score"] = score
}
if vector != "" {
- res["openeuler_vector"] = vector
+ res["openeuler_vector"] = vector
}
}
}
return res
}
+//ExtractCommentEffectVersion Extract the affected version from the issue comment
func ExtractCommentEffectVersion(str string) string {
str = strings.Trim(str, " ")
var res []string
@@ -398,6 +441,7 @@ func ExtractCommentEffectVersion(str string) string {
return ""
}
+//ExtractCommentValue Get the value of CaSlice by keyword
func ExtractCommentValue(ca CaSlice, keyWord string) (string, bool) {
for _, v := range ca {
if v.KeyName == keyWord {
@@ -407,6 +451,7 @@ func ExtractCommentValue(ca CaSlice, keyWord string) (string, bool) {
return "", false
}
+//ExtractCommentOpenEulerScore Extract openEuler score from issue comment
func ExtractCommentOpenEulerScore(str string) (score, vector string) {
str = TrimString(str)
score = ExtractDigital(str)
@@ -421,6 +466,7 @@ func genCommentRegexpStr(label string) string {
return fmt.Sprintf(`\[%s\](?s:(.*?))\[/%s\]`, label, label)
}
+//TrimString Remove the \n \r \t spaces in the string
func TrimString(str string) string {
str = strings.Replace(str, " ", "", -1)
str = strings.Replace(str, "\n", "", -1)
@@ -429,6 +475,7 @@ func TrimString(str string) string {
return str
}
+//TrimStringNR Remove the \n \r in the string
func TrimStringNR(str string) string {
str = strings.Replace(str, "\n", "", -1)
str = strings.Replace(str, "\r", "", -1)
@@ -436,6 +483,7 @@ func TrimStringNR(str string) string {
return str
}
+//ExtractDigital Get number in string
func RemoveSpecialDigital(body string) string {
if body == "" {
return body
@@ -465,13 +513,13 @@ func ExtractDigital(body string) string {
return ""
}
+//GetCveNumber Extract cveNum from the issue body cveNumber link
func GetCveNumber(ov string) string {
- if v := RegexpCveNumberLink.Find([]byte(ov)); len(v) > 0 {
+ if v := regexpCveNumberLink.Find([]byte(ov)); len(v) > 0 {
sv := string(v)
start := strings.Index(sv, "[") + 1
end := strings.Index(sv, "]")
return sv[start:end]
- } else {
- return ov
}
+ return ov
}
--
Gitee
From ed04cda795210f58e15b82f7fab670506c4bb038 Mon Sep 17 00:00:00 2001
From: zhangjianjun_code <7844966+zhangjianjun_code@user.noreply.gitee.com>
Date: Wed, 14 Oct 2020 10:09:41 +0800
Subject: [PATCH 3/5] 1. Add user error feedback interface; 2. Modify the bug
encountered in the test; 2. Add the cve detail display link in the issue
template; 3. Add the dockerfile file
---
Dockerfile | 30 ++++++
common/common.go | 18 ++++
conf/app.conf | 15 +--
conf/product_app.conf | 102 ++++++++++++++++++
controllers/cvedetail.go | 220 +++++++++++++++++++++++++++++++++++++++
controllers/upload.go | 90 ++++++++++++++++
doc/sql/db_struct.sql | 73 ++++++-------
models/cve.go | 6 +-
models/cvedetail.go | 150 ++++++++++++++++++++++++++
models/issue.go | 3 +-
models/modeldb.go | 43 ++++----
models/uploadcve.go | 21 ++++
routers/router.go | 10 ++
task/inittask.go | 26 +++++
task/printlog.go | 50 +++++++++
taskhandler/common.go | 49 +++++++--
taskhandler/cve.go | 6 ++
taskhandler/yaml.go | 4 -
util/parsepayload.go | 3 +-
19 files changed, 840 insertions(+), 79 deletions(-)
create mode 100644 Dockerfile
create mode 100644 conf/product_app.conf
create mode 100644 controllers/cvedetail.go
create mode 100644 models/cvedetail.go
create mode 100644 task/printlog.go
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..b66da06
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,30 @@
+FROM centos
+
+FROM library/golang
+
+# Godep for vendoring
+RUN go get github.com/tools/godep
+
+# Recompile the standard library without CGO
+RUN CGO_ENABLED=0 go install -a std
+
+ENV APP_DIR $GOPATH\src\cve-manager
+RUN mkdir -p $APP_DIR
+
+# Set the entrypoint
+ENTRYPOINT (cd $APP_DIR && ./\src\cve-manager)
+ADD . $APP_DIR
+
+# Compile the binary and statically link
+RUN cd $APP_DIR && CGO_ENABLED=0 godep go build -ldflags '-d -w -s'
+
+EXPOSE 80
+
+# copy binary config and utils
+FROM golang:latest
+RUN mkdir -p /opt/cve-manager/conf
+COPY ./conf/product_app.conf /opt/cve-manager/app.conf
+COPY ./cve-manager/cve-manager /opt/cve-manager
+
+WORKDIR /opt/app/
+ENTRYPOINT ["/opt/app/cve-manager"]
\ No newline at end of file
diff --git a/common/common.go b/common/common.go
index f5f2c22..e5238e1 100644
--- a/common/common.go
+++ b/common/common.go
@@ -305,6 +305,24 @@ type UploadData struct {
CveData []CveOriginData
}
+type CveOriginDetailData struct {
+ CveNum string `json:"cveNum"`
+ CvePackName string `json:"cvePackName"`
+ Description CveDescription `json:"description"`
+ Title string `json:"title"`
+ Configurations CveConfigurations `json:"configurations"`
+ CnnvdID string `json:"cnnvdID"`
+ CnvdID string `json:"cnvdID"`
+ PublishedDate string `json:"publishedDate"`
+ Impact CveImpact `json:"impact"`
+ VulStatus string `json:"vulStatus"`
+ Poc CvePoc `json:"poc"`
+ Event CveEvent `json:"event"`
+ ReferenceData []CveReferenceData `json:"referenceData"`
+ VulType CveVulType `json:"vulType"`
+ FixSuggest CveFixSuggest `json:"fixSuggest"`
+}
+
func GetRepoOrg() (string, error) {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil{
diff --git a/conf/app.conf b/conf/app.conf
index 634471b..93cf1bc 100644
--- a/conf/app.conf
+++ b/conf/app.conf
@@ -21,13 +21,13 @@ approveCmd = "/approve"
[mysql]
-#dbhost = 127.0.0.1
-dbhost = 159.138.2.2
+dbhost = 192.168.1.95
+#dbhost = 159.138.2.2
dbport = 3306
#dbuser = "${DB_USER||root}"
dbuser = "${DB_USER||cve}"
-#dbpwd = "${DB_PWD||***}"
-dbpwd = "+KAOKtEnEn7gRlDEIjeh59lutAMw2688YOqKVJQ2+Lo="
+dbpwd = "${DB_PWD||***}"
+#dbpwd = "+KAOKtEnEn7gRlDEIjeh59lutAMw2688YOqKVJQ2+Lo="
dbname = cvevulner
dbprefix = cve_
maxidle = 30
@@ -36,6 +36,7 @@ maxconn = 3000
[log]
log_level = 7
+log_dir = ./logs
#log_path = C:\GoPject\src\cvevulner\logs\cve.log
log_path = logs/cve.log
maxlines=200000
@@ -44,13 +45,13 @@ maxsize=1024000
[crontab]
ymalflag = 2
getymal = 00 00 23 * * *
-cveflag = 1
+cveflag = 2
getcve = 00 00 01 * * *
oricveflag = 2
oricvecheck = 00 00 02 * * *
getissueflag = 2
getissue = 00 00 03 * * *
-issueflag = 1
+issueflag = 2
createissue = * * 01 * * *
test = 0/10 * * * * *
gittokenflag = 1
@@ -59,6 +60,8 @@ genexcelflag = 2
genexcel = 00 00 04 * * *
days = -30
prcnum = 100
+printlogflag = 1
+printlog = 0 */10 * * * *
[gitee]
diff --git a/conf/product_app.conf b/conf/product_app.conf
new file mode 100644
index 0000000..0697ea9
--- /dev/null
+++ b/conf/product_app.conf
@@ -0,0 +1,102 @@
+#appname = cvevulner
+appname = cve_manager
+httpport = 80
+runmode = dev
+autorender = false
+copyrequestbody = true
+EnableDocs = true
+sqlconn =
+# 登录双方约定的key
+key = "${AES_KEY||djS*@+8K9{J!ymk6}"
+initdb = 1
+# 登录key
+loginkey = "{${LOGIN_KEY||djS*@+8K9{-!yo%64}"
+# token 有效期,单位:天
+token_expir_time=3
+#分析指令
+analysisCmd = "/analysis"
+endCmd = "/done"
+rejectCmd = "/reject"
+approveCmd = "/approve"
+
+
+[mysql]
+#dbhost = 127.0.0.1
+dbhost = fafd55e8084b402d9998539b072eef7fin01.internal.ap-southeast-1.mysql.rds.myhuaweicloud.com
+dbport = 3306
+#dbuser = "${DB_USER||root}"
+dbuser = "${DB_USER||cve}"
+dbpwd = "${DB_PWD||***}"
+dbname = cvevulner
+dbprefix = cve_
+maxidle = 30
+maxconn = 3000
+
+
+[log]
+log_level = 7
+#log_path = C:\GoPject\src\cvevulner\logs\cve.log
+log_path = logs/cve.log
+maxlines=200000
+maxsize=1024000
+
+[crontab]
+ymalflag = 2
+getymal = 00 00 23 * * *
+cveflag = 2
+getcve = 00 00 01 * * *
+oricveflag = 2
+oricvecheck = 00 00 02 * * *
+getissueflag = 2
+getissue = 00 00 03 * * *
+issueflag = 2
+createissue = * * 01 * * *
+test = 0/10 * * * * *
+gittokenflag = 1
+issueoath = * * */20 * * *
+genexcelflag = 2
+genexcel = 00 00 04 * * *
+days = -30
+prcnum = 100
+
+
+[gitee]
+#owner = xwzQmxx
+#path = test
+#email = 1499273991@qq.com
+#redirect_uri = http://119.8.126.102:80/v1/issue/oauth/callback
+# -------jianjun gitee 配置 --------
+owner = src-openeuler
+path = jasper
+email = 7844966+zhangjianjun_code@user.noreply.gitee.com
+redirect_uri = http://159.138.2.2:80/v1/issue/oauth/callback
+
+scope = user_info projects pull_requests issues notes keys hook groups gists enterprises emails
+# 优先从系统环境变量获取 获取失败使用默认值 ****
+client_id = "${GITEE_CLIENT_ID||****}"
+client_secret = "${GITEE_CLIENT_SECRET||****}"
+password = "${GITEE_PASSWORD||****}"
+
+# git token
+git_token = "${GITEE_TOKEN||xxx}"
+
+[hook]
+hookpwd = "${HOOK_PWD||***}"
+hookurl = http://159.138.2.2:80/v1/issue/hook/event
+#hookurl = http://119.8.126.102:80/v1/issue/hook/event
+
+
+[yaml]
+apiurl = https://api.openeuler.org/pkgmanage
+
+[cve]
+cveref = https://nvd.nist.gov/vuln/detail/
+openeulernum = 3000
+
+[reflink]
+comment_cmd = https://gitee.com/openeuler/cve-manager/blob/master/doc/md/manual.md
+
+[excel]
+forcerewrite = false
+snprefix = op-2020-10-
+snsuffix = 1002
\ No newline at end of file
diff --git a/controllers/cvedetail.go b/controllers/cvedetail.go
new file mode 100644
index 0000000..9dea1e4
--- /dev/null
+++ b/controllers/cvedetail.go
@@ -0,0 +1,220 @@
+package controllers
+
+import (
+ "cvevulner/common"
+ "cvevulner/errcode"
+ "cvevulner/models"
+ "github.com/astaxie/beego"
+ "github.com/astaxie/beego/logs"
+)
+
+// Operations about Packages
+
+type CveDetailController struct {
+ beego.Controller
+}
+
+func (c *CveDetailController) RetData(resp map[string]interface{}) {
+ c.Data["json"] =resp
+ c.ServeJSON()
+}
+
+
+// @Title Get cvedetail
+// @Description get cvedetail
+// @Param cvenumber type string true
+// @Success 200 {object} models.uploadcve
+// @Failure 403 :cvenumber is err
+// @router / [get]
+func (u *CveDetailController) Get() {
+ req := u.Ctx.Request
+ addr := req.RemoteAddr
+ logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
+ resp := make(map[string]interface{})
+ var cod common.CveOriginDetailData
+ resp["errno"]=errcode.RecodeUnknowErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
+ resp["body"] = cod
+ defer u.RetData(resp)
+ cveNum := u.GetString("cveNum")
+ if cveNum == "" {
+ logs.Error("cveNum, 参数错误")
+ resp["errno"]=errcode.RecodeParamErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
+ return
+ }
+ cveType, typeError := u.GetInt("cveType")
+ if typeError != nil || cveType == 0 {
+ logs.Error("cveType, 参数错误")
+ resp["errno"]=errcode.RecodeParamErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
+ return
+ }
+ // 原始数据来源于中科院展示
+ if cveType == 1 {
+ var ou models.OriginUpstream
+ ouErr := models.GetOriginUpstream(cveNum, &ou)
+ if ouErr != nil || ou.CveId == 0{
+ resp["errno"]=errcode.RecodeNodata
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
+ return
+ }
+ cod.CveNum = ou.CveNum
+ cod.CvePackName = ou.PackName
+ cod.Title = ou.Title
+ cod.CnnvdID = ou.CnnvdID
+ cod.CnvdID = ou.CnvdID
+ cod.PublishedDate = ou.PublishedDate
+ cod.VulStatus = ou.VulStatus
+
+ var oud models.OriginUpstreamDesc
+ oudErr := models.GetOriginDesc(ou.CveId, &oud)
+ if oudErr == nil && oud.DescId > 0 {
+ cod.Description.EnDesc = oud.EnDescription
+ cod.Description.ZhDesc = oud.ZhDescription
+ }
+ var ouc models.OriginUpstreamConfig
+ oucErr := models.GetOriginConfig(ou.CveId, &ouc)
+ if oucErr == nil && ouc.ConfId > 0 {
+ var oucn []models.OriginUpstreamConfigNode
+ var cf common.CveConfigurations
+ oucnNum, oucnErr := models.GetOriginConfigNode(ouc.ConfId, &oucn)
+ if oucnNum > 0 && oucnErr == nil {
+ for _, nodes := range oucn {
+ var cn common.ConfNodes
+ cn.Operator = nodes.Operator
+ var oucnc []models.OriginUpstreamConfigNodeCpe
+ oucncNum, oucncErr := models.GetOriginConfigNodeCpe(nodes.NodeId, &oucnc)
+ if oucncNum > 0 && oucncErr == nil {
+ for _, cpe := range oucnc {
+ var cnc common.NodeCpe
+ cnc.Vulnerable = cpe.Vulnerable
+ cnc.CpeMatchString = cpe.CpeMatchString
+ cnc.Cpe23Uri = cpe.Cpe23Uri
+ cn.Cpe = append(cn.Cpe, cnc)
+ }
+ }
+ cf.Nodes = append(cf.Nodes, cn)
+ }
+ }
+ cod.Configurations = cf
+ }
+ cveImpact, ok := models.QueryCveImpact(ou.CveId)
+ if ok && cveImpact.ImpactId > 0 {
+ cveScore, ok := models.QueryCveScore(cveImpact.ImpactId, "v3")
+ if ok && cveScore.ScoreId > 0{
+ cveScV3, ok := models.QueryCveCvssV3(cveScore.ScoreId)
+ if ok && cveScV3.V3Id > 0 {
+ logs.Info(cveScV3)
+ cod.Impact.BaseMetricV3.CvssV3.Version = cveScV3.Version
+ cod.Impact.BaseMetricV3.CvssV3.VectorString = cveScV3.VectorString
+ cod.Impact.BaseMetricV3.CvssV3.AttackComplexity = cveScV3.AttackComplexity
+ cod.Impact.BaseMetricV3.CvssV3.AttackVector = cveScV3.AttackVector
+ cod.Impact.BaseMetricV3.CvssV3.AvailabilityImpact = cveScV3.AvailabilityImpact
+ cod.Impact.BaseMetricV3.CvssV3.BaseSeverity = cveScV3.BaseSeverity
+ cod.Impact.BaseMetricV3.CvssV3.UserInteraction = cveScV3.UserInteraction
+ cod.Impact.BaseMetricV3.CvssV3.BaseScore = cveScV3.BaseScore
+ cod.Impact.BaseMetricV3.CvssV3.PrivilegesRequired = cveScV3.PrivilegesRequired
+ cod.Impact.BaseMetricV3.CvssV3.ConfidentialityImpact = cveScV3.ConfidentialityImpact
+ cod.Impact.BaseMetricV3.CvssV3.IntegrityImpact = cveScV3.IntegrityImpact
+ cod.Impact.BaseMetricV3.CvssV3.Scope = cveScV3.Scope
+ cod.Impact.BaseMetricV3.ExploitabilityScore = cveScV3.ExploitabilityScore
+ cod.Impact.BaseMetricV3.ImpactScore = cveScV3.ImpactScore
+ }
+ }
+ cveScoreV2, ok2 := models.QueryCveScore(cveImpact.ImpactId, "v2")
+ if ok2 && cveScoreV2.ScoreId > 0 {
+ cveScV2, okV2 := models.QueryCveCvssV2(cveScoreV2.ScoreId)
+ if okV2 && cveScV2.V2Id > 0 {
+ logs.Info(cveScV2)
+ cod.Impact.BaseMetricV2.CvssV2.VectorString = cveScV2.VectorString
+ cod.Impact.BaseMetricV2.CvssV2.AccessComplexity = cveScV2.AccessComplexity
+ cod.Impact.BaseMetricV2.CvssV2.AvailabilityImpact = cveScV2.AvailabilityImpact
+ cod.Impact.BaseMetricV2.CvssV2.Authentication = cveScV2.Authentication
+ cod.Impact.BaseMetricV2.CvssV2.Version = cveScV2.Version
+ cod.Impact.BaseMetricV2.CvssV2.BaseScore = cveScV2.BaseScore
+ cod.Impact.BaseMetricV2.CvssV2.IntegrityImpact = cveScV2.IntegrityImpact
+ cod.Impact.BaseMetricV2.CvssV2.ConfidentialityImpact = cveScV2.ConfidentialityImpact
+ cod.Impact.BaseMetricV2.CvssV2.AccessVector = cveScV2.AccessVector
+ cod.Impact.BaseMetricV2.AcInsufInfo = cveScV2.AcInsufInfo
+ cod.Impact.BaseMetricV2.UserInteractionRequired = cveScV2.UserInteractionRequired
+ cod.Impact.BaseMetricV2.Severity = cveScV2.Severity
+ cod.Impact.BaseMetricV2.ObtainUserPrivilege = cveScV2.ObtainUserPrivilege
+ cod.Impact.BaseMetricV2.ObtainAllPrivilege = cveScV2.ObtainAllPrivilege
+ cod.Impact.BaseMetricV2.ImpactScore = cveScV2.ImpactScore
+ cod.Impact.BaseMetricV2.ExploitabilityScore = cveScV2.ExploitabilityScore
+ cod.Impact.BaseMetricV2.ObtainOtherPrivilege = cveScV2.ObtainOtherPrivilege
+ }
+ }
+ }
+ var oup models.OriginUpstreamPoc
+ oupErr := models.GetOriginPoc(ou.CveId, &oup)
+ if oupErr == nil && oup.PocId > 0 {
+ cod.Poc.Url = oup.Url
+ cod.Poc.Date = oup.Date
+ cod.Poc.Source = oup.Source
+ cod.Poc.Path = oup.Path
+ cod.Poc.Desc = oup.Desc
+ cod.Poc.Dbindex = oup.Dbindex
+ }
+ var oue models.OriginUpstreamEvent
+ oueErr := models.GetOriginEvent(ou.CveId, &oue)
+ if oueErr == nil && oue.EventId > 0 {
+ cod.Event.Date = oue.Date
+ cod.Event.Url = oue.Url
+ cod.Event.Description = oue.Description
+ cod.Event.Title = oue.Title
+ }
+ var our []models.OriginUpstreamReference
+ ourNum, ourErr := models.GetOriginReference(ou.CveId, &our)
+ if ourErr == nil && ourNum > 0 {
+ for _, reference := range our {
+ var crd common.CveReferenceData
+ crd.Url = reference.Url
+ crd.Name = reference.Name
+ crd.Tags = append(crd.Tags, reference.Tags)
+ crd.Refsource = reference.Refsource
+ cod.ReferenceData = append(cod.ReferenceData, crd)
+ }
+ }
+ var ouv models.OriginUpstreamVulType
+ ouvErr := models.GetOriginVulType(ou.CveId, &ouv)
+ if ouvErr == nil && ouv.VulId > 0 {
+ cod.VulType.Cwe = ouv.Cwe
+ cod.VulType.En = ouv.EnDesc
+ cod.VulType.Zh = ouv.ZhDesc
+ }
+ var ouf models.OriginUpstreamFixSuggest
+ oufErr := models.GetOriginFixSuggest(ou.CveId, &ouf)
+ if oufErr == nil && ouf.FixId > 0 {
+ var oufr []models.OriginUpstreamFixSuggestRef
+ oufrNum, oufErr := models.GetOriginFixSuggestRef(ouf.FixId, &oufr)
+ if oufErr == nil && oufrNum > 0 {
+ for _, ref := range oufr {
+ var fr common.FixReferences
+ fr.Refsource = ref.Refsource
+ fr.Name = ref.Name
+ fr.Url = ref.Url
+ var oufrt []models.OriginUpstreamFixSuggestRefTag
+ oufrtNum, oufrtErr := models.GetOriginFixSuggestRefTag(ref.FixRefId, &oufrt)
+ if oufrtErr == nil && oufrtNum > 0 {
+ for _, tag := range oufrt {
+ fr.Tags = append(fr.Tags, tag.Name)
+ }
+ }
+ cod.FixSuggest.References = append(cod.FixSuggest.References, fr)
+ }
+ }
+ cod.FixSuggest.Detail = ouf.Detail
+ }
+ resp["errno"]=errcode.RecodeOk
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
+ resp["body"] = cod
+ return
+ } else {
+ resp["errno"]=errcode.RecodeNodata
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
+ return
+ }
+
+}
diff --git a/controllers/upload.go b/controllers/upload.go
index a54f1ad..54c1e4a 100644
--- a/controllers/upload.go
+++ b/controllers/upload.go
@@ -24,6 +24,96 @@ func (c *UserUploadController) RetData(resp map[string]interface{}) {
c.ServeJSON()
}
+func (c *CveErrorFeedBackController) RetData(resp map[string]interface{}) {
+ c.Data["json"] =resp
+ c.ServeJSON()
+}
+
+type CveErrorFeedBackController struct {
+ beego.Controller
+}
+
+type CveErrorData struct {
+ CveNum string `json:"cveNum"`
+ ErrorDesc string `json:"errorDesc"`
+ CveUploadTime string `json:"cveUploadTime"`
+}
+
+// @Title Get cveerrorfeedback
+// @Description get cveerrorfeedback
+// @Param startDate endDate string false
+// @Success 200 {object} models.uploadcve
+// @Failure 403 :endDate is err
+// @router / [get]
+func (u *CveErrorFeedBackController) Get() {
+ req := u.Ctx.Request
+ addr := req.RemoteAddr
+ logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
+ resp := make(map[string]interface{})
+ var ced []CveErrorData
+ resp["errno"]=errcode.RecodeUnknowErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
+ resp["body"] = []CveErrorData{}
+ defer u.RetData(resp)
+ var iw models.IpWhite
+ if addr != "" {
+ addrIp := strings.Split(addr, ":")
+ err := models.GetIpWhite(addrIp[0], &iw)
+ if err != nil {
+ resp["errno"]=errcode.RecodeIpErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ return
+ }
+ } else {
+ resp["errno"]=errcode.RecodeIpErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ return
+ }
+ token := u.GetString("token")
+ if token == "" {
+ resp["errno"]=errcode.RecodeSessionErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
+ return
+ } else {
+ ok := models.CheckToken(token)
+ if !ok {
+ resp["errno"]=errcode.RecodeRoleErr
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeRoleErr)
+ return
+ }
+ }
+
+ startDate := u.GetString("startDate")
+ if startDate != "" {
+ logs.Info("查询: ", startDate, " 开始日期")
+ }
+
+ endDate := u.GetString("endDate")
+ if endDate != "" {
+ logs.Info("查询: ", endDate, " 结束日期")
+ } else {
+ endDate = common.GetCurTime()
+ }
+
+ it, ok := models.QueryCveErrorInfo(6, startDate, endDate)
+ if ok {
+ for _, cveErr := range it {
+ var ved CveErrorData
+ ved.CveNum = cveErr.CveNum
+ ved.CveUploadTime = cveErr.CreateTime.String()[:19]
+ ved.ErrorDesc = cveErr.ErrorDescription
+ ced = append(ced, ved)
+ }
+ resp["body"] = ced
+ resp["errno"]=errcode.RecodeOk
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
+ } else {
+ resp["errno"]=errcode.RecodeNodata
+ resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
+ return
+ }
+}
+
// @Title UserUpload
// @Description UserUpload
// @Param body body models.OriginUpstream true "body for user content"
diff --git a/doc/sql/db_struct.sql b/doc/sql/db_struct.sql
index dae8400..e9ad2eb 100644
--- a/doc/sql/db_struct.sql
+++ b/doc/sql/db_struct.sql
@@ -38,7 +38,7 @@ CREATE TABLE `cve_export_record` (
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `file_name` (`file_name`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_open_euler` */
@@ -71,7 +71,7 @@ CREATE TABLE `cve_git_open_euler` (
KEY `cve_git_open_euler_package_id` (`package_id`),
KEY `cve_git_open_euler_version` (`version`),
KEY `cve_git_open_euler_table_id` (`table_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=8159 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=10413 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_open_euler_table_relate` */
@@ -85,7 +85,7 @@ CREATE TABLE `cve_git_open_euler_table_relate` (
PRIMARY KEY (`relate_id`),
UNIQUE KEY `cve_git_open_euler_table_gitid_tab_un` (`git_id`,`table_name`),
KEY `cve_git_open_euler_table_relate_git_id` (`git_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=4570 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=4748 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_package_info` */
@@ -116,7 +116,7 @@ CREATE TABLE `cve_git_package_info` (
KEY `cve_git_package_info_git_id` (`git_id`),
KEY `cve_git_package_info_git_ids` (`git_ids`),
KEY `cve_git_package_info_version` (`version`)
-) ENGINE=InnoDB AUTO_INCREMENT=979 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=1244 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_package_table` */
@@ -138,7 +138,7 @@ CREATE TABLE `cve_git_repo_groups` (
`group_name` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`group_id`),
KEY `cve_git_repo_groups_group_name` (`group_name`)
-) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=144 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_sub_pack` */
@@ -152,7 +152,7 @@ CREATE TABLE `cve_git_sub_pack` (
PRIMARY KEY (`sub_id`),
KEY `cve_git_sub_pack_detail_id` (`detail_id`),
KEY `cve_git_sub_pack_ids` (`ids`)
-) ENGINE=InnoDB AUTO_INCREMENT=2438 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=3408 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_sub_pack_provides` */
@@ -167,7 +167,7 @@ CREATE TABLE `cve_git_sub_pack_provides` (
PRIMARY KEY (`provide_id`),
KEY `cve_git_sub_pack_provides_sub_id` (`sub_id`),
KEY `cve_git_sub_pack_provides_ids` (`ids`)
-) ENGINE=InnoDB AUTO_INCREMENT=10556 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=18830 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_sub_pack_require` */
@@ -182,7 +182,7 @@ CREATE TABLE `cve_git_sub_pack_require` (
PRIMARY KEY (`require_id`),
KEY `cve_git_sub_pack_require_sub_id` (`sub_id`),
KEY `cve_git_sub_pack_require_ids` (`ids`)
-) ENGINE=InnoDB AUTO_INCREMENT=13525 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=19139 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_sub_pack_requiredby` */
@@ -194,7 +194,7 @@ CREATE TABLE `cve_git_sub_pack_requiredby` (
`requiredb` varchar(256) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `cve_git_sub_pack_requiredby_provide_id` (`provide_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=2214 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=3428 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_gite_origin_issue` */
@@ -226,7 +226,7 @@ CREATE TABLE `cve_gite_origin_issue` (
PRIMARY KEY (`id`),
UNIQUE KEY `issue_id` (`issue_id`),
UNIQUE KEY `number` (`number`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=691 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_gite_repo` */
@@ -247,7 +247,7 @@ CREATE TABLE `cve_gite_repo` (
`delete_time` varchar(255) DEFAULT NULL,
PRIMARY KEY (`repo_id`),
KEY `cve_gite_repo_group_id` (`group_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=7072 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=7096 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_gite_repo_branch` */
@@ -278,7 +278,7 @@ CREATE TABLE `cve_gite_repo_member` (
PRIMARY KEY (`repo_id`),
KEY `cve_gite_repo_member_group_id` (`group_id`),
CONSTRAINT `member_groups_group_id` FOREIGN KEY (`group_id`) REFERENCES `cve_git_repo_groups` (`group_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=437 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=443 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_ip_white` */
@@ -319,7 +319,7 @@ CREATE TABLE `cve_issue_hooks` (
UNIQUE KEY `cve_issue_hooks_owner_repo_status_un` (`owner`,`repo`,`hook_url`,`status`),
KEY `cve_issue_hooks_Cve_id` (`cve_id`),
KEY `cve_issue_hooks_issue_num` (`issue_num`)
-) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=110 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_issue_template` */
@@ -360,11 +360,12 @@ CREATE TABLE `cve_issue_template` (
`create_time` datetime NOT NULL,
`update_time` datetime NOT NULL,
`delete_time` datetime NOT NULL,
+ `error_description` text CHARACTER SET utf8 COLLATE utf8_general_ci,
PRIMARY KEY (`template_id`),
UNIQUE KEY `cve_issue_template_cvn_issnu` (`cve_num`,`issue_num`),
KEY `cve_issue_template_cve_id` (`cve_id`),
KEY `cve_issue_template_issue_num` (`issue_num`)
-) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=482 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_open_euler_s_a` */
@@ -378,7 +379,7 @@ CREATE TABLE `cve_open_euler_s_a` (
PRIMARY KEY (`openeuler_id`),
UNIQUE KEY `openeuler_sa_num` (`openeuler_sa_num`),
KEY `cve_open_euler_s_a_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=543 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_excel` */
@@ -446,7 +447,7 @@ CREATE TABLE `cve_origin_upstream` (
KEY `cve_origin_upstream_cve_packname` (`cve_packname`),
KEY `cve_origin_upstream_git_packname` (`git_packname`),
KEY `cve_origin_upstream_version` (`version`)
-) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_config` */
@@ -458,7 +459,7 @@ CREATE TABLE `cve_origin_upstream_config` (
`nodes` varchar(32) DEFAULT NULL,
PRIMARY KEY (`conf_id`),
KEY `cve_origin_upstream_config_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_config_node` */
@@ -470,7 +471,7 @@ CREATE TABLE `cve_origin_upstream_config_node` (
`operator` varchar(256) DEFAULT NULL,
PRIMARY KEY (`node_id`),
KEY `cve_origin_upstream_config_node_conf_id` (`conf_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=69 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_config_node_cpe` */
@@ -484,7 +485,7 @@ CREATE TABLE `cve_origin_upstream_config_node_cpe` (
`vulner_able` varchar(64) DEFAULT NULL,
PRIMARY KEY (`cpe_id`),
KEY `cve_origin_upstream_config_node_cpe_node_id` (`node_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=2601 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=2633 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_desc` */
@@ -497,7 +498,7 @@ CREATE TABLE `cve_origin_upstream_desc` (
`zh_desc` text CHARACTER SET utf8 COLLATE utf8_general_ci,
PRIMARY KEY (`desc_id`),
KEY `cve_origin_upstream_desc_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_event` */
@@ -512,7 +513,7 @@ CREATE TABLE `cve_origin_upstream_event` (
`description` text CHARACTER SET utf8 COLLATE utf8_general_ci,
PRIMARY KEY (`event_id`),
KEY `cve_origin_upstream_event_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_fix_suggest` */
@@ -524,7 +525,7 @@ CREATE TABLE `cve_origin_upstream_fix_suggest` (
`detail` varchar(1024) DEFAULT NULL,
PRIMARY KEY (`fix_id`),
KEY `cve_origin_upstream_fix_suggest_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_fix_suggest_ref` */
@@ -538,7 +539,7 @@ CREATE TABLE `cve_origin_upstream_fix_suggest_ref` (
`name` varchar(1024) DEFAULT NULL,
PRIMARY KEY (`fix_ref_id`),
KEY `cve_origin_upstream_fix_suggest_ref_fix_id` (`fix_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_fix_suggest_ref_tag` */
@@ -550,7 +551,7 @@ CREATE TABLE `cve_origin_upstream_fix_suggest_ref_tag` (
`name` varchar(512) DEFAULT NULL,
PRIMARY KEY (`tag_id`),
KEY `cve_origin_upstream_fix_suggest_ref_tag_fix_ref_id` (`fix_ref_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=130 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_impact` */
@@ -562,7 +563,7 @@ CREATE TABLE `cve_origin_upstream_impact` (
`impact` varchar(32) DEFAULT NULL,
PRIMARY KEY (`impact_id`),
KEY `cve_origin_upstream_impact_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_impact_score` */
@@ -578,7 +579,7 @@ CREATE TABLE `cve_origin_upstream_impact_score` (
`score_status` tinyint DEFAULT '1',
PRIMARY KEY (`score_id`),
KEY `cve_origin_upstream_impact_score_impact_id` (`impact_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=161 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_impact_score_v2` */
@@ -607,7 +608,7 @@ CREATE TABLE `cve_origin_upstream_impact_score_v2` (
`cve_level` varchar(32) DEFAULT NULL,
PRIMARY KEY (`v2_id`),
KEY `cve_origin_upstream_impact_score_v2_score_id` (`score_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_impact_score_v3` */
@@ -633,7 +634,7 @@ CREATE TABLE `cve_origin_upstream_impact_score_v3` (
`cve_level` varchar(32) DEFAULT NULL,
PRIMARY KEY (`v3_id`),
KEY `cve_origin_upstream_impact_score_v3_score_id` (`score_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_poc` */
@@ -650,7 +651,7 @@ CREATE TABLE `cve_origin_upstream_poc` (
`desc` text CHARACTER SET utf8 COLLATE utf8_general_ci,
PRIMARY KEY (`poc_id`),
KEY `cve_origin_upstream_poc_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_reference` */
@@ -665,7 +666,7 @@ CREATE TABLE `cve_origin_upstream_reference` (
`tags` text CHARACTER SET utf8 COLLATE utf8_general_ci,
PRIMARY KEY (`ref_id`),
KEY `cve_origin_upstream_reference_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1089 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=1377 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_origin_upstream_vul_type` */
@@ -679,7 +680,7 @@ CREATE TABLE `cve_origin_upstream_vul_type` (
`zh_desc` text CHARACTER SET utf8 COLLATE utf8_general_ci,
PRIMARY KEY (`vul_id`),
KEY `cve_origin_upstream_vul_type_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_other_user` */
@@ -754,7 +755,7 @@ CREATE TABLE `cve_score` (
PRIMARY KEY (`id`),
UNIQUE KEY `openeuler_id` (`openeuler_id`),
KEY `cve_score_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=543 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_score_record` */
@@ -769,7 +770,7 @@ CREATE TABLE `cve_score_record` (
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `cve_score_record_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=543 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_security_notice` */
@@ -795,7 +796,7 @@ CREATE TABLE `cve_security_notice` (
PRIMARY KEY (`sec_id`),
UNIQUE KEY `openeuler_id` (`openeuler_id`),
KEY `cve_security_notice_cve_id` (`cve_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=543 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_security_reviewer` */
@@ -826,10 +827,12 @@ CREATE TABLE `cve_vuln_center` (
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime NOT NULL,
`is_export` tinyint NOT NULL DEFAULT '0',
+ `data_source` tinyint NOT NULL DEFAULT '1',
+ `cve_detail_url` varchar(1024) NOT NULL DEFAULT '',
PRIMARY KEY (`cve_id`),
UNIQUE KEY `cve_vuln_c_n_pk_v_un` (`cve_num`,`cve_version`,`pack_name`),
KEY `cve_vuln_center_cve_num` (`cve_num`)
-) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=600 DEFAULT CHARSET=utf8;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
diff --git a/models/cve.go b/models/cve.go
index e456ebb..1919d0d 100644
--- a/models/cve.go
+++ b/models/cve.go
@@ -76,7 +76,7 @@ func QueryCveImpact(cveId int64) (OriginUpstreamImpact, bool) {
var cveImpact OriginUpstreamImpact
err := o.Raw("select * from cve_origin_upstream_impact where cve_id = ?", cveId).QueryRow(&cveImpact)
if err != nil {
- logs.Error(cveId, "cve_origin_upstream_impact cve impact查询不到")
+ logs.Error(cveId, "cve_origin_upstream_impact cve impact 查询不到")
return cveImpact, false
} else {
return cveImpact, true
@@ -90,7 +90,7 @@ func QueryCveScore(impactId int64, typex string) (OriginUpstreamImpactScore, boo
err := o.Raw("select * from cve_origin_upstream_impact_score where "+
"impact_id = ? and base_met_v3=? and cvss_v3=?", impactId, 1, 1).QueryRow(&cveScore)
if err != nil {
- logs.Error(impactId, "cve_origin_upstream_impact_score cve score查询不到")
+ logs.Error(impactId, "cve_origin_upstream_impact_score cve score 查询不到")
return cveScore, false
} else {
return cveScore, true
@@ -99,7 +99,7 @@ func QueryCveScore(impactId int64, typex string) (OriginUpstreamImpactScore, boo
err := o.Raw("select * from cve_origin_upstream_impact_score where "+
"impact_id = ? and base_met_v2=? and cvss_v2=?", impactId, 1, 1).QueryRow(&cveScore)
if err != nil {
- logs.Error(impactId, "cve_origin_upstream_impact_score cve score查询不到")
+ logs.Error(impactId, "cve_origin_upstream_impact_score cve score 查询不到")
return cveScore, false
} else {
return cveScore, true
diff --git a/models/cvedetail.go b/models/cvedetail.go
new file mode 100644
index 0000000..d9535e6
--- /dev/null
+++ b/models/cvedetail.go
@@ -0,0 +1,150 @@
+package models
+
+import (
+ "github.com/astaxie/beego/logs"
+ "github.com/astaxie/beego/orm"
+)
+
+func GetOriginUpstream(cveNum string, ou *OriginUpstream) (err error) {
+ o := orm.NewOrm()
+ err = o.Raw("select * FROM cve_origin_upstream WHERE cve_num=? order by cve_id desc limit 1", cveNum).QueryRow(ou)
+ if err == nil {
+ logs.Info("cve_origin_upstream cveNum: ", cveNum, " 查询成功")
+ return nil
+ } else {
+ logs.Error("cve_origin_upstream cveNum: ", cveNum, " 不存在")
+ }
+ return err
+}
+
+func GetOriginDesc(cveId int64, oud *OriginUpstreamDesc) (err error) {
+ o := orm.NewOrm()
+ err = o.Raw("select * FROM cve_origin_upstream_desc WHERE cve_id=?", cveId).QueryRow(oud)
+ if err == nil {
+ logs.Info("cve_origin_upstream_desc cve_id: ", cveId, " 查询成功")
+ return nil
+ } else {
+ logs.Error("cve_origin_upstream_desc cve_id: ", cveId, " 不存在")
+ }
+ return err
+}
+
+func GetOriginConfig(cveId int64, ouc *OriginUpstreamConfig) (err error) {
+ o := orm.NewOrm()
+ err = o.Raw("select * FROM cve_origin_upstream_config WHERE cve_id=?", cveId).QueryRow(ouc)
+ if err == nil {
+ logs.Info("cve_origin_upstream_config cve_id: ", cveId, " 查询成功")
+ return nil
+ } else {
+ logs.Error("cve_origin_upstream_config cve_id: ", cveId, " 不存在")
+ }
+ return err
+}
+
+func GetOriginConfigNode(configId int64, oucn *[]OriginUpstreamConfigNode) (num int64, err error) {
+ o := orm.NewOrm()
+ num, err = o.Raw("select * FROM cve_origin_upstream_config_node WHERE conf_id=?", configId).QueryRows(oucn)
+ if num > 0 && err == nil {
+ logs.Info("cve_origin_upstream_config_node configId: ", configId, " 查询成功")
+ return num, nil
+ } else {
+ logs.Error("cve_origin_upstream_config_node configId: ", configId, " 不存在")
+ }
+ return 0, err
+}
+
+func GetOriginConfigNodeCpe(nodeId int64, oucnc *[]OriginUpstreamConfigNodeCpe) (num int64, err error) {
+ o := orm.NewOrm()
+ num, err = o.Raw("select * FROM cve_origin_upstream_config_node_cpe WHERE node_id=?", nodeId).QueryRows(oucnc)
+ if num > 0 && err == nil {
+ logs.Info("cve_origin_upstream_config_node_cpe configId: ", nodeId, " 查询成功")
+ return num, nil
+ } else {
+ logs.Error("cve_origin_upstream_config_node_cpe configId: ", nodeId, " 不存在")
+ }
+ return 0, err
+}
+
+func GetOriginPoc(cveId int64, oup *OriginUpstreamPoc) (err error) {
+ o := orm.NewOrm()
+ err = o.Raw("select * FROM cve_origin_upstream_poc WHERE cve_id=?", cveId).QueryRow(oup)
+ if err == nil {
+ logs.Info("cve_origin_upstream_poc cve_id: ", cveId, " 查询成功")
+ return nil
+ } else {
+ logs.Error("cve_origin_upstream_poc cve_id: ", cveId, " 不存在")
+ }
+ return err
+}
+
+func GetOriginEvent(cveId int64, oue *OriginUpstreamEvent) (err error) {
+ o := orm.NewOrm()
+ err = o.Raw("select * FROM cve_origin_upstream_event WHERE cve_id=?", cveId).QueryRow(oue)
+ if err == nil {
+ logs.Info("cve_origin_upstream_event cve_id: ", cveId, " 查询成功")
+ return nil
+ } else {
+ logs.Error("cve_origin_upstream_event cve_id: ", cveId, " 不存在")
+ }
+ return err
+}
+
+func GetOriginReference(cveId int64, our *[]OriginUpstreamReference) (num int64, err error) {
+ o := orm.NewOrm()
+ num, err = o.Raw("select * FROM cve_origin_upstream_reference WHERE cve_id=?", cveId).QueryRows(our)
+ if num > 0 && err == nil {
+ logs.Info("cve_origin_upstream_reference cve_id: ", cveId, " 查询成功")
+ return num, nil
+ } else {
+ logs.Error("cve_origin_upstream_reference cve_id: ", cveId, " 不存在")
+ }
+ return 0, err
+}
+
+func GetOriginVulType(cveId int64, ouv *OriginUpstreamVulType) (err error) {
+ o := orm.NewOrm()
+ err = o.Raw("select * FROM cve_origin_upstream_vul_type WHERE cve_id=?", cveId).QueryRow(ouv)
+ if err == nil {
+ logs.Info("cve_origin_upstream_vul_type cve_id: ", cveId, " 查询成功")
+ return nil
+ } else {
+ logs.Error("cve_origin_upstream_vul_type cve_id: ", cveId, " 不存在")
+ }
+ return err
+}
+
+func GetOriginFixSuggest(cveId int64, ouf *OriginUpstreamFixSuggest) (err error) {
+ o := orm.NewOrm()
+ err = o.Raw("select * FROM cve_origin_upstream_fix_suggest WHERE cve_id=?", cveId).QueryRow(ouf)
+ if err == nil {
+ logs.Info("cve_origin_upstream_fix_suggest cve_id: ", cveId, " 查询成功")
+ return nil
+ } else {
+ logs.Error("cve_origin_upstream_fix_suggest cve_id: ", cveId, " 不存在")
+ }
+ return err
+}
+
+func GetOriginFixSuggestRef(fixId int64, oufr *[]OriginUpstreamFixSuggestRef) (num int64, err error) {
+ o := orm.NewOrm()
+ num, err = o.Raw("select * FROM cve_origin_upstream_fix_suggest_ref WHERE fix_id=?", fixId).QueryRows(oufr)
+ if num > 0 && err == nil {
+ logs.Info("cve_origin_upstream_fix_suggest_ref fix_id: ", fixId, " 查询成功")
+ return num, nil
+ } else {
+ logs.Error("cve_origin_upstream_fix_suggest_ref fix_id: ", fixId, " 不存在")
+ }
+ return 0, err
+}
+
+func GetOriginFixSuggestRefTag(fixRefId int64, oufrt *[]OriginUpstreamFixSuggestRefTag) (num int64, err error) {
+ o := orm.NewOrm()
+ num, err = o.Raw("select * FROM cve_origin_upstream_fix_suggest_ref_tag WHERE fix_ref_id=?", fixRefId).QueryRows(oufrt)
+ if num > 0 && err == nil {
+ logs.Info("cve_origin_upstream_fix_suggest_ref_tag fix_ref_id: ", fixRefId, " 查询成功")
+ return num, nil
+ } else {
+ logs.Error("cve_origin_upstream_fix_suggest_ref_tag fix_ref_id: ", fixRefId, " 不存在")
+ }
+ return 0, err
+}
\ No newline at end of file
diff --git a/models/issue.go b/models/issue.go
index 5293a96..3e9a4eb 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -30,7 +30,8 @@ func QueryIssueCveByNum(cvenum, repoPath string) (GiteOriginIssue, bool) {
func QueryIssue(days string, prcnum int) ([]VulnCenter, error) {
o := orm.NewOrm()
var vc []VulnCenter
- num, err := o.Raw("select cve_id,cve_num,cve_desc,cve_version,repair_time,pack_name,cve_url,cve_level"+
+ num, err := o.Raw("select cve_id,cve_num,cve_desc,cve_version,repair_time," +
+ "pack_name,cve_url,cve_level,data_source,update_time,is_export,cve_detail_url"+
" from cve_vuln_center where update_time >= ? and cve_status in (?, ?) "+
"order by cve_id asc limit ?", days, 0, 1, prcnum).QueryRows(&vc)
if err == nil && num > 0 {
diff --git a/models/modeldb.go b/models/modeldb.go
index 0b37dce..685f8ad 100644
--- a/models/modeldb.go
+++ b/models/modeldb.go
@@ -34,19 +34,21 @@ type AdminUser struct {
}
type VulnCenter struct {
- CveId int64 `orm:"pk;auto;column(cve_id)"`
- CveNum string `orm:"size(256);column(cve_num);index" description:"cve编号"`
- Description string `orm:"size(8192);column(cve_desc)" description:"cve描述"`
- CveLevel string `orm:"size(32);column(cve_level)" description:"致命(Critical);严重(High);中等(Medium);一般(Low);其他"`
- Status int8 `orm:"default(0);column(cve_status)" description:"0:cve新增;1:数据已变化;2:已创建issue"`
- CveVersion string `orm:"size(128);column(cve_version)" description:"cve归属版本"`
- RepairTime string `orm:"size(32);column(repair_time)" description:"cve修复时间"`
- PackName string `orm:"size(512);column(pack_name)" description:"cve对应得包名称"`
- CveUrl string `orm:"size(2048);column(cve_url)" description:"cve下载链接"`
- IsExport int8 `orm:"default(0);column(is_export)" description:"0:数据初始化;1:数据已同步到官网;2:数据不需要同步到官网;3:issue已关闭需要同步到官网"`
- CreateTime time.Time `orm:"auto_now_add;type(datetime);column(create_time)"`
- UpdateTime time.Time `orm:"auto_now;type(datetime);column(update_time)"`
- DeleteTime time.Time `orm:"auto_now;type(datetime);column(delete_time)"`
+ CveId int64 `orm:"pk;auto;column(cve_id)"`
+ CveNum string `orm:"size(256);column(cve_num);index" description:"cve编号"`
+ Description string `orm:"size(8192);column(cve_desc)" description:"cve描述"`
+ CveLevel string `orm:"size(32);column(cve_level)" description:"致命(Critical);严重(High);中等(Medium);一般(Low);其他"`
+ Status int8 `orm:"default(0);column(cve_status)" description:"0:cve新增;1:数据已变化;2:已创建issue"`
+ CveVersion string `orm:"size(128);column(cve_version)" description:"cve归属版本"`
+ RepairTime string `orm:"size(32);column(repair_time)" description:"cve修复时间"`
+ PackName string `orm:"size(512);column(pack_name)" description:"cve对应得包名称"`
+ CveUrl string `orm:"size(2048);column(cve_url)" description:"cve下载链接"`
+ IsExport int8 `orm:"default(0);column(is_export)" description:"0:数据初始化;1:数据已同步到官网;2:数据不需要同步到官网;3:issue已关闭需要同步到官网"`
+ DataSource int8 `orm:"default(1);column(data_source)" description:"1:软件所提供;2:网络爬取;3:人工处理; 4:兼容之前的数据"`
+ CveDetailUrl string `orm:"size(1024);column(cve_detail_url)" description:"cve详情链接"`
+ CreateTime time.Time `orm:"auto_now_add;type(datetime);column(create_time)"`
+ UpdateTime time.Time `orm:"auto_now;type(datetime);column(update_time)"`
+ DeleteTime time.Time `orm:"auto_now;type(datetime);column(delete_time)"`
}
type OpenEulerSA struct {
@@ -161,7 +163,8 @@ type IssueTemplate struct {
Program string `orm:"size(64);column(program);null" description:"项目编号"`
SecurityHole int8 `orm:"default(0);column(security_hole)" description:"是否是私有issue"`
CveLevel string `orm:"size(32);column(cve_level)" description:"致命(Critical);严重(High);中等(Medium);一般(Low);其他"`
- CommentId int64 `orm:"column(comment_id), null" description:"首条评论id"`
+ CommentId int64 `orm:"column(comment_id);null" description:"首条评论id"`
+ ErrorDescription string `orm:"size(64);column(error_description);null" description:"cve错误信息,cve与当前仓库错误信息保存"`
CreateTime time.Time `orm:"auto_now_add;type(datetime);column(create_time)"`
UpdateTime time.Time `orm:"auto_now;type(datetime);column(update_time)"`
DeleteTime time.Time `orm:"auto_now;type(datetime);column(delete_time)"`
@@ -440,6 +443,12 @@ type OriginUpstreamFixSuggestRef struct {
Name string `orm:"size(1024);column(name);null" description:"名称"`
}
+type OriginUpstreamFixSuggestRefTag struct {
+ TagId int64 `orm:"pk;auto;column(tag_id)"`
+ FixRefId int64 `orm:"index;column(fix_ref_id)" description:"OriginUpstreamFixSuggestRef 外键"`
+ Name string `orm:"size(512);column(name);null" description:"名称"`
+}
+
//GiteOriginIssue 码云上已经存在的issue
type GiteOriginIssue struct {
Id int64 `orm:"pk;auto"`
@@ -466,12 +475,6 @@ type GiteOriginIssue struct {
RepoDesc string `json:"repo_desc" orm:"null;size(2048)" description:"cve 对组件的描述"`
}
-type OriginUpstreamFixSuggestRefTag struct {
- TagId int64 `orm:"pk;auto;column(tag_id)"`
- FixRefId int64 `orm:"index;column(fix_ref_id)" description:"OriginUpstreamFixSuggestRef 外键"`
- Name string `orm:"size(512);column(name);null" description:"名称"`
-}
-
type OriginExcel struct {
CveId int64 `orm:"pk;auto;column(cve_id)"`
CveNum string `orm:"size(256);column(cve_num)" description:"cve编号"`
diff --git a/models/uploadcve.go b/models/uploadcve.go
index 56b0d1f..54e8d77 100644
--- a/models/uploadcve.go
+++ b/models/uploadcve.go
@@ -813,3 +813,24 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
return 0, nil
}
+func QueryCveErrorInfo(issueStatus int8, startDate, endDate string)([]IssueTemplate, bool){
+ o := orm.NewOrm()
+ var it []IssueTemplate
+ var num int64
+ var err error
+ if startDate != "" {
+ num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template " +
+ "where issue_status = ? and create_time >= ? and create_time <= ?", issueStatus, startDate, endDate).QueryRows(&it)
+ } else {
+ num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template " +
+ "where issue_status = ? and create_time <= ?", issueStatus, endDate).QueryRows(&it)
+ }
+
+ if err != nil || num == 0{
+ logs.Info(issueStatus, startDate, endDate, ", cve_issue_template 无对应数据")
+ return it,false
+ } else {
+ logs.Info(issueStatus, startDate, endDate, ", cve_issue_template 查询成功")
+ return it,true
+ }
+}
\ No newline at end of file
diff --git a/routers/router.go b/routers/router.go
index 1ae0b43..16f1996 100644
--- a/routers/router.go
+++ b/routers/router.go
@@ -58,6 +58,16 @@ func init() {
&controllers.FileController{},
),
),
+ beego.NSNamespace("/cve/detail",
+ beego.NSInclude(
+ &controllers.CveDetailController{},
+ ),
+ ),
+ beego.NSNamespace("/cve/error/feedback",
+ beego.NSInclude(
+ &controllers.CveErrorFeedBackController{},
+ ),
+ ),
)
beego.AddNamespace(ns)
}
diff --git a/task/inittask.go b/task/inittask.go
index 453838a..bffe416 100644
--- a/task/inittask.go
+++ b/task/inittask.go
@@ -126,6 +126,23 @@ func GenSAExcelTask(genExcel string, ch *chan bool) {
//defer toolbox.StopTask()
}
+//打印日志到控制台上,同时删除多余日志
+func PrintLogTask(printLog string, ch *chan bool) {
+ logs.Info("创建日志任务 task start")
+ printLogTask := toolbox.NewTask("ProcLogData", printLog, ProcLogData)
+ err := printLogTask.Run()
+ if err != nil {
+ logs.Error("创建日志任务失败 ,err:", err)
+ return
+ }
+ toolbox.AddTask("ProcLogData", printLogTask)
+ toolbox.StartTask()
+ //time.Sleep(time.Minute * 1)
+ logs.Info("创建日志任务 task end")
+ *ch <- true
+ //defer toolbox.StopTask()
+}
+
//InitTask 定时任务初始化
func InitTask() {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
@@ -184,6 +201,15 @@ func InitTask() {
<-cvech
close(cvech)
}
+ // 定时输出日志到控制台上
+ printLogFlag, errxs := BConfig.Int("crontab::printlogflag")
+ if printLogFlag == 1 && errxs == nil {
+ printLog := BConfig.String("crontab::printlog")
+ var logch = make(chan bool)
+ go PrintLogTask(printLog, &logch)
+ <-logch
+ close(logch)
+ }
// 添加issue
taskFlag, errx := BConfig.Int("crontab::issueflag")
if taskFlag == 1 && errx == nil {
diff --git a/task/printlog.go b/task/printlog.go
new file mode 100644
index 0000000..5c505c2
--- /dev/null
+++ b/task/printlog.go
@@ -0,0 +1,50 @@
+package task
+
+import (
+ "errors"
+ "fmt"
+ "github.com/astaxie/beego/config"
+ "github.com/astaxie/beego/logs"
+ "io/ioutil"
+ "os"
+)
+
+func DeletLogs() error{
+ BConfig, err := config.NewConfig("ini", "conf/app.conf")
+ if err != nil{
+ logs.Error("config init error:", err)
+ return err
+ }
+ logDir := BConfig.String("log::log_dir")
+ if logDir == ""{
+ logs.Error("config excel::log_dir error: invalid value is ", logDir)
+ return errors.New("value is nil")
+ }
+ fileInfoList, err := ioutil.ReadDir(logDir)
+ if err != nil {
+ logs.Error(err)
+ return err
+ }
+ fmt.Println(len(fileInfoList))
+ for i := range fileInfoList {
+ if fileInfoList[i].Name() != "cve.log" {
+ err := os.Remove(logDir + "/" + fileInfoList[i].Name())
+ if err != nil {
+ logs.Error("删除文件失败: ", fileInfoList[i].Name())
+ }
+ }
+ }
+ return nil
+}
+//ProcCveOriginData 处理api获取的原始数据
+func ProcLogData() error{
+ // delete logs
+ err := DeletLogs()
+ if err != nil {
+ logs.Error(err)
+ }
+
+ // 打印日志
+ return err
+}
+
diff --git a/taskhandler/common.go b/taskhandler/common.go
index aba4b09..ea467ab 100644
--- a/taskhandler/common.go
+++ b/taskhandler/common.go
@@ -4,6 +4,8 @@ import (
"cvevulner/common"
"cvevulner/models"
"fmt"
+ "github.com/astaxie/beego/config"
+ "github.com/astaxie/beego/logs"
"reflect"
"strconv"
"strings"
@@ -24,9 +26,15 @@ const bodyTpl = `一、漏洞信息
漏洞归属的版本:%v
CVSS V%v分值:
BaseScore:%v
- Vector:CVSS: %v
+ Vector:CVSS:%v
漏洞简述:
%v
+ 漏洞公开时间:%v
+ 漏洞信息修改时间:%v
+ 漏洞详情参考链接:
+ %v
+ 漏洞分析指导链接:
+ %v
二、漏洞分析结构反馈
影响性分析说明:
%v
@@ -42,9 +50,15 @@ const bodyUpTpl = `一、漏洞信息
漏洞归属的版本:%v
CVSS V%v分值:
BaseScore:%v
- Vector:CVSS: %v
+ Vector:CVSS:%v
漏洞简述:
%v
+ 漏洞公开时间:%v
+ 漏洞信息修改时间:%v
+ 漏洞详情参考链接:
+ %v
+ 漏洞分析指导链接:
+ %v
二、漏洞分析结构反馈
影响性分析说明:
%v
@@ -295,6 +309,12 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
} else {
scoreType = "3.0"
}
+ BConfig, err := config.NewConfig("ini", "conf/app.conf")
+ if err != nil {
+ logs.Error("config init error:", err)
+ return ""
+ }
+ commentCmd := BConfig.String("reflink::comment_cmd")
floatOpenEulerScore, err := strconv.ParseFloat(openEulerScore, 64)
if err != nil {
floatOpenEulerScore = 0.0
@@ -304,6 +324,10 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
cveAnalysis = strings.Replace(its.CveAnalysis, "\n", "", -1)
//cveAnalysis = strings.Replace(cveAnalysis, "\n", "", 0)
}
+ updateTime := cve.UpdateTime.String()
+ if updateTime != "" && len(updateTime) > 19 {
+ updateTime = updateTime[:19]
+ }
StatusName := ""
if its.StatusName != "" && len(its.StatusName) > 1 {
if its.StatusName == "待办的" {
@@ -335,7 +359,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
nveVector := scoreType + "/" + sc.NvectorVule
oVector := scoreType + "/" + its.OpenEulerVector
body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
- cve.Description, cveAnalysis, openEulerScore, oVector, affectedVersion)
+ cve.Description, cve.RepairTime, updateTime, cve.CveDetailUrl, commentCmd,
+ cveAnalysis, openEulerScore, oVector, affectedVersion)
/*body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
"
漏洞归属组件: " + path + "" +
"
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoreType + "分值: " +
@@ -362,7 +387,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
nveVector := scoreType + "/" + sc.NvectorVule
openEulerScore = " "
body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
- cve.Description, cveAnalysis, openEulerScore, affectedVersion)
+ cve.Description, cve.RepairTime, updateTime, cve.CveDetailUrl, commentCmd,
+ cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -391,7 +417,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
nveVector := scoreType + "/" + sc.NvectorVule
openEulerScore = " "
body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
- cve.Description, cveAnalysis, openEulerScore, affectedVersion)
+ cve.Description, cve.RepairTime, updateTime, cve.CveDetailUrl, commentCmd,
+ cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -423,7 +450,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
nveVector := scoreType + "/" + its.NVDVector
oVector := scoreType + "/" + its.OpenEulerVector
body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
- cve.Description, cveAnalysis, openEulerScore, oVector, affectedVersion)
+ cve.Description, cve.RepairTime, updateTime, cve.CveDetailUrl, commentCmd,
+ cveAnalysis, openEulerScore, oVector, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -441,7 +469,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
nveVector := scoreType + "/" + its.NVDVector
oVector := scoreType + "/" + its.OpenEulerVector
body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
- cve.Description, cveAnalysis, openEulerScore, oVector, affectedVersion)
+ cve.Description, cve.RepairTime, updateTime, cve.CveDetailUrl, commentCmd,
+ cveAnalysis, openEulerScore, oVector, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -461,7 +490,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
nveScore := score + " " + cve.CveLevel
nveVector := scoreType + "/" + sc.NvectorVule
body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
- cve.Description, cveAnalysis, openEulerScore, affectedVersion)
+ cve.Description, cve.RepairTime, updateTime, cve.CveDetailUrl, commentCmd,
+ cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -478,7 +508,8 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
nveVector := scoreType + "/" + sc.NvectorVule
body := fmt.Sprintf(bodyTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
- cve.Description, cveAnalysis, openEulerScore, affectedVersion)
+ cve.Description, cve.RepairTime, updateTime, cve.CveDetailUrl, commentCmd,
+ cveAnalysis, openEulerScore, affectedVersion)
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
diff --git a/taskhandler/cve.go b/taskhandler/cve.go
index 99d0cd2..e9b09a4 100644
--- a/taskhandler/cve.go
+++ b/taskhandler/cve.go
@@ -29,6 +29,7 @@ func UpdateExcelCveGroups(cveData models.OriginExcel, cveRef string, openeulerNu
CveRes.PackName = cveData.PackName
CveRes.CveUrl = cveRef + cveData.CveNum
CveRes.CveLevel = cveData.CveLevel
+ CveRes.DataSource = 3
CveRes.IsExport = 0
if CveRes.Status != 0 && CveRes.Status != 1 {
CveRes.Status = 1
@@ -206,6 +207,7 @@ func InsertCveExcelGroups(cveData models.OriginExcel, cveRef string, openeulerNu
vul.PackName = cveData.PackName
vul.CveUrl = cveRef + cveData.CveNum
vul.CveLevel = cveData.CveLevel
+ vul.DataSource = 3
vul.IsExport = 0
var sec models.SecurityNotice
sec.CveNum = cveData.CveNum
@@ -295,6 +297,7 @@ func UpdateCveGroups(cveData models.OriginUpstream, cveRef string, openeulerNum
CveRes.PackName = pkList[0]
CveRes.CveUrl = cveRef + cveData.CveNum
CveRes.CveLevel = cveScV3.CveLevel
+ CveRes.DataSource = 1
CveRes.IsExport = 0
if CveRes.Status != 0 && CveRes.Status != 1 {
CveRes.Status = 1
@@ -537,6 +540,7 @@ func InsertCveGroups(cveData models.OriginUpstream, cveRef string, openeulerNum
vul.PackName = pkList[0]
vul.CveUrl = cveRef + cveData.CveNum
vul.CveLevel = cveScV3.CveLevel
+ vul.DataSource = 1
vul.IsExport = 0
var sec models.SecurityNotice
sec.CveNum = cveData.CveNum
@@ -893,6 +897,7 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
vul.PackName = cveData.RepoPath
vul.CveUrl = cveRef + cveData.CveNumber
vul.IsExport = 0
+ vul.DataSource = 4
v2, cvsError := strconv.ParseFloat(lop.CvsScore, 64)
if cvsError != nil {
vul.CveLevel = "Critical"
@@ -1054,6 +1059,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
vul.PackName = cveData.RepoPath
vul.CveUrl = cveRef + cveData.CveNumber
vul.IsExport = 0
+ vul.DataSource = 4
var sec models.SecurityNotice
sec.CveNum = cveData.CveNumber
sec.InfluenceComponent = lop.Components
diff --git a/taskhandler/yaml.go b/taskhandler/yaml.go
index d204d1f..37051e5 100644
--- a/taskhandler/yaml.go
+++ b/taskhandler/yaml.go
@@ -43,7 +43,6 @@ func GetYamlTables(url string) (string, error){
}
var lock sync.Mutex
-//var wg sync.WaitGroup
//GetYamlByGit
func GetYamlByGit(url string) (string, error) {
@@ -61,7 +60,6 @@ func GetYamlByGit(url string) (string, error) {
var ch = make(chan int, len(gt))
for i, tableValue := range gt {
logs.Info("查询第 ", i, "tableName: ", tableValue.TableName, "开始...")
- //wg.Add(1)
go func(tv models.GitPackageTable,idx int) {
ok, err := GetYaml(url, compURL1, page, size, tv, &ch)
if err == nil {
@@ -70,13 +68,11 @@ func GetYamlByGit(url string) (string, error) {
logs.Error("当前数据处理失败, ok: ", ok, ",i: ", idx, ", err: ", err)
}
}(tableValue,i)
- //<- ch
}
for i:=0; i< len(gt); i++ {
<-ch
}
close(ch)
- //wg.Wait()
return "", nil
}
diff --git a/util/parsepayload.go b/util/parsepayload.go
index 5df705c..f41f8d0 100644
--- a/util/parsepayload.go
+++ b/util/parsepayload.go
@@ -483,7 +483,7 @@ func TrimStringNR(str string) string {
return str
}
-//ExtractDigital Get number in string
+//ExtractDigital remove "cvss 3.0" or "cvss 2.0"
func RemoveSpecialDigital(body string) string {
if body == "" {
return body
@@ -495,6 +495,7 @@ func RemoveSpecialDigital(body string) string {
return ""
}
+//ExtractDigital Get number in string
func ExtractDigital(body string) string {
if body == "" {
return body
--
Gitee
From f111da404e441f36b00ce5870086891cf887e0eb Mon Sep 17 00:00:00 2001
From: zhangjianjun_code <7844966+zhangjianjun_code@user.noreply.gitee.com>
Date: Wed, 14 Oct 2020 16:51:45 +0800
Subject: [PATCH 4/5] 1. New python code; 2. Analysis of main functions to
manually generate excel files and store them in the database for future use;
3. Feedback on wrong excel file emails
---
cve-python/.gitignore | 4 +
cve-python/Dockerfile | 10 +
cve-python/README.md | 37 +
cve-python/controller/__init__.py | 0
cve-python/controller/gitwebcontroller.py | 8 +
cve-python/controller/tablecontroller.py | 16 +
cve-python/dbConnecttion/Config.py | 10 +
cve-python/dbConnecttion/MysqlConn.py | 135 +
cve-python/dbConnecttion/__init__.py | 0
cve-python/dbConnecttion/test.py | 9 +
cve-python/emailtask/__init__.py | 0
cve-python/emailtask/sendemail.py | 20 +
cve-python/gitwebtask/__init__.py | 0
cve-python/gitwebtask/genegroup.py | 86 +
cve-python/gitwebtask/yamltask.py | 47 +
cve-python/main.py | 29 +
cve-python/problemexcels/data.xls | Bin 0 -> 5632 bytes
cve-python/requirements.txt | 60 +
cve-python/sigs.yaml | 7232 +++++++++++++++++++++
cve-python/tabletask/__init__.py | 0
cve-python/tabletask/crawltask.py | 114 +
cve-python/tabletask/exceltask.py | 124 +
cve-python/tabletask/runtask.py | 109 +
cve-python/tabletask/test.py | 7 +
cve-python/tabletask/timedtask.py | 31 +
cve-python/tabletask/toexcel.py | 93 +
cve-python/templates/index.html | 10 +
27 files changed, 8191 insertions(+)
create mode 100644 cve-python/.gitignore
create mode 100644 cve-python/Dockerfile
create mode 100644 cve-python/README.md
create mode 100644 cve-python/controller/__init__.py
create mode 100644 cve-python/controller/gitwebcontroller.py
create mode 100644 cve-python/controller/tablecontroller.py
create mode 100644 cve-python/dbConnecttion/Config.py
create mode 100644 cve-python/dbConnecttion/MysqlConn.py
create mode 100644 cve-python/dbConnecttion/__init__.py
create mode 100644 cve-python/dbConnecttion/test.py
create mode 100644 cve-python/emailtask/__init__.py
create mode 100644 cve-python/emailtask/sendemail.py
create mode 100644 cve-python/gitwebtask/__init__.py
create mode 100644 cve-python/gitwebtask/genegroup.py
create mode 100644 cve-python/gitwebtask/yamltask.py
create mode 100644 cve-python/main.py
create mode 100644 cve-python/problemexcels/data.xls
create mode 100644 cve-python/requirements.txt
create mode 100644 cve-python/sigs.yaml
create mode 100644 cve-python/tabletask/__init__.py
create mode 100644 cve-python/tabletask/crawltask.py
create mode 100644 cve-python/tabletask/exceltask.py
create mode 100644 cve-python/tabletask/runtask.py
create mode 100644 cve-python/tabletask/test.py
create mode 100644 cve-python/tabletask/timedtask.py
create mode 100644 cve-python/tabletask/toexcel.py
create mode 100644 cve-python/templates/index.html
diff --git a/cve-python/.gitignore b/cve-python/.gitignore
new file mode 100644
index 0000000..729dfe8
--- /dev/null
+++ b/cve-python/.gitignore
@@ -0,0 +1,4 @@
+.idea
+__pycache__
+.gitee
+venv
\ No newline at end of file
diff --git a/cve-python/Dockerfile b/cve-python/Dockerfile
new file mode 100644
index 0000000..3ef97ae
--- /dev/null
+++ b/cve-python/Dockerfile
@@ -0,0 +1,10 @@
+FROM ubuntu:latest
+
+MAINTAINER TommyLike
+RUN set -ex && apt-get update -y && apt-get install -y python-pip python3.5-dev build-essential libpq-dev && mkdir -p /opt/app/
+#RUN apt-get update && apt-get install -y python-pip && mkdir -p /opt/app/
+RUN set -ex && ln -s /usr/bin/python3 /usr/bin/python && ln -s /usr/bin/pip3 /usr/bin/pip
+COPY ./cve-python /opt/app
+
+WORKDIR /opt/app/cve-python
+ENTRYPOINT ["python", "/opt/app/cve-python/main.py"]
\ No newline at end of file
diff --git a/cve-python/README.md b/cve-python/README.md
new file mode 100644
index 0000000..cc0c6e4
--- /dev/null
+++ b/cve-python/README.md
@@ -0,0 +1,37 @@
+# cve-python
+
+#### 介绍
+处理人工cve数据
+
+#### 软件架构
+软件架构说明
+
+
+#### 安装教程
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### 使用说明
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### 参与贡献
+
+1. Fork 本仓库
+2. 新建 Feat_xxx 分支
+3. 提交代码
+4. 新建 Pull Request
+
+
+#### 特技
+
+1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
+2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
+3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
+4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
+5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
+6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/cve-python/controller/__init__.py b/cve-python/controller/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/cve-python/controller/gitwebcontroller.py b/cve-python/controller/gitwebcontroller.py
new file mode 100644
index 0000000..ab8795b
--- /dev/null
+++ b/cve-python/controller/gitwebcontroller.py
@@ -0,0 +1,8 @@
+# -*- coding: UTF-8 -*-
+from gitwebtask import genegroup,yamltask
+
+def gwcontroller():
+ print("查询数据库生成excel任务开始")
+ genegroup.Command().handle()
+ yamltask.task().download()
+ yamltask.task().read()
\ No newline at end of file
diff --git a/cve-python/controller/tablecontroller.py b/cve-python/controller/tablecontroller.py
new file mode 100644
index 0000000..ecc6380
--- /dev/null
+++ b/cve-python/controller/tablecontroller.py
@@ -0,0 +1,16 @@
+# -*- coding: UTF-8 -*-
+import sys
+import os
+from tabletask import runtask,exceltask,toexcel
+
+def toExcelController():
+
+ '''
+ 查询数据库cve_status状态为3或4的数据,生成excel
+ 修改cve_status状态为3或4的状态为5,表示已加入excel待处理
+ '''
+ toexcel.MysqlToExcel().generate_table()
+ toexcel.MysqlToExcel().update_status()
+def runTaskController():
+ # 执行解析表格 爬取CVE官网数据 存入数据库
+ runtask.crawlWeb()
diff --git a/cve-python/dbConnecttion/Config.py b/cve-python/dbConnecttion/Config.py
new file mode 100644
index 0000000..460fccf
--- /dev/null
+++ b/cve-python/dbConnecttion/Config.py
@@ -0,0 +1,10 @@
+#coding:utf-8
+'''
+@author:xjh
+'''
+DBHOST="localhost"
+DBPORT=3306
+DBUSER="root"
+DBPWD="work123"
+DBNAME="a_l"
+DBCHAR="utf8"
\ No newline at end of file
diff --git a/cve-python/dbConnecttion/MysqlConn.py b/cve-python/dbConnecttion/MysqlConn.py
new file mode 100644
index 0000000..d40595a
--- /dev/null
+++ b/cve-python/dbConnecttion/MysqlConn.py
@@ -0,0 +1,135 @@
+# -*- coding: UTF-8 -*-
+"""
+Created on 2016年5月7日
+
+@author: xjh
+1、执行带参数的SQL时,请先用sql语句指定需要输入的条件列表,然后再用tuple/list进行条件批配
+2、在格式SQL中不需要使用引号指定数据类型,系统会根据输入参数自动识别
+3、在输入的值中不需要使用转意函数,系统会自动处理
+"""
+import MySQLdb
+from MySQLdb.cursors import DictCursor
+from DBUtils.PooledDB import PooledDB
+from dbConnecttion import Config
+
+class Mysql(object):
+ #连接池对象
+ __pool=None
+ def __init__(self):
+ self.__conn=Mysql.__getConn()
+ self.__cursor=self.__conn.cursor()
+
+ @staticmethod
+ def __getConn():
+ """
+ @summary:静态方法,从连接池中取出连接
+ @return MySQLdb.connection
+ """
+ if Mysql.__pool is None:
+ __pool=PooledDB(creator=MySQLdb,mincached=1,maxcached=20,host=Config.DBHOST,port=Config.DBPORT,user=Config.DBUSER,
+ passwd=Config.DBPWD,db=Config.DBNAME,use_unicode=False,charset=Config.DBCHAR,cursorclass=DictCursor)
+ return __pool.connection()
+ def getOne(self,sql,param=None):
+ """
+ @summary: 执行查询,并取出第一条
+ @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
+ @param param: 可选参数,条件列表值(元组/列表)
+ @return: result list/boolean 查询到的结果集
+ """
+ if param is None:
+ count=self.__cursor.execute(sql)
+ else:
+ count=self.__cursor.execute(sql,param)
+ if count>0:
+ result=self.__cursor.fetchone()
+ else:
+ result=False
+ return result
+
+ def getMany(self, sql, param=None):
+ """
+ @summary: 执行查询,并取出num条结果
+ @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
+
+ @param param: 可选参数,条件列表值(元组/列表)
+ @return: result list/boolean 查询到的结果集
+ """
+ if param is None:
+ count = self.__cursor.execute(sql)
+ else:
+ count = self.__cursor.execute(sql, param)
+ if count > 0:
+ result = self.__cursor.fetchall()
+ else:
+ result = False
+ return result
+ def insertOne(self,sql,value):
+ """
+ @summary: 向数据表插入一条记录
+ @param sql:要插入的SQL格式
+ @param value:要插入的记录数据tuple/list
+ @return: insertId 受影响的行数
+ """
+ self.__cursor.execute(sql, value)
+ return self.__getInsertId()
+
+ def __getInsertId(self):
+ """
+ 获取当前连接最后一次插入操作生成的id,如果没有则为0
+ """
+ self.__cursor.execute("SELECT @@IDENTITY AS id")
+ result = self.__cursor.fetchall()
+ return result[0]['id']
+ def __query(self,sql,param=None):
+ if param is None:
+ count=self.__cursor.execute(sql)
+ else:
+ count=self.__cursor.execute(sql,param)
+ return count
+ def update(self, sql, param=None):
+ """
+ @summary: 更新数据表记录
+ @param sql: SQL格式及条件,使用(%s,%s)
+ @param param: 要更新的 值 tuple/list
+ @return: count 受影响的行数
+ """
+ return self.__query(sql, param)
+
+ def delete(self, sql, param=None):
+ """
+ @summary: 删除数据表记录
+ @param sql: SQL格式及条件,使用(%s,%s)
+ @param param: 要删除的条件 值 tuple/list
+ @return: count 受影响的行数
+ """
+ return self.__query(sql, param)
+
+ def begin(self):
+ """
+ @summary: 开启事务
+ """
+ self.__conn.autocommit(0)
+
+ def end(self, option='commit'):
+ """
+ @summary: 结束事务
+ """
+ if option == 'commit':
+ self.__conn.commit()
+ else:
+ self.__conn.rollback()
+
+ def dispose(self, isEnd=1):
+ """
+ @summary: 提交事务
+ """
+ if isEnd == 1:
+ self.end('commit')
+ else:
+ self.end('rollback')
+ def close(self):
+ """
+ @summary: 关闭连接
+ """
+ self.__cursor.close()
+ self.__conn.close()
\ No newline at end of file
diff --git a/cve-python/dbConnecttion/__init__.py b/cve-python/dbConnecttion/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/cve-python/dbConnecttion/test.py b/cve-python/dbConnecttion/test.py
new file mode 100644
index 0000000..08e9418
--- /dev/null
+++ b/cve-python/dbConnecttion/test.py
@@ -0,0 +1,9 @@
+# -*- coding: UTF-8 -*-
+from dbConnecttion.MysqlConn import Mysql
+from _sqlite3 import Row
+
+mysql=Mysql()
+sql="select * from sites where name =%s"
+val=("ss",)
+result=mysql.getOne(sql,val)
+print(str(result['name'],encoding="utf-8"))
\ No newline at end of file
diff --git a/cve-python/emailtask/__init__.py b/cve-python/emailtask/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/cve-python/emailtask/sendemail.py b/cve-python/emailtask/sendemail.py
new file mode 100644
index 0000000..bb3f978
--- /dev/null
+++ b/cve-python/emailtask/sendemail.py
@@ -0,0 +1,20 @@
+import smtplib
+from email.mime.text import MIMEText
+from email.mime.multipart import MIMEMultipart
+from email.header import Header
+
+def send():
+ sender="jhxiaoh@isoftstone.com"
+ receivers=["283750495@qq.com"]
+ #创建一个带附件的实例
+ message=MIMEMultipart()
+ message['From']=Header('xjh','utf-8')
+ message['To']=Header("接收者",'utf-8')
+ subject='解析出错的excel数据提醒'
+ message['Subject']=Header(subject,'utf-8')
+
+ #邮件正文类容
+ message.attach(MIMEText("excel中录入的cve漏洞解析失败失败数据反馈,检查内容和格式,重新提交",'plain','utf-8'))
+
+ #构造
+
diff --git a/cve-python/gitwebtask/__init__.py b/cve-python/gitwebtask/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/cve-python/gitwebtask/genegroup.py b/cve-python/gitwebtask/genegroup.py
new file mode 100644
index 0000000..f1eed44
--- /dev/null
+++ b/cve-python/gitwebtask/genegroup.py
@@ -0,0 +1,86 @@
+# -*- coding: UTF-8 -*-
+import requests
+import lxml
+import logging
+from lxml.etree import HTML
+from dbConnecttion.MysqlConn import Mysql
+import time
+
+
+class Command():
+ logger = logging.getLogger('log')
+
+ def handle(self):
+ mysql = Mysql()
+ url = 'https://gitee.com/openeuler/community/tree/master/sig'
+ try:
+ r = requests.get(url)
+ except requests.exceptions.ConnectionError:
+ print('ConnectionError')
+ except requests.exceptions.ChunkedEncodingError:
+ print('ChunkedEncodingError')
+ except:
+ print('Unfortunitely -- An Unknow Error Happened')
+ html = HTML(r.content)
+ assert isinstance(html, lxml.etree._Element)
+ sigs_list = []
+ i = 3
+ while True:
+ sig_name = html.xpath("//div[@id='tree-slider']/div[{}]/div[1]/a/@title".format(i))[0]
+ if sig_name == 'sigs.yaml':
+ break
+ sql="select * from cve_git_repo_groups where group_name = %s"
+ val=(sig_name,)
+ flag=mysql.getOne(sql,val)
+ if flag==False:
+ print("数据库无此条数据,执行插入操作")
+ sql="insert into cve_git_repo_groups (group_name) values (%s)"
+ val=(sig_name,)
+ mysql.insertOne(sql,val)
+ mysql.dispose()
+
+ sig_page = html.xpath("//div[@id='tree-slider']/div[{}]/div[1]/a/@href".format(i))[0]
+ etherpad = 'https://etherpad.openeuler.org/p/{}-meetings'.format(sig_name)
+ # 获取所有sig的名称、首页和etherpad
+ sigs_list.append([sig_name, 'https://gitee.com' + sig_page, etherpad])
+ i += 2
+ sigs_list = sorted(sigs_list)
+ print(sigs_list)
+ for sig in sigs_list:
+ #获取group_id
+ sql="select group_id from cve_git_repo_groups where group_name = %s"
+ val=(sig[0],)
+ groupId=mysql.getOne(sql,val)["group_id"]
+ #删除cve_gite_repo_member里面的数据
+ #根据groupId
+ sql1="delete from cve_gite_repo_member where group_id = %s"
+ val1=(groupId,)
+ mysql.delete(sql1,val1)
+ mysql.dispose()
+ # 获取owners
+ url = 'https://gitee.com/openeuler/community/blob/master/sig/{}/OWNERS'.format(sig[0])
+ r = requests.get(url)
+ html = HTML(r.text)
+ assert isinstance(html, lxml.etree._Element)
+ res = html.xpath('//div[@class="line"]/text()')
+ owners = []
+ for i in res[1:]:
+ maintainer = i.strip().split('-')[-1].strip()
+ createTime = str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
+ sql="insert into cve_gite_repo_member (group_id,member_name,member_type,create_time) values (%s,%s,%s,%s)"
+ val=(groupId,maintainer,"Maintainer",createTime)
+ mysql.insertOne(sql,val)
+ mysql.dispose()
+
+ owners.append(maintainer)
+ print(owners)
+ # owners = ','.join(owners)
+ # sig.append(owners)
+ # group_name = sig[0]
+ # home_page = sig[1]
+ # etherpad = sig[2]
+ # maillist = sig[3]
+ # irc = sig[4]
+ # owners = sig[5]
+
+ mysql.close()
diff --git a/cve-python/gitwebtask/yamltask.py b/cve-python/gitwebtask/yamltask.py
new file mode 100644
index 0000000..7caa004
--- /dev/null
+++ b/cve-python/gitwebtask/yamltask.py
@@ -0,0 +1,47 @@
+# -*- coding: UTF-8 -*-
+import yaml
+import requests
+from dbConnecttion.MysqlConn import Mysql
+import time
+import os
+import logging
+
+class task():
+ logger = logging.getLogger('log')
+ def download(self):
+ url="https://gitee.com/openeuler/community/raw/master/sig/sigs.yaml"
+ try:
+ r=requests.get(url)
+ except requests.exceptions.ConnectionError:
+ print('ConnectionError')
+ except requests.exceptions.ChunkedEncodingError:
+ print('ChunkedEncodingError')
+ except:
+ print('Unfortunitely -- An Unknow Error Happened')
+ with open ("sigs.yaml","wb") as code:
+ code.write(r.content)
+ def read(self):
+ mysql=Mysql()
+ if os.path.exists("sigs.yaml"):
+ with open("sigs.yaml","r") as f:
+ data=yaml.load(f)
+ print(data)
+ for sig in data['sigs']:
+ sql="select group_id from cve_git_repo_groups where group_name=%s"
+ val=(sig['name'],)
+ groupId=mysql.getOne(sql,val)['group_id']
+ #根据group_id删除数据避免重复
+ sql1="delete from cve_gite_repo where group_id = %s"
+ val1=(groupId,)
+ mysql.delete(sql1,val1)
+ mysql.dispose()
+ # print(groupId)
+ for p in sig["repositories"]:
+ orgPath=p[0:p.rfind("/")]
+ path=p[p.rfind("/"):][1:]
+ createTime = str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
+ sql="insert into cve_gite_repo (group_id,org_path,path,status,create_time) values (%s,%s,%s,%s,%s)"
+ val=(groupId,orgPath,path,0,createTime)
+ mysql.insertOne(sql,val)
+ mysql.dispose()
+ mysql.close()
diff --git a/cve-python/main.py b/cve-python/main.py
new file mode 100644
index 0000000..0ba014d
--- /dev/null
+++ b/cve-python/main.py
@@ -0,0 +1,29 @@
+# This is a sample Python script.
+
+# Press Shift+F10 to execute it or replace it with your code.
+# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
+from controller import tablecontroller,gitwebcontroller
+import schedule
+import time
+
+def print_hi(name):
+ # Use a breakpoint in the code line below to debug your script.
+ print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
+
+
+# Press the green button in the gutter to run the script.
+def run():
+ tablecontroller.toExcelController()
+ # gitwebcontroller.gwcontroller()
+def run1():
+ tablecontroller.runTaskController()
+if __name__ == '__main__':
+
+# schedule.every(2).seconds.do(run)
+# schedule.every().day.at("17:09").do(run)
+ schedule.every().day.at("17:48").do(run1)
+ while True:
+ schedule.run_pending() #run_pending:运行所有可以运行的任务
+ time.sleep(1)
+
+# See PyCharm help at https://www.jetbrains.com/help/pycharm/
diff --git a/cve-python/problemexcels/data.xls b/cve-python/problemexcels/data.xls
new file mode 100644
index 0000000000000000000000000000000000000000..a32c7d78bdf6a1063adfa3a0f1355b8713efd245
GIT binary patch
literal 5632
zcmeI0OKjXk7{@=mNt(2IZJP8EpbUk+lYOPFnw8oll+qTZQ3#}<3TbidN#bVLUTp7%
z^gv4=Mt?>35BA`mZS8qd!E
zn}=t9-{%?EpI=K{zw%D^4O)^8(;E71p@|x5>>A2Vi@Kdqzp%h^@wX9Wm{!w&h(J>#
z9NAD$AGUn9mVL?ozCk*@UH1ucqVI4$LnUe=Su
zmMqAq4&xj-b+k8|&K&H`^zYx7O%Y88LCMdhQlOZ0Y(Gd&xs_C_g#<;g_Tbe^>gFY3P$jA2~68a-L|&5w`D_rIqx}hSmb#)bKEhf4QEPPs6B2^
zO{*Jb)4dt|WktF_*O$qq57b)wMCL#)o6V*BZ+BFtuYZM(LXUGbZkUD}CZu%4q+53G
z;)bFuy51bqn_==`n=cxLf(xc%79l81DEM;HbBl0=nJ+st`6(Hc46o>`9{!c)Hewo|@Eoqo;8EoxKcggOJ;sgZ8J`O_CCCq@VI
z%5okSPJAS8=PipC=tb^<&VY{u&mwi>+M{~xRrv*OL-(k1x5_(lp5jE`G1?Us9=)jA
zTvD|=aGySvz8u(DQ{IL0=;_1KNGomamexI)|TK5F3}{O=<5Xg%6%
zuX6feVDVSO`OohV->N)(d#HVHXwlu>d*VLKoOyHPF6GU(1YL-F
z@^cGPv0~mmv8v^*Bi5_Db;Np=w~km((CY|l=Aa|itGso@dV+f6F`0KVR?Hi_c+`)1
zr=gg)9`n`_=T+YPe}j;>ju@|U(-GrU-n@<~ZyhmS+p?Coju@}<))C_&ZyoVnjd5M^
z&crii-mJozGVjBB2ffR1X^^uhh5O5*TK!!m@J|uoy_dt2&o4f;_^jd+iq9qfu5$|)
z|E{M0CxJ11z;W>zN6=Ax*x`>lbMX8hPaCOTTO`A=bf+{pfBMqkm9MnL?}gmtE53j2`d50hW!nF#`~MC#|5ncc
literal 0
HcmV?d00001
diff --git a/cve-python/requirements.txt b/cve-python/requirements.txt
new file mode 100644
index 0000000..633fae4
--- /dev/null
+++ b/cve-python/requirements.txt
@@ -0,0 +1,60 @@
+Automat==20.2.0
+DBUtils==1.3
+Flask==1.1.2
+Jinja2==2.11.2
+MarkupSafe==1.1.1
+Protego==0.1.16
+PyDispatcher==2.0.5
+PyHamcrest==2.0.2
+PyMySQL==0.10.0
+PyYAML==5.3.1
+Werkzeug==1.0.1
+aiocoap==0.3
+aiohttp==3.6.2
+async-timeout==3.0.1
+attrs==20.1.0
+beautifulsoup4==4.9.1
+certifi==2020.6.20
+cffi==1.14.2
+chardet==3.0.4
+click==7.1.2
+config==0.5.0.post0
+constantly==15.1.0
+cryptography==3.1
+cssselect==1.1.0
+hyperlink==20.0.1
+idna==2.10
+incremental==17.5.0
+itemadapter==0.1.0
+itemloaders==1.0.2
+itsdangerous==1.1.0
+jmespath==0.10.0
+lxml==4.5.2
+multidict==4.7.6
+mysql==0.0.2
+mysql-connector-python==8.0.21
+mysqlclient==2.0.1
+parsel==1.6.0
+pip==20.2.2
+protobuf==3.13.0
+psutil==5.7.2
+pyOpenSSL==19.1.0
+pyasn1==0.4.8
+pyasn1-modules==0.2.8
+pycparser==2.20
+queuelib==1.5.0
+requests==2.24.0
+resolver==0.2.1
+schedule==0.6.0
+selector==0.10.1
+service-identity==18.1.0
+setuptools==50.1.0
+sites==0.0.1
+six==1.15.0
+soupsieve==2.0.1
+urllib3==1.25.10
+w3lib==1.22.0
+xlrd==1.2.0
+xlwt==1.3.0
+yarl==1.5.1
+zope.interface==5.1.0
diff --git a/cve-python/sigs.yaml b/cve-python/sigs.yaml
new file mode 100644
index 0000000..1784086
--- /dev/null
+++ b/cve-python/sigs.yaml
@@ -0,0 +1,7232 @@
+sigs:
+- name: Infrastructure
+ repositories:
+ - openeuler/infrastructure
+ - openeuler/blog
+ - openeuler/website
+ - openeuler/go-gitee
+ - openeuler/gitbook-theme-hugo
+ - openeuler/tool-collections
+ - openeuler/cve-manager
+- name: TC
+ repositories:
+ - openeuler/community
+- name: doc
+ repositories:
+ - openeuler/docs
+- name: sig-CICD
+ repositories:
+ - openeuler/compass-ci
+- name: Application
+ repositories:
+ - openeuler/custom_build_tool
+ - src-openeuler/abrt
+ - src-openeuler/abrt-java-connector
+ - src-openeuler/alsa-utils
+ - src-openeuler/amanda
+ - src-openeuler/antlr-maven-plugin
+ - src-openeuler/antlr32
+ - src-openeuler/apache-commons-collections
+ - src-openeuler/apache-commons-csv
+ - src-openeuler/apache-commons-daemon
+ - src-openeuler/apache-commons-dbcp
+ - src-openeuler/apache-commons-logging
+ - src-openeuler/apache-commons-pool
+ - src-openeuler/apache-commons-validator
+ - src-openeuler/apache-logging-parent
+ - src-openeuler/apache-mime4j
+ - src-openeuler/apache-mod_jk
+ - src-openeuler/apache-rat
+ - src-openeuler/apache-rpm-macros
+ - src-openeuler/aries-blueprint-core
+ - src-openeuler/aries-blueprint-parser
+ - src-openeuler/aries-proxy-api
+ - src-openeuler/aspell
+ - src-openeuler/aspell-en
+ - src-openeuler/avro
+ - src-openeuler/boilerpipe
+ - src-openeuler/brasero
+ - src-openeuler/bwa
+ - src-openeuler/cdrdao
+ - src-openeuler/cjose
+ - src-openeuler/cli-parser
+ - src-openeuler/codegen
+ - src-openeuler/coffee-script
+ - src-openeuler/compface
+ - src-openeuler/compress-lzf
+ - src-openeuler/console-setup
+ - src-openeuler/convmv
+ - src-openeuler/cookxml
+ - src-openeuler/culmus-fonts
+ - src-openeuler/custom_build_tool
+ - src-openeuler/dblatex
+ - src-openeuler/dcraw
+ - src-openeuler/decentxml
+ - src-openeuler/discount
+ - src-openeuler/dleyna-server
+ - src-openeuler/dlm
+ - src-openeuler/dnssec-trigger
+ - src-openeuler/docbook-style-dsssl
+ - src-openeuler/docbook-utils
+ - src-openeuler/docbook2X
+ - src-openeuler/docbook5-style-xsl
+ - src-openeuler/dovecot
+ - src-openeuler/doxygen
+ - src-openeuler/dump
+ - src-openeuler/elinks
+ - src-openeuler/elixir
+ - src-openeuler/enscript
+ - src-openeuler/eog
+ - src-openeuler/erlang-protobuffs
+ - src-openeuler/erlang-rebar
+ - src-openeuler/esc
+ - src-openeuler/evince
+ - src-openeuler/faust
+ - src-openeuler/fdupes
+ - src-openeuler/felix-gogo-runtime
+ - src-openeuler/felix-gogo-shell
+ - src-openeuler/felix-scr-annotations
+ - src-openeuler/felix-scr-generator
+ - src-openeuler/fetchmail
+ - src-openeuler/file-roller
+ - src-openeuler/fio
+ - src-openeuler/firefox
+ - src-openeuler/fmpp
+ - src-openeuler/fontforge
+ - src-openeuler/fonts-tweak-tool
+ - src-openeuler/forbidden-apis
+ - src-openeuler/forge-parent
+ - src-openeuler/freerdp
+ - src-openeuler/genwqe-tools
+ - src-openeuler/geronimo-parent-poms
+ - src-openeuler/gfbgraph
+ - src-openeuler/gl-manpages
+ - src-openeuler/glog
+ - src-openeuler/gmetric4j
+ - src-openeuler/gnome-calculator
+ - src-openeuler/gnome-desktop
+ - src-openeuler/gnome-online-miners
+ - src-openeuler/gnupg
+ - src-openeuler/gnuplot
+ - src-openeuler/google-crosextra-carlito-fonts
+ - src-openeuler/grafana
+ - src-openeuler/GraphicsMagick
+ - src-openeuler/grilo-plugins
+ - src-openeuler/gromacs
+ - src-openeuler/gshhg-gmt-nc4
+ - src-openeuler/gstreamer
+ - src-openeuler/gstreamer-plugins-base
+ - src-openeuler/gstreamer-plugins-good
+ - src-openeuler/gyp
+ - src-openeuler/hazelcast
+ - src-openeuler/HdrHistogram
+ - src-openeuler/hspell
+ - src-openeuler/hsqldb1
+ - src-openeuler/httpcomponents-asyncclient
+ - src-openeuler/hunspell-ak
+ - src-openeuler/hunspell-am
+ - src-openeuler/hunspell-ar
+ - src-openeuler/hunspell-as
+ - src-openeuler/hunspell-ast
+ - src-openeuler/hunspell-az
+ - src-openeuler/hunspell-be
+ - src-openeuler/hunspell-ber
+ - src-openeuler/hunspell-bg
+ - src-openeuler/hunspell-bn
+ - src-openeuler/hunspell-br
+ - src-openeuler/hunspell-ca
+ - src-openeuler/hunspell-cop
+ - src-openeuler/hunspell-csb
+ - src-openeuler/hunspell-cv
+ - src-openeuler/hunspell-cy
+ - src-openeuler/hunspell-da
+ - src-openeuler/hunspell-de
+ - src-openeuler/hunspell-dsb
+ - src-openeuler/hunspell-el
+ - src-openeuler/hunspell-eo
+ - src-openeuler/hunspell-es
+ - src-openeuler/hunspell-et
+ - src-openeuler/hunspell-eu
+ - src-openeuler/hunspell-fa
+ - src-openeuler/hunspell-fj
+ - src-openeuler/hunspell-fo
+ - src-openeuler/hunspell-fr
+ - src-openeuler/hunspell-fur
+ - src-openeuler/hunspell-fy
+ - src-openeuler/hunspell-ga
+ - src-openeuler/hunspell-gd
+ - src-openeuler/hunspell-gl
+ - src-openeuler/hunspell-grc
+ - src-openeuler/hunspell-gu
+ - src-openeuler/hunspell-gv
+ - src-openeuler/hunspell-haw
+ - src-openeuler/hunspell-hil
+ - src-openeuler/hunspell-hr
+ - src-openeuler/hunspell-hsb
+ - src-openeuler/hunspell-ht
+ - src-openeuler/hunspell-hu
+ - src-openeuler/hunspell-hy
+ - src-openeuler/hunspell-ia
+ - src-openeuler/hunspell-id
+ - src-openeuler/hunspell-is
+ - src-openeuler/hunspell-it
+ - src-openeuler/hunspell-kk
+ - src-openeuler/hunspell-km
+ - src-openeuler/hunspell-kn
+ - src-openeuler/hunspell-ko
+ - src-openeuler/hunspell-ku
+ - src-openeuler/hunspell-ky
+ - src-openeuler/hunspell-la
+ - src-openeuler/hunspell-lb
+ - src-openeuler/hunspell-ln
+ - src-openeuler/hunspell-lt
+ - src-openeuler/hunspell-mai
+ - src-openeuler/hunspell-mg
+ - src-openeuler/hunspell-mi
+ - src-openeuler/hunspell-mk
+ - src-openeuler/hunspell-ml
+ - src-openeuler/hunspell-mn
+ - src-openeuler/hunspell-mos
+ - src-openeuler/hunspell-mr
+ - src-openeuler/hunspell-ms
+ - src-openeuler/hunspell-mt
+ - src-openeuler/hunspell-nds
+ - src-openeuler/hunspell-ne
+ - src-openeuler/hunspell-nl
+ - src-openeuler/hunspell-no
+ - src-openeuler/hunspell-nr
+ - src-openeuler/hunspell-nso
+ - src-openeuler/hunspell-ny
+ - src-openeuler/hunspell-oc
+ - src-openeuler/hunspell-om
+ - src-openeuler/hunspell-or
+ - src-openeuler/hunspell-pa
+ - src-openeuler/hunspell-pl
+ - src-openeuler/hunspell-pt
+ - src-openeuler/hunspell-qu
+ - src-openeuler/hunspell-ro
+ - src-openeuler/hunspell-ru
+ - src-openeuler/hunspell-rw
+ - src-openeuler/hunspell-sc
+ - src-openeuler/hunspell-se
+ - src-openeuler/hunspell-si
+ - src-openeuler/hunspell-sk
+ - src-openeuler/hunspell-sl
+ - src-openeuler/hunspell-smj
+ - src-openeuler/hunspell-so
+ - src-openeuler/hunspell-sq
+ - src-openeuler/hunspell-sr
+ - src-openeuler/hunspell-ss
+ - src-openeuler/hunspell-st
+ - src-openeuler/hunspell-sv
+ - src-openeuler/hunspell-sw
+ - src-openeuler/hunspell-ta
+ - src-openeuler/hunspell-te
+ - src-openeuler/hunspell-tet
+ - src-openeuler/hunspell-th
+ - src-openeuler/hunspell-ti
+ - src-openeuler/hunspell-tl
+ - src-openeuler/hunspell-tn
+ - src-openeuler/hunspell-tpi
+ - src-openeuler/hunspell-ts
+ - src-openeuler/hunspell-uk
+ - src-openeuler/hunspell-ur
+ - src-openeuler/hunspell-uz
+ - src-openeuler/hunspell-ve
+ - src-openeuler/hunspell-vi
+ - src-openeuler/hunspell-wa
+ - src-openeuler/hunspell-xh
+ - src-openeuler/hunspell-yi
+ - src-openeuler/hunspell-zu
+ - src-openeuler/hwloc
+ - src-openeuler/hyphen
+ - src-openeuler/hyphen-as
+ - src-openeuler/hyphen-bg
+ - src-openeuler/hyphen-bn
+ - src-openeuler/hyphen-ca
+ - src-openeuler/hyphen-cy
+ - src-openeuler/hyphen-da
+ - src-openeuler/hyphen-de
+ - src-openeuler/hyphen-el
+ - src-openeuler/hyphen-es
+ - src-openeuler/hyphen-eu
+ - src-openeuler/hyphen-fa
+ - src-openeuler/hyphen-fo
+ - src-openeuler/hyphen-fr
+ - src-openeuler/hyphen-ga
+ - src-openeuler/hyphen-gl
+ - src-openeuler/hyphen-gu
+ - src-openeuler/hyphen-hi
+ - src-openeuler/hyphen-hsb
+ - src-openeuler/hyphen-ia
+ - src-openeuler/hyphen-id
+ - src-openeuler/hyphen-is
+ - src-openeuler/hyphen-it
+ - src-openeuler/hyphen-kn
+ - src-openeuler/hyphen-ku
+ - src-openeuler/hyphen-lt
+ - src-openeuler/hyphen-ml
+ - src-openeuler/hyphen-mn
+ - src-openeuler/hyphen-mr
+ - src-openeuler/hyphen-nl
+ - src-openeuler/hyphen-or
+ - src-openeuler/hyphen-pa
+ - src-openeuler/hyphen-pl
+ - src-openeuler/hyphen-pt
+ - src-openeuler/hyphen-ro
+ - src-openeuler/hyphen-ru
+ - src-openeuler/hyphen-sa
+ - src-openeuler/hyphen-sk
+ - src-openeuler/hyphen-sl
+ - src-openeuler/hyphen-sv
+ - src-openeuler/hyphen-ta
+ - src-openeuler/hyphen-te
+ - src-openeuler/hyphen-tk
+ - src-openeuler/hyphen-uk
+ - src-openeuler/ibus-table-chinese
+ - src-openeuler/icc-profiles-openicc
+ - src-openeuler/idm-console-framework
+ - src-openeuler/iio-sensor-proxy
+ - src-openeuler/indent
+ - src-openeuler/infiniband-diags
+ - src-openeuler/iperf2
+ - src-openeuler/iperf3
+ - src-openeuler/irssi
+ - src-openeuler/java-atk-wrapper
+ - src-openeuler/javamail
+ - src-openeuler/jboss-jms-2.0-api
+ - src-openeuler/jdepend
+ - src-openeuler/jedis
+ - src-openeuler/jpegoptim
+ - src-openeuler/jsch
+ - src-openeuler/json_simple
+ - src-openeuler/jsonp
+ - src-openeuler/jss
+ - src-openeuler/jzlib
+ - src-openeuler/kim-api
+ - src-openeuler/kohsuke-pom
+ - src-openeuler/libabigail
+ - src-openeuler/libaec
+ - src-openeuler/libapr1
+ - src-openeuler/libdmapsharing
+ - src-openeuler/libdvdnav
+ - src-openeuler/libdvdread
+ - src-openeuler/libeasyfc
+ - src-openeuler/libgadu
+ - src-openeuler/liblockfile
+ - src-openeuler/liblouis
+ - src-openeuler/libmicrohttpd
+ - src-openeuler/libmikmod
+ - src-openeuler/libmpeg2
+ - src-openeuler/libmtp
+ - src-openeuler/libmusicbrainz5
+ - src-openeuler/libtcnative
+ - src-openeuler/libvpx
+ - src-openeuler/libwbxml
+ - src-openeuler/libyami
+ - src-openeuler/linkchecker
+ - src-openeuler/linuxconsoletools
+ - src-openeuler/linuxdoc-tools
+ - src-openeuler/linuxptp
+ - src-openeuler/lksctp-tools
+ - src-openeuler/lmfit
+ - src-openeuler/log4j12
+ - src-openeuler/lohit-assamese-fonts
+ - src-openeuler/lohit-bengali-fonts
+ - src-openeuler/lohit-devanagari-fonts
+ - src-openeuler/lohit-gujarati-fonts
+ - src-openeuler/lohit-kannada-fonts
+ - src-openeuler/lohit-malayalam-fonts
+ - src-openeuler/lohit-marathi-fonts
+ - src-openeuler/lohit-nepali-fonts
+ - src-openeuler/lohit-tamil-fonts
+ - src-openeuler/lohit-telugu-fonts
+ - src-openeuler/lpg
+ - src-openeuler/lrzsz
+ - src-openeuler/lsyncd
+ - src-openeuler/lynx
+ - src-openeuler/mailman
+ - src-openeuler/mc
+ - src-openeuler/media-player-info
+ - src-openeuler/memcached
+ - src-openeuler/metadata-extractor2
+ - src-openeuler/mikmod
+ - src-openeuler/mina-ftpserver
+ - src-openeuler/mod_intercept_form_submit
+ - src-openeuler/mod_lookup_identity
+ - src-openeuler/mousetweaks
+ - src-openeuler/mrtg
+ - src-openeuler/msv
+ - src-openeuler/munge
+ - src-openeuler/mutt
+ - src-openeuler/mythes
+ - src-openeuler/nano
+ - src-openeuler/netpbm
+ - src-openeuler/nss-altfiles
+ - src-openeuler/nss-mdns
+ - src-openeuler/nss_wrapper
+ - src-openeuler/ntfs-3g
+ - src-openeuler/objectweb-asm
+ - src-openeuler/oldstandard-sfd-fonts
+ - src-openeuler/openal-soft
+ - src-openeuler/openjade
+ - src-openeuler/openmpi
+ - src-openeuler/opennlp
+ - src-openeuler/openoffice-lv
+ - src-openeuler/openoffice.org-dict-cs_CZ
+ - src-openeuler/opensm
+ - src-openeuler/opensp
+ - src-openeuler/opentest4j
+ - src-openeuler/openvpn
+ - src-openeuler/pam_krb5
+ - src-openeuler/paps
+ - src-openeuler/patchutils
+ - src-openeuler/pavucontrol
+ - src-openeuler/pax
+ - src-openeuler/pbzip2
+ - src-openeuler/pcp
+ - src-openeuler/perftest
+ - src-openeuler/perl-B-Lint
+ - src-openeuler/perl-Pod-LaTeX
+ - src-openeuler/pesign
+ - src-openeuler/pidgin
+ - src-openeuler/pki-core
+ - src-openeuler/pngquant
+ - src-openeuler/pnm2ppa
+ - src-openeuler/po4a
+ - src-openeuler/pptp
+ - src-openeuler/prelink
+ - src-openeuler/psacct
+ - src-openeuler/psutils
+ - src-openeuler/pylint
+ - src-openeuler/qperf
+ - src-openeuler/R-language
+ - src-openeuler/rabbitmq-server
+ - src-openeuler/rasqal
+ - src-openeuler/rdate
+ - src-openeuler/redis-protocol
+ - src-openeuler/regexp
+ - src-openeuler/rhythmbox
+ - src-openeuler/rngom
+ - src-openeuler/rpcsvc-proto
+ - src-openeuler/rrdtool
+ - src-openeuler/rubygem-kramdown
+ - src-openeuler/sane-frontends
+ - src-openeuler/scrub
+ - src-openeuler/skkdic
+ - src-openeuler/slapi-nis
+ - src-openeuler/snapd-glib
+ - src-openeuler/socat
+ - src-openeuler/soundtouch
+ - src-openeuler/spamassassin
+ - src-openeuler/spec-version-maven-plugin
+ - src-openeuler/strongswan
+ - src-openeuler/stunnel
+ - src-openeuler/t-digest
+ - src-openeuler/targetcli
+ - src-openeuler/tboot
+ - src-openeuler/testng
+ - src-openeuler/tex-fonts-hebrew
+ - src-openeuler/texi2html
+ - src-openeuler/texlive
+ - src-openeuler/texlive-base
+ - src-openeuler/three-eight-nine-ds-base
+ - src-openeuler/tomcat
+ - src-openeuler/tomcat-taglibs-standard
+ - src-openeuler/torque
+ - src-openeuler/tpm-quote-tools
+ - src-openeuler/tpm-tools
+ - src-openeuler/transfig
+ - src-openeuler/tre
+ - src-openeuler/ttmkfdir
+ - src-openeuler/uid_wrapper
+ - src-openeuler/units
+ - src-openeuler/unrtf
+ - src-openeuler/usb_modeswitch-data
+ - src-openeuler/usbguard
+ - src-openeuler/uwsgi
+ - src-openeuler/vinagre
+ - src-openeuler/vorbis-tools
+ - src-openeuler/voroplusplus
+ - src-openeuler/vte
+ - src-openeuler/wavpack
+ - src-openeuler/wayland-protocols
+ - src-openeuler/web-assets
+ - src-openeuler/weechat
+ - src-openeuler/weston
+ - src-openeuler/wireshark
+ - src-openeuler/wmctrl
+ - src-openeuler/xapps
+ - src-openeuler/xdg-dbus-proxy
+ - src-openeuler/xdg-desktop-portal-gtk
+ - src-openeuler/xml-commons-apis
+ - src-openeuler/XmlSchema
+ - src-openeuler/xmlstreambuffer
+ - src-openeuler/xmltoman
+ - src-openeuler/xmltool
+ - src-openeuler/xmms
+ - src-openeuler/xsane
+ - src-openeuler/xz-java
+ - src-openeuler/yelp-tools
+- name: Programming-language
+ repositories:
+ - src-openeuler/assertj-core
+ - src-openeuler/cinnamon-translations
+ - src-openeuler/gmavenplus-plugin
+ - src-openeuler/jboss-el
+ - src-openeuler/spock
+ - src-openeuler/mockito
+ - src-openeuler/keepalived
+ - src-openeuler/ndisc6
+ - src-openeuler/perl-Module-Install-ReadmeFromPod
+ - src-openeuler/perl-Module-Install-ReadmeMarkdownFromPod
+ - src-openeuler/perl-Module-Install-Repository
+ - src-openeuler/perl-Module-Manifest-Skip
+ - src-openeuler/perl-Module-Package
+ - src-openeuler/perl-Module-Package-Au
+ - src-openeuler/perl-Module-ScanDeps
+ - src-openeuler/perl-Moo
+ - src-openeuler/perl-Path-Class
+ - src-openeuler/perl-Role-Tiny
+ - src-openeuler/perl-strictures
+ - src-openeuler/libimagequant
+ - src-openeuler/perl-Crypt-OpenSSL-Random
+ - src-openeuler/python-psutil
+ - src-openeuler/perl-NTLM
+ - src-openeuler/python-entrypoints
+ - src-openeuler/gnu-efi
+ - src-openeuler/libzip
+ - src-openeuler/libdwarf
+ - src-openeuler/ltrace
+ - src-openeuler/python-which
+ - src-openeuler/perl-Software-License
+ - src-openeuler/xcb-util-keysyms
+ - src-openeuler/xcb-util-cursor
+ - src-openeuler/autoconf213
+ - src-openeuler/perl-Pod-Markdown
+ - src-openeuler/gperf
+ - src-openeuler/xdelta
+ - src-openeuler/python-iso8601
+ - src-openeuler/python-sphinx-theme-alabaster
+ - src-openeuler/perl-Sub-Install
+ - src-openeuler/enchant2
+ - src-openeuler/perl-Capture-Tiny
+ - src-openeuler/gssdp
+ - src-openeuler/uuid
+ - src-openeuler/mpich
+ - src-openeuler/python-attrs
+ - src-openeuler/perl-SGMLSpm
+ - src-openeuler/librelp
+ - src-openeuler/python-imagesize
+ - src-openeuler/perl-Path-Tiny
+ - src-openeuler/python-paramiko
+ - src-openeuler/python-sphinx
+ - src-openeuler/nvml
+ - src-openeuler/python-virtualenv
+ - src-openeuler/python-configparser
+ - src-openeuler/perl-Config-AutoConf
+ - src-openeuler/xorg-x11-proto-devel
+ - src-openeuler/qt5-qtwebsockets
+ - src-openeuler/perl-WWW-RobotRules
+ - src-openeuler/python-pluggy
+ - src-openeuler/qt5-qtsensors
+ - src-openeuler/python-funcsigs
+ - src-openeuler/pywbem
+ - src-openeuler/qt5-qtquickcontrols
+ - src-openeuler/libuv
+ - src-openeuler/qt5-qtx11extras
+ - src-openeuler/perl-Data-UUID
+ - src-openeuler/python-traceback2
+ - src-openeuler/perl-Text-Unidecode
+ - src-openeuler/dotconf
+ - src-openeuler/python-scons
+ - src-openeuler/perl-YAML-Tiny
+ - src-openeuler/mallard-rng
+ - src-openeuler/itstool
+ - src-openeuler/crash-gcore-command
+ - src-openeuler/intel-cmt-cat
+ - src-openeuler/qt5-qtdeclarative
+ - src-openeuler/qt5-qtquickcontrols2
+ - src-openeuler/byacc
+ - src-openeuler/numpy
+ - src-openeuler/python-enchant
+ - src-openeuler/rpmlint
+ - src-openeuler/perl-HTTP-Message
+ - src-openeuler/libindicator
+ - src-openeuler/libappstream-glib
+ - src-openeuler/iowatcher
+ - src-openeuler/python-wheel
+ - src-openeuler/perl-NetAddr-IP
+ - src-openeuler/cppunit
+ - src-openeuler/perl-Authen-SASL
+ - src-openeuler/libpfm
+ - src-openeuler/python-pyasn1
+ - src-openeuler/perl-LWP-MediaTypes
+ - src-openeuler/perl-Try-Tiny
+ - src-openeuler/perl-gettext
+ - src-openeuler/perl-Date-Calc
+ - src-openeuler/python-unittest2
+ - src-openeuler/check
+ - src-openeuler/tix
+ - src-openeuler/python-dns
+ - src-openeuler/python-atomicwrites
+ - src-openeuler/perl-IO-Socket-INET6
+ - src-openeuler/cmocka
+ - src-openeuler/qt5-qtxmlpatterns
+ - src-openeuler/perl-IO-HTML
+ - src-openeuler/ninja-build
+ - src-openeuler/socket_wrapper
+ - src-openeuler/perl-Module-Build
+ - src-openeuler/pygobject2
+ - src-openeuler/lua-posix
+ - src-openeuler/python-snowballstemmer
+ - src-openeuler/lua-lunit
+ - src-openeuler/qt5-qtconnectivity
+ - src-openeuler/qt5-qtsvg
+ - src-openeuler/vte291
+ - src-openeuler/python-cryptography-vectors
+ - src-openeuler/python-lit
+ - src-openeuler/xcb-util-renderutil
+ - src-openeuler/jimtcl
+ - src-openeuler/perl-MailTools
+ - src-openeuler/python-pygments
+ - src-openeuler/perl-JSON
+ - src-openeuler/python-itsdangerous
+ - src-openeuler/cscope
+ - src-openeuler/perl-LWP-Protocol-https
+ - src-openeuler/ilmbase
+ - src-openeuler/perl-Crypt-OpenSSL-RSA
+ - src-openeuler/libstemmer
+ - src-openeuler/perl-File-Listing
+ - src-openeuler/ocaml
+ - src-openeuler/pygtk2
+ - src-openeuler/python-urwid
+ - src-openeuler/python-linecache2
+ - src-openeuler/gupnp
+ - src-openeuler/python-docutils
+ - src-openeuler/perl-inc-latest
+ - src-openeuler/fakeroot
+ - src-openeuler/qt5-qtdoc
+ - src-openeuler/perl-MRO-Compat
+ - src-openeuler/perl-String-ShellQuote
+ - src-openeuler/python-extras
+ - src-openeuler/python-mimeparse
+ - src-openeuler/perl-TimeDate
+ - src-openeuler/rhnlib
+ - src-openeuler/perl-XML-Simple
+ - src-openeuler/perl-XML-LibXML
+ - src-openeuler/subunit
+ - src-openeuler/scipy
+ - src-openeuler/SDL
+ - src-openeuler/perl-generators
+ - src-openeuler/perl-Test-Pod
+ - src-openeuler/neon
+ - src-openeuler/python-fonttools
+ - src-openeuler/lapack
+ - src-openeuler/libdbusmenu
+ - src-openeuler/python-netaddr
+ - src-openeuler/perl-Bit-Vector
+ - src-openeuler/gflags
+ - src-openeuler/perl-libxml-perl
+ - src-openeuler/intltool
+ - src-openeuler/python-sphinxcontrib-websupport
+ - src-openeuler/perl-Params-Util
+ - src-openeuler/qt5-qttools
+ - src-openeuler/autoconf-archive
+ - src-openeuler/python-cups
+ - src-openeuler/gupnp-igd
+ - src-openeuler/perl-IO-String
+ - src-openeuler/perl-Net-HTTP
+ - src-openeuler/python-click
+ - src-openeuler/python-sure
+ - src-openeuler/python-backports_abc
+ - src-openeuler/perl-HTTP-Date
+ - src-openeuler/python-fixtures
+ - src-openeuler/obs-env
+ - src-openeuler/libspectre
+ - src-openeuler/perl-HTTP-Negotiate
+ - src-openeuler/vala
+ - src-openeuler/eglexternalplatform
+ - src-openeuler/python-genshi
+ - src-openeuler/gstreamer1-plugins-bad-free
+ - src-openeuler/python-blinker
+ - src-openeuler/xcb-util-wm
+ - src-openeuler/qt5-qttranslations
+ - src-openeuler/PyYAML
+ - src-openeuler/python-keyring
+ - src-openeuler/go-compilers
+ - src-openeuler/python-futures
+ - src-openeuler/perl-Test-Deep
+ - src-openeuler/perl-Text-CharWidth
+ - src-openeuler/perl-Devel-CheckLib
+ - src-openeuler/python-whoosh
+ - src-openeuler/qt5-qtwayland
+ - src-openeuler/perl-Module-Runtime
+ - src-openeuler/mvapich2
+ - src-openeuler/python-more-itertools
+ - src-openeuler/perl-Data-OptList
+ - src-openeuler/crash-trace-command
+ - src-openeuler/perl-File-Slurp
+ - src-openeuler/python-py
+ - src-openeuler/perl-Test-Warnings
+ - src-openeuler/perl-Date-Manip
+ - src-openeuler/libdv
+ - src-openeuler/python-sqlalchemy
+ - src-openeuler/qt5-qtmultimedia
+ - src-openeuler/gnome-user-docs
+ - src-openeuler/meanwhile
+ - src-openeuler/qt5-qtcanvas3d
+ - src-openeuler/perl-XML-SAX
+ - src-openeuler/python-singledispatch
+ - src-openeuler/pyxdg
+ - src-openeuler/perl-Unicode-UTF8
+ - src-openeuler/perl-XML-SAX-Base
+ - src-openeuler/python-pretend
+ - src-openeuler/libXScrnSaver
+ - src-openeuler/perl-Archive-Zip
+ - src-openeuler/perl-Text-WrapI18N
+ - src-openeuler/pytest
+ - src-openeuler/swig
+ - src-openeuler/lua-filesystem
+ - src-openeuler/perl-XML-XPath
+ - src-openeuler/pyflakes
+ - src-openeuler/dejagnu
+ - src-openeuler/python-testtools
+ - src-openeuler/jsoncpp
+ - src-openeuler/qt5-qtimageformats
+ - src-openeuler/perl-libwww-perl
+ - src-openeuler/qt5-qtserialport
+ - src-openeuler/python-distro
+ - src-openeuler/meson
+ - src-openeuler/perl-Data-Section
+ - src-openeuler/perl-ExtUtils-CBuilder
+ - src-openeuler/perl-Test-FailWarnings
+ - src-openeuler/qt5-qtbase
+ - src-openeuler/Cython
+ - src-openeuler/qpdf
+ - src-openeuler/python-pbr
+ - src-openeuler/cmake
+ - src-openeuler/papi
+ - src-openeuler/perl-Digest-HMAC
+ - src-openeuler/python-freezegun
+ - src-openeuler/nasm
+ - src-openeuler/perl-HTML-Tagset
+ - src-openeuler/python-hypothesis
+ - src-openeuler/openscap
+ - src-openeuler/gnome-common
+ - src-openeuler/python-packaging
+ - src-openeuler/qt5-qt3d
+ - src-openeuler/gspell
+ - src-openeuler/xcb-util-image
+ - src-openeuler/python-SecretStorage
+ - src-openeuler/python-bottle
+ - src-openeuler/perl-libintl-perl
+ - src-openeuler/python-greenlet
+ - src-openeuler/perl-Fedora-VSP
+ - src-openeuler/perl-Test-Needs
+ - src-openeuler/tinyxml2
+ - src-openeuler/python2-typing
+ - src-openeuler/libfabric
+ - src-openeuler/xorg-x11-util-macros
+ - src-openeuler/perl-Text-Tabs-Wrap
+ - src-openeuler/pangomm
+ - src-openeuler/perl-Font-TTF
+ - src-openeuler/LibRaw
+ - src-openeuler/perl-Socket6
+ - src-openeuler/perl-Test-NoWarnings
+ - src-openeuler/perl-Parse-Yapp
+ - src-openeuler/xcb-proto
+ - src-openeuler/flatpak
+ - src-openeuler/libell
+ - src-openeuler/perl-Carp-Clan
+ - src-openeuler/python-flit
+ - src-openeuler/qt5-qtlocation
+ - src-openeuler/libXp
+ - src-openeuler/python-configshell
+ - src-openeuler/python-werkzeug
+ - src-openeuler/python-mock
+ - src-openeuler/librdkafka
+ - src-openeuler/python-setuptools_scm
+ - src-openeuler/perl-HTML-Parser
+ - src-openeuler/python-pytoml
+ - src-openeuler/libsrtp
+ - src-openeuler/qt5-qtscript
+ - src-openeuler/python-gevent
+ - src-openeuler/libmemcached
+ - src-openeuler/trace-cmd
+ - src-openeuler/python-urlgrabber
+ - src-openeuler/python-markdown
+ - src-openeuler/python-nose
+ - src-openeuler/perl-HTTP-Cookies
+ - src-openeuler/perl-XML-NamespaceSupport
+ - src-openeuler/python-sphinx_rtd_theme
+ - src-openeuler/tbb
+ - src-openeuler/python-flask
+ - src-openeuler/qt5-qtwebchannel
+ - src-openeuler/gtest
+ - src-openeuler/cppcheck
+ - src-openeuler/nototools
+ - src-openeuler/qt5-qtserialbus
+ - src-openeuler/valgrind
+ - src-openeuler/qt5-qtgraphicaleffects
+ - src-openeuler/qt5-qtspeech
+ - src-openeuler/qt5-qtvirtualkeyboard
+ - src-openeuler/qt5dxcb-plugin
+ - src-openeuler/perl-Text-Template
+ - src-openeuler/perl-Mail-DKIM
+ - src-openeuler/cvs
+ - src-openeuler/perl-Net-DNS
+ - src-openeuler/python-construct
+ - src-openeuler/openblas
+ - src-openeuler/spice-protocol
+ - src-openeuler/libgnome-keyring
+ - src-openeuler/pyelftools
+ - src-openeuler/python-tornado
+ - src-openeuler/python-httpretty
+ - src-openeuler/egl-wayland
+ - src-openeuler/python-testscenarios
+ - src-openeuler/python-augeas
+ - src-openeuler/glib
+ - src-openeuler/perl-Data-Dump
+ - src-openeuler/help2man
+ - src-openeuler/python-pymongo
+ - src-openeuler/perl-YAML
+ - src-openeuler/sblim-cmpi-devel
+ - src-openeuler/gtk-vnc
+ - src-openeuler/perl-Sub-Name
+ - src-openeuler/perl-Sub-Quote
+ - src-openeuler/perl-Test-Fatal
+ - src-openeuler/perl-Test-InDistDir
+ - src-openeuler/perl-Test-Pod-Coverage
+ - src-openeuler/perl-Test-Requires
+ - src-openeuler/perl-Text-Glob
+ - src-openeuler/nim
+ - src-openeuler/erlang
+ - src-openeuler/erlang-getopt
+ - src-openeuler/erlang-neotoma
+ - src-openeuler/erlang-eflame
+ - src-openeuler/erlang-erlsyslog
+ - src-openeuler/erlang-mustache
+ - src-openeuler/erlang-lfe
+ - src-openeuler/erlang-rpm-macros
+ - src-openeuler/erlang-proper
+ - src-openeuler/erlang-hamcrest
+ - src-openeuler/erlang-gettext
+ - src-openeuler/erlang-erlydtl
+ - src-openeuler/erlang-sd_notify
+ - src-openeuler/erlang-meck
+- name: Runtime
+ repositories:
+ - src-openeuler/ibus-libpinyin
+ - src-openeuler/mesa-demos
+ - src-openeuler/tinycdb
+ - src-openeuler/freeglut
+ - src-openeuler/libmpcdec
+ - src-openeuler/mesa-libGLw
+ - src-openeuler/alsa-plugins
+ - src-openeuler/pkcs11-helper
+ - src-openeuler/rhash
+ - src-openeuler/libpeas
+ - src-openeuler/libnice
+ - src-openeuler/python-httplib2
+ - src-openeuler/vdo
+ - src-openeuler/protobuf-c
+ - src-openeuler/fftw
+ - src-openeuler/ibus-sayura
+ - src-openeuler/hdf5
+ - src-openeuler/libvdpau
+ - src-openeuler/ibus-m17n
+ - src-openeuler/xorg-x11-xtrans-devel
+ - src-openeuler/redland
+ - src-openeuler/libshout
+ - src-openeuler/ibus-typing-booster
+ - src-openeuler/librabbitmq
+ - src-openeuler/celt051
+ - src-openeuler/libva
+ - src-openeuler/libvoikko
+ - src-openeuler/jemalloc
+ - src-openeuler/libpng12
+ - src-openeuler/gsl
+ - src-openeuler/clutter-gst2
+ - src-openeuler/libiec61883
+ - src-openeuler/atlas
+ - src-openeuler/atkmm
+ - src-openeuler/freetds
+ - src-openeuler/kmod-kvdo
+ - src-openeuler/libao
+ - src-openeuler/glew
+ - src-openeuler/libstoragemgmt
+ - src-openeuler/qt
+ - src-openeuler/OpenEXR
+ - src-openeuler/motif
+ - src-openeuler/m2crypto
+ - src-openeuler/libsmi
+ - src-openeuler/usbmuxd
+ - src-openeuler/libavc1394
+ - src-openeuler/libieee1284
+- name: Networking
+ repositories:
+ - src-openeuler/apache-commons-net
+ - src-openeuler/glassfish-jax-rs-api
+ - src-openeuler/kronosnet
+ - src-openeuler/initscripts
+ - src-openeuler/http-parser
+ - src-openeuler/openvswitch
+ - src-openeuler/ldns
+ - src-openeuler/ipvsadm
+ - src-openeuler/unbound
+ - src-openeuler/ntp
+ - src-openeuler/neethi
+ - src-openeuler/openssh
+ - src-openeuler/NetworkManager
+ - src-openeuler/libserf
+ - src-openeuler/tipcutils
+ - src-openeuler/libmbim
+ - src-openeuler/libqmi
+ - src-openeuler/libnetfilter_queue
+ - src-openeuler/iptables
+ - src-openeuler/python-idna
+ - src-openeuler/GeoIP
+ - src-openeuler/xinetd
+ - src-openeuler/libssh2
+ - src-openeuler/nftables
+ - src-openeuler/bridge-utils
+ - src-openeuler/telnet
+ - src-openeuler/libassuan
+ - src-openeuler/iw
+ - src-openeuler/GeoIP-GeoLite-data
+ - src-openeuler/zd1211-firmware
+ - src-openeuler/ipmitool
+ - src-openeuler/ipset
+ - src-openeuler/iptraf-ng
+ - src-openeuler/ppp
+ - src-openeuler/tcpdump
+ - src-openeuler/traceroute
+ - src-openeuler/mtr
+ - src-openeuler/firewalld
+ - src-openeuler/arpwatch
+ - src-openeuler/iputils
+ - src-openeuler/iproute
+ - src-openeuler/nmap
+ - src-openeuler/httpd
+ - src-openeuler/network-manager-applet
+ - src-openeuler/libdnet
+ - src-openeuler/python-requests-ftp
+ - src-openeuler/ModemManager
+ - src-openeuler/procmail
+ - src-openeuler/tcp_wrappers
+ - src-openeuler/vconfig
+ - src-openeuler/lua-socket
+ - src-openeuler/mod_http2
+ - src-openeuler/libtirpc
+ - src-openeuler/ethtool
+ - src-openeuler/net-tools
+ - src-openeuler/hostname
+ - src-openeuler/openldap
+ - src-openeuler/ipcalc
+ - src-openeuler/vsftpd
+ - src-openeuler/samba
+ - src-openeuler/dnsmasq
+ - src-openeuler/notification-daemon
+ - src-openeuler/chrony
+ - src-openeuler/libproxy
+ - src-openeuler/ntpstat
+ - src-openeuler/libnetfilter_conntrack
+ - src-openeuler/postfix
+ - src-openeuler/libnl3
+ - src-openeuler/arptables
+ - src-openeuler/ftp
+ - src-openeuler/python-paste
+ - src-openeuler/libgcrypt
+ - src-openeuler/python-ipaddress
+ - src-openeuler/libpcap
+ - src-openeuler/xmlrpc-c
+ - src-openeuler/libssh
+ - src-openeuler/wget
+ - src-openeuler/nghttp2
+ - src-openeuler/libnfnetlink
+ - src-openeuler/curl
+ - src-openeuler/python-IPy
+ - src-openeuler/lftp
+ - src-openeuler/atmel-firmware
+ - src-openeuler/netcf
+ - src-openeuler/c-ares
+ - src-openeuler/python-backports-ssl_match_hostname
+ - src-openeuler/python-ntplib
+ - src-openeuler/libesmtp
+ - src-openeuler/geolite2
+ - src-openeuler/ebtables
+ - src-openeuler/dropwatch
+ - src-openeuler/bind
+ - src-openeuler/OpenIPMI
+ - src-openeuler/grpc
+ - src-openeuler/bind-dyndb-ldap
+ - src-openeuler/dhcp
+ - src-openeuler/glib-networking
+ - src-openeuler/net-snmp
+ - src-openeuler/icfg
+ - src-openeuler/python-requests
+ - src-openeuler/rpcbind
+ - src-openeuler/python-urllib3
+ - src-openeuler/iptstate
+ - src-openeuler/radvd
+ - src-openeuler/squid
+ - src-openeuler/python-html5lib
+ - src-openeuler/libnet
+ - src-openeuler/tftp
+ - src-openeuler/lldpad
+ - src-openeuler/b43-openfwwf
+ - src-openeuler/libndp
+ - src-openeuler/openslp
+ - src-openeuler/mobile-broadband-provider-info
+ - src-openeuler/xdp-cpumap-tc
+ - src-openeuler/appweb
+- name: Virt
+ repositories:
+ - src-openeuler/virt-viewer
+ - src-openeuler/virglrenderer
+ - src-openeuler/python-beautifulsoup4
+ - src-openeuler/libvirt-python
+ - src-openeuler/libvirt-glib
+ - src-openeuler/virt-manager
+ - src-openeuler/qemu
+ - src-openeuler/libvirt
+ - src-openeuler/edk2
+ - src-openeuler/perl-Sys-Virt
+ - src-openeuler/vmtop
+ - src-openeuler/stratovirt
+ - openeuler/qemu
+ - openeuler/libvirt
+ - openeuler/vmtop
+ - openeuler/stratovirt
+- name: Kernel
+ repositories:
+ - openeuler/kernel
+ - src-openeuler/kabi-dw
+ - src-openeuler/kernel
+- name: Others
+ repositories:
+ - src-openeuler/libopenraw
+ - src-openeuler/libzapojit
+ - src-openeuler/glassfish-jaxb-api
+ - src-openeuler/farstream02
+ - src-openeuler/fabtests
+ - src-openeuler/perl-Sub-Uplevel
+ - src-openeuler/python-pynacl
+ - src-openeuler/autotune
+ - src-openeuler/perl-Devel-Symdump
+ - src-openeuler/perl-Net-SMTP-SSL
+ - src-openeuler/gegl04
+ - src-openeuler/perl-GSSAPI
+ - src-openeuler/pyorbit
+ - src-openeuler/u2f-hidraw-policy
+ - src-openeuler/python-kitchen
+ - src-openeuler/python-hwdata
+ - src-openeuler/nilfs-utils
+ - src-openeuler/keyrings-filesystem
+ - src-openeuler/zerofree
+ - src-openeuler/hfsplus-tools
+ - src-openeuler/ImageMagick
+ - src-openeuler/gnome-disk-utility
+ - src-openeuler/twolame
+ - src-openeuler/perl-Mail-Sender
+ - src-openeuler/gnome-getting-started-docs
+ - src-openeuler/folks
+ - src-openeuler/perl-Encode-Detect
+ - src-openeuler/libsigcpp20
+ - src-openeuler/raptor2
+ - src-openeuler/clamav
+ - src-openeuler/opencc
+ - src-openeuler/python-joblib
+ - src-openeuler/python-threadpoolctl
+ - src-openeuler/perl-Class-Inspector
+ - src-openeuler/gavl
+ - src-openeuler/python-qt5
+ - src-openeuler/sox
+ - src-openeuler/perl-Crypt-OpenSSL-Bignum
+ - src-openeuler/qt-mobility
+ - src-openeuler/frei0r-plugins
+ - src-openeuler/xhtml1-dtds
+ - src-openeuler/perl-File-ShareDir-Install
+ - src-openeuler/capstone
+ - src-openeuler/osc
+ - src-openeuler/python-bcrypt
+ - src-openeuler/mpg123
+ - src-openeuler/libgovirt
+ - src-openeuler/PyQt4
+ - src-openeuler/perl-IO-Multiplex
+ - src-openeuler/libgnomeui
+ - src-openeuler/perl-Sys-MemInfo
+ - src-openeuler/python-cycler
+ - src-openeuler/libgdither
+ - src-openeuler/emacs-auctex
+ - src-openeuler/gtk
+ - src-openeuler/gtk4
+ - src-openeuler/gnome-font-viewer
+ - src-openeuler/perl-Net-CIDR-Lite
+ - src-openeuler/python-pandas
+ - src-openeuler/gnome-icon-theme-symbolic
+ - src-openeuler/sblim-sfcCommon
+ - src-openeuler/perl-Net-Server
+ - src-openeuler/jfsutils
+ - src-openeuler/python-reportlab
+ - src-openeuler/python-argcomplete
+ - src-openeuler/gnome-color-manager
+ - src-openeuler/python-xgboost
+ - src-openeuler/gnome-video-effects
+ - src-openeuler/nbdkit
+ - src-openeuler/perl-Pod-Coverage
+ - src-openeuler/gsound
+ - src-openeuler/libfprint
+ - src-openeuler/gtksourceview3
+ - src-openeuler/clucene
+ - src-openeuler/python-flask-restful
+ - src-openeuler/perl-Sys-CPU
+ - src-openeuler/marisa
+ - src-openeuler/festival-freebsoft-utils
+ - src-openeuler/python-dict2xml
+ - src-openeuler/hexedit
+ - src-openeuler/perl-File-ShareDir
+ - src-openeuler/gtkmm30
+ - src-openeuler/suitesparse
+ - src-openeuler/anthy
+ - src-openeuler/python-pillow
+ - src-openeuler/pcaudiolib
+ - src-openeuler/obs-build
+ - src-openeuler/urlview
+ - src-openeuler/perl-Sub-Exporter
+ - src-openeuler/qt5-qtenginio
+ - src-openeuler/flite
+ - src-openeuler/opusfile
+ - src-openeuler/breeze-icon-theme
+ - src-openeuler/dvdplusrw-tools
+ - src-openeuler/latex2html
+ - src-openeuler/dkms
+ - src-openeuler/glibmm24
+ - src-openeuler/python-aniso8601
+ - src-openeuler/libmad
+ - src-openeuler/python-parse
+ - src-openeuler/gimp
+ - src-openeuler/container-exception-logger
+ - src-openeuler/perl-Sub-Exporter-Progressive
+ - src-openeuler/qt5-qtwebkit
+ - src-openeuler/espeak-ng
+ - src-openeuler/irrlicht
+ - src-openeuler/proj
+ - src-openeuler/ucs-miscfixed-fonts
+ - src-openeuler/libwmf
+ - src-openeuler/qt5-qtwebengine
+ - src-openeuler/perl-String-CRC32
+ - src-openeuler/phonon
+ - src-openeuler/python-kiwisolver
+ - src-openeuler/kyotocabinet
+ - src-openeuler/python-humanize
+ - src-openeuler/gstreamer1-plugins-good
+ - src-openeuler/qt5-doc
+ - src-openeuler/xapian-core
+ - src-openeuler/babl
+ - src-openeuler/sip
+ - src-openeuler/lame
+ - src-openeuler/python-olefile
+ - src-openeuler/libburn
+ - src-openeuler/openEuler-latest-release
+ - src-openeuler/perl-SNMP_Session
+ - src-openeuler/gnome-packagekit
+ - src-openeuler/phodav
+ - src-openeuler/perl-Package-Generator
+ - src-openeuler/re2
+ - src-openeuler/gnome-python2
+ - src-openeuler/mt-st
+ - src-openeuler/cldr-emoji-annotation
+ - src-openeuler/qtwebkit
+ - src-openeuler/festival
+ - src-openeuler/gcab
+ - src-openeuler/gnome-icon-theme-extras
+ - src-openeuler/libmypaint
+ - src-openeuler/perl-Unicode-EastAsianWidth
+ - src-openeuler/perl-Tk
+ - src-openeuler/djvulibre
+ - src-openeuler/perl-BSD-Resource
+ - src-openeuler/conmon
+ - src-openeuler/nagios
+ - src-openeuler/libid3tag
+ - src-openeuler/libxmlb
+ - src-openeuler/libisofs
+ - src-openeuler/SDL2
+ - src-openeuler/mac-robber
+ - src-openeuler/libspiro
+ - src-openeuler/python-scikit-learn
+ - src-openeuler/python-scikit-optimize
+ - src-openeuler/assimp
+ - src-openeuler/poly2tri
+ - src-openeuler/libaesgm
+ - src-openeuler/aalib
+ - src-openeuler/afflib
+ - src-openeuler/apache2-mod_xforward
+ - src-openeuler/biosdevname
+ - src-openeuler/cloud-utils
+ - src-openeuler/debootstrap
+ - src-openeuler/dogtail
+ - src-openeuler/dpkg
+ - src-openeuler/fonts-rpm-macros
+ - src-openeuler/fuse-python
+ - src-openeuler/galera
+ - src-openeuler/gcc_secure
+ - src-openeuler/icoutils
+ - src-openeuler/libewf
+ - src-openeuler/libhbaapi
+ - src-openeuler/libhbalinux
+ - src-openeuler/libisoburn
+ - src-openeuler/libpinyin
+ - src-openeuler/libsodium
+ - src-openeuler/mcelog
+ - src-openeuler/mongo-c-driver
+ - src-openeuler/mypaint-brushes
+ - src-openeuler/mysql
+ - src-openeuler/py3c
+ - src-openeuler/beakerlib
+ - src-openeuler/oniguruma
+ - src-openeuler/perl-BSSolv
+ - src-openeuler/perl-Canary-Stability
+ - src-openeuler/perl-Business-ISBN
+ - src-openeuler/perl-Business-ISBN-Data
+ - src-openeuler/perl-Class-Method-Modifiers
+ - src-openeuler/perl-Class-XSAccessor
+ - src-openeuler/perl-Compress-Bzip2
+ - src-openeuler/perl-Config-General
+ - src-openeuler/perl-common-sense
+ - src-openeuler/perl-CPAN
+ - src-openeuler/perl-Crypt-DES
+ - src-openeuler/perl-Crypt-PasswdMD5
+ - src-openeuler/perl-Devel-GlobalDestruction
+ - src-openeuler/perl-Devel-Size
+ - src-openeuler/perl-Digest-SHA1
+ - src-openeuler/perl-Digest-SHA3
+ - src-openeuler/perl-Email-Date-Format
+ - src-openeuler/perl-ExtUtils-Config
+ - src-openeuler/perl-ExtUtils-Helpers
+ - src-openeuler/perl-ExtUtils-InstallPaths
+ - src-openeuler/perl-Module-Build-Tiny
+ - src-openeuler/perl-Readonly
+ - src-openeuler/perl-Test-LeakTrace
+ - src-openeuler/perl-File-Sync
+ - src-openeuler/perl-File-BaseDir
+ - src-openeuler/perl-File-Copy-Recursive
+ - src-openeuler/perl-File-DesktopEntry
+ - src-openeuler/perl-File-MimeInfo
+ - src-openeuler/perl-File-ReadBackwards
+ - src-openeuler/perl-File-pushd
+ - src-openeuler/perl-File-Remove
+ - src-openeuler/perl-GD
+ - src-openeuler/perl-GD-Barcode
+ - src-openeuler/perl-HTTP-Daemon
+ - src-openeuler/perl-Import-Into
+ - src-openeuler/perl-IO-All
+ - src-openeuler/perl-IO-stringy
+ - src-openeuler/perl-JSON-XS
+ - src-openeuler/perl-local-lib
+ - src-openeuler/perl-MIME-Lite
+ - src-openeuler/perl-MIME-Types
+ - src-openeuler/perl-Module-Install
+ - src-openeuler/perl-Module-Install-AuthorRequires
+ - src-openeuler/perl-Module-Install-AuthorTests
+ - src-openeuler/perl-Module-Install-AutoLicense
+ - src-openeuler/perl-Module-Install-GithubMeta
+ - src-openeuler/perl-Module-Install-ManifestSkip
+ - src-openeuler/perl-Net-LibIDN
+ - src-openeuler/perl-Net-SNMP
+ - src-openeuler/perl-Package-Constants
+ - src-openeuler/perl-Socket-MsgHdr
+ - src-openeuler/perl-Types-Serialiser
+ - src-openeuler/perl-Switch
+ - src-openeuler/perl-Test-RequiresInternet
+ - src-openeuler/perl-Unicode-LineBreak
+ - src-openeuler/perl-XML-Catalog
+ - src-openeuler/perl-XML-TokeParser
+ - src-openeuler/perl-YAML-LibYAML
+ - src-openeuler/php
+ - src-openeuler/PyPAM
+ - src-openeuler/pv
+ - src-openeuler/python-alsa
+ - src-openeuler/python-apipkg
+ - src-openeuler/python-tqdm
+ - src-openeuler/python-backports-unittest_mock
+ - src-openeuler/python-cached_property
+ - src-openeuler/python-cherrypy
+ - src-openeuler/python-constantly
+ - src-openeuler/python-contextlib2
+ - src-openeuler/python-docker
+ - src-openeuler/python-docker-pycreds
+ - src-openeuler/python-dockerpty
+ - src-openeuler/python-ecdsa
+ - src-openeuler/python-evdev
+ - src-openeuler/python-execnet
+ - src-openeuler/python-filelock
+ - src-openeuler/python-gflags
+ - src-openeuler/python-hamcrest
+ - src-openeuler/python-hyperlink
+ - src-openeuler/python-importlib-metadata
+ - src-openeuler/python-incremental
+ - src-openeuler/python-junitxml
+ - src-openeuler/python-keyczar
+ - src-openeuler/python-ldap
+ - src-openeuler/python-logutils
+ - src-openeuler/python-path
+ - src-openeuler/python-pecan
+ - src-openeuler/python-pytest-shutil
+ - src-openeuler/python-semantic_version
+ - src-openeuler/python-setuptools_git
+ - src-openeuler/python-simplegeneric
+ - src-openeuler/python-subprocess32
+ - src-openeuler/python-varlink
+ - src-openeuler/python-zipp
+ - src-openeuler/python-zope-interface
+ - src-openeuler/qhull
+ - src-openeuler/qt-assistant-adp
+ - src-openeuler/rear
+ - src-openeuler/redis
+ - src-openeuler/reiserfs-utils
+ - src-openeuler/resource-agents
+ - src-openeuler/rust-packaging
+ - src-openeuler/sassc
+ - src-openeuler/sleuthkit
+ - src-openeuler/sos
+ - src-openeuler/sphinx
+ - src-openeuler/tidy
+ - src-openeuler/tuna
+ - src-openeuler/uchardet
+ - src-openeuler/umoci
+ - src-openeuler/python-toml
+ - src-openeuler/python-mysqlclient
+ - src-openeuler/python-PyMySQL
+ - src-openeuler/python-rsa
+ - src-openeuler/python-ruamel-yaml
+ - src-openeuler/python-ruamel-yaml-clib
+ - src-openeuler/python-suds2
+ - src-openeuler/python-texttable
+ - src-openeuler/python-waitress
+ - src-openeuler/python-websocket-client
+ - src-openeuler/python-webtest
+ - src-openeuler/python-paste-deploy
+ - src-openeuler/python-pyquery
+ - src-openeuler/python-WSGIProxy2
+ - src-openeuler/python-webob
+ - src-openeuler/perl-Config-IniFiles
+ - src-openeuler/perl-CGI
+ - src-openeuler/boom-boot
+ - src-openeuler/python-memcached
+ - src-openeuler/python-psycopg2
+ - src-openeuler/seabios
+ - src-openeuler/procinfo
+ - src-openeuler/annobin
+ - src-openeuler/python-zope-event
+ - src-openeuler/rcs
+ - src-openeuler/rootsh
+ - src-openeuler/scsi-target-utils
+ - src-openeuler/python-cssselect
+ - src-openeuler/obs-bundled-gems
+ - src-openeuler/obs-server
+ - src-openeuler/obs-service-download_files
+ - src-openeuler/obs-service-extract_file
+ - src-openeuler/obs-service-rust2rpm
+ - src-openeuler/obs-service-set_version
+ - src-openeuler/passenger
+ - src-openeuler/papirus-icon-theme
+ - src-openeuler/onboard
+- name: System-tool
+ repositories:
+ - src-openeuler/argyllcms
+ - src-openeuler/watchdog
+ - src-openeuler/custodia
+ - src-openeuler/criu
+ - src-openeuler/liblognorm
+ - src-openeuler/mksh
+ - src-openeuler/libgphoto2
+ - src-openeuler/leveldb
+ - src-openeuler/rocksdb
+ - src-openeuler/fcoe-utils
+ - src-openeuler/ibus-hangul
+ - src-openeuler/colord-gtk
+ - src-openeuler/gutenprint
+ - src-openeuler/kiwi
+ - src-openeuler/overpass-fonts
+ - src-openeuler/libraw1394
+ - src-openeuler/ibus-table
+ - src-openeuler/wsmancli
+ - src-openeuler/v4l-utils
+ - src-openeuler/hplip
+ - src-openeuler/crda
+ - src-openeuler/tang
+ - src-openeuler/libotf
+ - src-openeuler/cups-filters
+ - src-openeuler/bolt
+ - src-openeuler/kde-filesystem
+ - src-openeuler/mtx
+ - src-openeuler/autofs
+ - src-openeuler/varnish
+ - src-openeuler/sil-abyssinica-fonts
+ - src-openeuler/b43-tools
+ - src-openeuler/ibus-table-array30
+ - src-openeuler/libreswan
+ - src-openeuler/logwatch
+ - src-openeuler/NetworkManager-libreswan
+ - src-openeuler/system-config-printer
+ - src-openeuler/microcode_ctl
+ - src-openeuler/openhpi
+ - src-openeuler/netlabel_tools
+ - src-openeuler/libguestfs
+ - src-openeuler/mod_fcgid
+ - src-openeuler/unicode-ucd
+ - src-openeuler/fakechroot
+ - src-openeuler/cim-schema
+ - src-openeuler/cgdcbxd
+ - src-openeuler/rng-tools
+ - src-openeuler/portreserve
+ - src-openeuler/mod_auth_gssapi
+ - src-openeuler/tog-pegasus
+ - src-openeuler/m17n-db
+ - src-openeuler/fwupd
+ - src-openeuler/libhangul
+ - src-openeuler/environment-modules
+ - src-openeuler/nvme-cli
+ - src-openeuler/sblim-sfcb
+ - src-openeuler/sblim-sfcc
+ - src-openeuler/bacula
+ - src-openeuler/mod_security
+ - src-openeuler/open-sans-fonts
+ - src-openeuler/liberation-fonts
+ - src-openeuler/freeradius
+ - src-openeuler/gfs2-utils
+ - src-openeuler/sane-backends
+ - src-openeuler/dejavu-fonts
+ - src-openeuler/speech-dispatcher
+ - src-openeuler/smc-fonts
+ - src-openeuler/sil-scheherazade-fonts
+ - src-openeuler/fontawesome-fonts
+ - src-openeuler/freeipmi
+ - src-openeuler/m17n-lib
+ - src-openeuler/libsmbios
+ - src-openeuler/pinfo
+ - src-openeuler/openwsman
+ - src-openeuler/fprintd
+ - src-openeuler/initial-setup
+ - src-openeuler/khmeros-fonts
+ - src-openeuler/julietaula-montserrat-fonts
+ - src-openeuler/usb_modeswitch
+ - src-openeuler/sanlock
+ - src-openeuler/mstflint
+ - src-openeuler/pps-tools
+ - src-openeuler/lklug-fonts
+ - src-openeuler/nvmetcli
+ - src-openeuler/hivex
+ - src-openeuler/scap-workbench
+ - src-openeuler/minicom
+ - src-openeuler/supermin
+ - src-openeuler/scap-security-guide
+ - src-openeuler/haproxy
+ - src-openeuler/entr
+ - src-openeuler/rfkill
+ - src-openeuler/partclone
+- name: Packaging
+ repositories:
+ - src-openeuler/pakchois
+ - src-openeuler/copy-jdk-configs
+ - src-openeuler/rpmdevtools
+ - src-openeuler/nginx
+ - src-openeuler/multilib-rpm-config
+ - src-openeuler/obs_meta
+- name: DB
+ repositories:
+ - src-openeuler/derby
+ - src-openeuler/gupnp-dlna
+ - src-openeuler/h2
+ - src-openeuler/postgresql-odbc
+ - src-openeuler/foomatic
+ - src-openeuler/foomatic-db
+ - src-openeuler/postgresql
+ - src-openeuler/unixODBC
+ - src-openeuler/firebird
+ - src-openeuler/mysql5
+ - src-openeuler/glassfish-legal
+ - src-openeuler/geolatte-geom
+- name: Base-service
+ repositories:
+ - openeuler/openEuler-rpm-config
+ - src-openeuler/acl
+ - src-openeuler/acpica-tools
+ - src-openeuler/adcli
+ - src-openeuler/aide
+ - src-openeuler/airline
+ - src-openeuler/ant-antunit
+ - src-openeuler/apache-commons-chain
+ - src-openeuler/apache-commons-el
+ - src-openeuler/apache-commons-javaflow
+ - src-openeuler/apache-commons-jci
+ - src-openeuler/apache-mina
+ - src-openeuler/apr
+ - src-openeuler/apr-util
+ - src-openeuler/argon2
+ - src-openeuler/aries-blueprint-annotation-api
+ - src-openeuler/aries-proxy-impl
+ - src-openeuler/arm-trusted-firmware
+ - src-openeuler/asciidoc
+ - src-openeuler/at
+ - src-openeuler/atf
+ - src-openeuler/audiofile
+ - src-openeuler/authd
+ - src-openeuler/authselect
+ - src-openeuler/autoconf
+ - src-openeuler/autogen
+ - src-openeuler/automake
+ - src-openeuler/axiom
+ - src-openeuler/babel
+ - src-openeuler/babeltrace
+ - src-openeuler/basesystem
+ - src-openeuler/bash
+ - src-openeuler/bash-completion
+ - src-openeuler/bc
+ - src-openeuler/binutils
+ - src-openeuler/bison
+ - src-openeuler/brotli
+ - src-openeuler/bubblewrap
+ - src-openeuler/bval
+ - src-openeuler/byte-buddy
+ - src-openeuler/bzip2
+ - src-openeuler/ca-certificates
+ - src-openeuler/castor
+ - src-openeuler/cbi-plugins
+ - src-openeuler/chkconfig
+ - src-openeuler/chrpath
+ - src-openeuler/clevis
+ - src-openeuler/cloud-init
+ - src-openeuler/conntrack-tools
+ - src-openeuler/cookcc
+ - src-openeuler/coreutils
+ - src-openeuler/cpio
+ - src-openeuler/cpp-hocon
+ - src-openeuler/crash
+ - src-openeuler/createrepo_c
+ - src-openeuler/cronie
+ - src-openeuler/crontabs
+ - src-openeuler/ctags
+ - src-openeuler/cxf
+ - src-openeuler/CUnit
+ - src-openeuler/cyrus-sasl
+ - src-openeuler/dbus
+ - src-openeuler/dbus-glib
+ - src-openeuler/dbus-python
+ - src-openeuler/dbxtool
+ - src-openeuler/deltarpm
+ - src-openeuler/dialog
+ - src-openeuler/diffstat
+ - src-openeuler/diffutils
+ - src-openeuler/ding-libs
+ - src-openeuler/disruptor
+ - src-openeuler/docbook-dtds
+ - src-openeuler/docbook-style-xsl
+ - src-openeuler/dos2unix
+ - src-openeuler/dracut
+ - src-openeuler/drpm
+ - src-openeuler/dtc
+ - src-openeuler/dwz
+ - src-openeuler/ed
+ - src-openeuler/edac-utils
+ - src-openeuler/elfutils
+ - src-openeuler/epydoc
+ - src-openeuler/exempi
+ - src-openeuler/expat
+ - src-openeuler/expect
+ - src-openeuler/facter
+ - src-openeuler/felix-osgi-compendium
+ - src-openeuler/felix-osgi-core
+ - src-openeuler/felix-osgi-foundation
+ - src-openeuler/felix-osgi-obr
+ - src-openeuler/felix-shell
+ - src-openeuler/findutils
+ - src-openeuler/fipscheck
+ - src-openeuler/flex
+ - src-openeuler/fpaste
+ - src-openeuler/fusesource-pom
+ - src-openeuler/future
+ - src-openeuler/gamin
+ - src-openeuler/gawk
+ - src-openeuler/gc
+ - src-openeuler/gemini-blueprint
+ - src-openeuler/gettext
+ - src-openeuler/ghostscript
+ - src-openeuler/git
+ - src-openeuler/glassfish-fastinfoset
+ - src-openeuler/glassfish-master-pom
+ - src-openeuler/glassfish-websocket-api
+ - src-openeuler/glassfish-ejb-api
+ - src-openeuler/gmime30
+ - src-openeuler/gnulib
+ - src-openeuler/gobject-introspection
+ - src-openeuler/gpgme
+ - src-openeuler/gphoto2
+ - src-openeuler/grep
+ - src-openeuler/groff
+ - src-openeuler/grubby
+ - src-openeuler/gssproxy
+ - src-openeuler/gupnp-av
+ - src-openeuler/gzip
+ - src-openeuler/haveged
+ - src-openeuler/hiredis
+ - src-openeuler/hppc
+ - src-openeuler/htrace
+ - src-openeuler/ima-evm-utils
+ - src-openeuler/iso-codes
+ - src-openeuler/isomd5sum
+ - src-openeuler/isorelax
+ - src-openeuler/istack-commons
+ - src-openeuler/ivtv-firmware
+ - src-openeuler/jansson
+ - src-openeuler/jdeparser1
+ - src-openeuler/jdom
+ - src-openeuler/jeromq
+ - src-openeuler/jose
+ - src-openeuler/jq
+ - src-openeuler/json-c
+ - src-openeuler/Judy
+ - src-openeuler/kdump-anaconda-addon
+ - src-openeuler/kexec-tools
+ - src-openeuler/kpatch
+ - src-openeuler/krb5
+ - src-openeuler/ksh
+ - src-openeuler/kyua
+ - src-openeuler/langtable
+ - src-openeuler/lasso
+ - src-openeuler/latrace
+ - src-openeuler/leatherman
+ - src-openeuler/leptonica
+ - src-openeuler/less
+ - src-openeuler/libbytesize
+ - src-openeuler/libcap-ng
+ - src-openeuler/libclc
+ - src-openeuler/libcomps
+ - src-openeuler/libconfig
+ - src-openeuler/libcroco
+ - src-openeuler/libdaemon
+ - src-openeuler/libdatrie
+ - src-openeuler/libdb
+ - src-openeuler/libdbi
+ - src-openeuler/libecap
+ - src-openeuler/libedit
+ - src-openeuler/libestr
+ - src-openeuler/libev
+ - src-openeuler/libevent
+ - src-openeuler/libfastjson
+ - src-openeuler/libffi
+ - src-openeuler/libgdiplus
+ - src-openeuler/libgexiv2
+ - src-openeuler/libgit2
+ - src-openeuler/libgit2-glib
+ - src-openeuler/libgsf
+ - src-openeuler/libIDL
+ - src-openeuler/libidn
+ - src-openeuler/libidn2
+ - src-openeuler/libkcapi
+ - src-openeuler/libksba
+ - src-openeuler/libmaxminddb
+ - src-openeuler/libmetalink
+ - src-openeuler/libmnl
+ - src-openeuler/libmodulemd
+ - src-openeuler/libmspack
+ - src-openeuler/libnetfilter_cthelper
+ - src-openeuler/libnetfilter_cttimeout
+ - src-openeuler/libnfs
+ - src-openeuler/libnftnl
+ - src-openeuler/libnma
+ - src-openeuler/libnsl2
+ - src-openeuler/liboauth
+ - src-openeuler/libomxil-bellagio
+ - src-openeuler/libosinfo
+ - src-openeuler/libpaper
+ - src-openeuler/libpipeline
+ - src-openeuler/libplist
+ - src-openeuler/libpsl
+ - src-openeuler/libquvi
+ - src-openeuler/libquvi-scripts
+ - src-openeuler/librepo
+ - src-openeuler/libreport
+ - src-openeuler/libsass
+ - src-openeuler/libseccomp
+ - src-openeuler/libsecret
+ - src-openeuler/libsigsegv
+ - src-openeuler/libtar
+ - src-openeuler/libtasn1
+ - src-openeuler/libtdb
+ - src-openeuler/libteam
+ - src-openeuler/libtheora
+ - src-openeuler/libtomcrypt
+ - src-openeuler/libtommath
+ - src-openeuler/libtool
+ - src-openeuler/libunistring
+ - src-openeuler/libunwind
+ - src-openeuler/libuser
+ - src-openeuler/libutempter
+ - src-openeuler/libverto
+ - src-openeuler/libvorbis
+ - src-openeuler/libxcrypt
+ - src-openeuler/libxml2
+ - src-openeuler/libxslt
+ - src-openeuler/libyaml
+ - src-openeuler/lmdb
+ - src-openeuler/logrotate
+ - src-openeuler/lshw
+ - src-openeuler/lsof
+ - src-openeuler/lua
+ - src-openeuler/luajit
+ - src-openeuler/lua-expat
+ - src-openeuler/lua-json
+ - src-openeuler/lua-lpeg
+ - src-openeuler/lucene4
+ - src-openeuler/lutok
+ - src-openeuler/lz4
+ - src-openeuler/lzo
+ - src-openeuler/lzop
+ - src-openeuler/m4
+ - src-openeuler/mailcap
+ - src-openeuler/make
+ - src-openeuler/man-db
+ - src-openeuler/man-pages
+ - src-openeuler/maven-release
+ - src-openeuler/maven-replacer
+ - src-openeuler/maven-shared
+ - src-openeuler/maven-verifier-plugin
+ - src-openeuler/mcpp
+ - src-openeuler/mecab
+ - src-openeuler/mercurial
+ - src-openeuler/mlocate
+ - src-openeuler/mod_security_crs
+ - src-openeuler/mongodb
+ - src-openeuler/mongo-java-driver2
+ - src-openeuler/mono
+ - src-openeuler/morfologik-stemming
+ - src-openeuler/mtdev
+ - src-openeuler/multithreadedtc
+ - src-openeuler/munge-maven-plugin
+ - src-openeuler/mvel
+ - src-openeuler/mysema-commons-lang
+ - src-openeuler/nailgun
+ - src-openeuler/ncompress
+ - src-openeuler/nettle
+ - src-openeuler/nss_nis
+ - src-openeuler/nss-pam-ldapd
+ - src-openeuler/ocl-icd
+ - src-openeuler/oddjob
+ - src-openeuler/openEuler-indexhtml
+ - src-openeuler/openEuler-logos
+ - src-openeuler/openEuler-release
+ - src-openeuler/openEuler-repos
+ - src-openeuler/openEuler-rpm-config
+ - src-openeuler/opensc
+ - src-openeuler/orc
+ - src-openeuler/osinfo-db
+ - src-openeuler/osinfo-db-tools
+ - src-openeuler/os-prober
+ - src-openeuler/ostree
+ - src-openeuler/p11-kit
+ - src-openeuler/paranamer
+ - src-openeuler/passwd
+ - src-openeuler/patch
+ - src-openeuler/pcre
+ - src-openeuler/pcre2
+ - src-openeuler/perl
+ - src-openeuler/perl-Digest
+ - src-openeuler/perl-ExtUtils-MakeMaker
+ - src-openeuler/perl-Mozilla-CA
+ - src-openeuler/perl-Storable
+ - src-openeuler/pigz
+ - src-openeuler/pkgconf
+ - src-openeuler/plexus-component-factories-pom
+ - src-openeuler/polkit
+ - src-openeuler/polkit-gnome
+ - src-openeuler/polkit-pkla-compat
+ - src-openeuler/popt
+ - src-openeuler/powermock
+ - src-openeuler/powertop
+ - src-openeuler/publicsuffix-list
+ - src-openeuler/pygobject3
+ - src-openeuler/pykickstart
+ - src-openeuler/pyliblzma
+ - src-openeuler/pyparsing
+ - src-openeuler/pyparted
+ - src-openeuler/pyserial
+ - src-openeuler/python3
+ - src-openeuler/python3-mallard-ducktype
+ - src-openeuler/python-asn1crypto
+ - src-openeuler/python-backports
+ - src-openeuler/python-beaker
+ - src-openeuler/python-cffi
+ - src-openeuler/python-chardet
+ - src-openeuler/python-cheetah
+ - src-openeuler/python-commonmark
+ - src-openeuler/python-cpio
+ - src-openeuler/python-crypto
+ - src-openeuler/python-cryptography
+ - src-openeuler/python-dateutil
+ - src-openeuler/python-decorator
+ - src-openeuler/python-docopt
+ - src-openeuler/python-enum34
+ - src-openeuler/python-google-apputils
+ - src-openeuler/python-gssapi
+ - src-openeuler/python-iniparse
+ - src-openeuler/python-inotify
+ - src-openeuler/python-jinja2
+ - src-openeuler/python-jsonpatch
+ - src-openeuler/python-jsonpointer
+ - src-openeuler/python-jsonschema
+ - src-openeuler/python-jwt
+ - src-openeuler/python-kmod
+ - src-openeuler/python-lhsmdu
+ - src-openeuler/python-linux-procfs
+ - src-openeuler/python-lxml
+ - src-openeuler/python-mako
+ - src-openeuler/python-markupsafe
+ - src-openeuler/python-meh
+ - src-openeuler/python-mox
+ - src-openeuler/python-oauthlib
+ - src-openeuler/python-ordered-set
+ - src-openeuler/python-pid
+ - src-openeuler/python-pip
+ - src-openeuler/python-ply
+ - src-openeuler/python-pocketlint
+ - src-openeuler/python-polib
+ - src-openeuler/python-prettytable
+ - src-openeuler/python-productmd
+ - src-openeuler/python-pyaml
+ - src-openeuler/python-pycparser
+ - src-openeuler/python-pycurl
+ - src-openeuler/python-pydbus
+ - src-openeuler/python-pysocks
+ - src-openeuler/python-pytest-cov
+ - src-openeuler/python-pytest-expect
+ - src-openeuler/python-pytest-fixture-config
+ - src-openeuler/python-pytest-mock
+ - src-openeuler/python-pytest-virtualenv
+ - src-openeuler/python-pyudev
+ - src-openeuler/python-qrcode
+ - src-openeuler/python-recommonmark
+ - src-openeuler/python-redis
+ - src-openeuler/python-repoze-lru
+ - src-openeuler/python-requests-file
+ - src-openeuler/python-rpm-generators
+ - src-openeuler/python-schedutils
+ - src-openeuler/python-setuptools
+ - src-openeuler/python-simpleline
+ - src-openeuler/python-six
+ - src-openeuler/python-slip
+ - src-openeuler/python-sphinxcontrib-spelling
+ - src-openeuler/python-systemd
+ - src-openeuler/python-tempita
+ - src-openeuler/python-u-msgpack-python
+ - src-openeuler/python-webencodings
+ - src-openeuler/pyxattr
+ - src-openeuler/qdox
+ - src-openeuler/qpid-proton
+ - src-openeuler/randomizedtesting
+ - src-openeuler/rapidjson
+ - src-openeuler/rarian
+ - src-openeuler/rasdaemon
+ - src-openeuler/readline
+ - src-openeuler/realmd
+ - src-openeuler/recode
+ - src-openeuler/replacer
+ - src-openeuler/rmic-maven-plugin
+ - src-openeuler/rootfiles
+ - src-openeuler/rpm
+ - src-openeuler/rpmrebuild
+ - src-openeuler/rsync
+ - src-openeuler/rsyslog
+ - src-openeuler/screen
+ - src-openeuler/sed
+ - src-openeuler/setools
+ - src-openeuler/setroubleshoot-plugins
+ - src-openeuler/setup
+ - src-openeuler/sgabios
+ - src-openeuler/sgpio
+ - src-openeuler/shadow
+ - src-openeuler/sharutils
+ - src-openeuler/shim
+ - src-openeuler/si-units
+ - src-openeuler/slang
+ - src-openeuler/snakeyaml
+ - src-openeuler/snappy
+ - src-openeuler/snappy-java
+ - src-openeuler/sombok
+ - src-openeuler/speex
+ - src-openeuler/speexdsp
+ - src-openeuler/sscg
+ - src-openeuler/sssd
+ - src-openeuler/star
+ - src-openeuler/startup-notification
+ - src-openeuler/stringtemplate4
+ - src-openeuler/subversion
+ - src-openeuler/sudo
+ - src-openeuler/sushi
+ - src-openeuler/symlinks
+ - src-openeuler/sysstat
+ - src-openeuler/systemd
+ - src-openeuler/tar
+ - src-openeuler/tcl
+ - src-openeuler/tcllib
+ - src-openeuler/tcsh
+ - src-openeuler/TeXamator
+ - src-openeuler/thrift
+ - src-openeuler/time
+ - src-openeuler/timedatex
+ - src-openeuler/tmpwatch
+ - src-openeuler/tng
+ - src-openeuler/tokyocabinet
+ - src-openeuler/tomcatjss
+ - src-openeuler/totem
+ - src-openeuler/totem-pl-parser
+ - src-openeuler/tracker
+ - src-openeuler/tracker-miners
+ - src-openeuler/trousers
+ - src-openeuler/tuscany-sdo-java
+ - src-openeuler/umockdev
+ - src-openeuler/uname-build-checks
+ - src-openeuler/unicode-emoji
+ - src-openeuler/unique
+ - src-openeuler/unit-api
+ - src-openeuler/univocity-parsers
+ - src-openeuler/unzip
+ - src-openeuler/uom-lib
+ - src-openeuler/uom-parent
+ - src-openeuler/uom-systems
+ - src-openeuler/usermode
+ - src-openeuler/ustr
+ - src-openeuler/utf8proc
+ - src-openeuler/uthash
+ - src-openeuler/util-linux
+ - src-openeuler/vboot-utils
+ - src-openeuler/vim
+ - src-openeuler/volume_key
+ - src-openeuler/vulkan-headers
+ - src-openeuler/vulkan-loader
+ - src-openeuler/which
+ - src-openeuler/words
+ - src-openeuler/wpa_supplicant
+ - src-openeuler/xalan-j2
+ - src-openeuler/xmlsec1
+ - src-openeuler/xerces-j2
+ - src-openeuler/xmlstarlet
+ - src-openeuler/xmlto
+ - src-openeuler/xml-commons-resolver
+ - src-openeuler/xz
+ - src-openeuler/yajl
+ - src-openeuler/yaml-cpp
+ - src-openeuler/yaml-cpp03
+ - src-openeuler/yasm
+ - src-openeuler/zip
+ - src-openeuler/zlib
+ - src-openeuler/zopfli
+ - src-openeuler/zsh
+ - src-openeuler/zstd
+ - src-openeuler/zziplib
+- name: Container
+ repositories:
+ - openeuler/kata_integration
+ - src-openeuler/kata-micro-kernel
+ - src-openeuler/jboss-parent
+ - src-openeuler/clibcni
+ - src-openeuler/docker-client-java
+ - src-openeuler/runc
+ - src-openeuler/virt-what
+ - src-openeuler/containerd
+ - src-openeuler/iSulad-img
+ - src-openeuler/lcr
+ - src-openeuler/protobuf
+ - src-openeuler/iSulad
+ - src-openeuler/podman
+ - src-openeuler/skopeo
+ - src-openeuler/kata-shim
+ - src-openeuler/kata_integration
+ - src-openeuler/busybox
+ - src-openeuler/container-selinux
+ - src-openeuler/lxc
+ - src-openeuler/docker
+ - src-openeuler/kata-runtime
+ - src-openeuler/libevhtp
+ - src-openeuler/kata-proxy
+ - src-openeuler/lxcfs
+ - src-openeuler/containernetworking-plugins
+ - src-openeuler/libcgroup
+ - src-openeuler/kata-agent
+ - src-openeuler/libnetwork
+ - src-openeuler/kubernetes
+ - src-openeuler/docker-compose
+- name: Compiler
+ repositories:
+ - src-openeuler/gcc
+ - src-openeuler/llvm
+ - src-openeuler/clang
+ - src-openeuler/compiler-rt
+ - src-openeuler/jtreg
+ - src-openeuler/openjdk-1.8.0
+ - src-openeuler/openjdk-11
+ - src-openeuler/openjdk-latest
+ - src-openeuler/openjfx8
+ - src-openeuler/openjfx11
+ - src-openeuler/icedtea-web
+ - src-openeuler/rust
+ - openeuler/bishengjdk-8
+ - openeuler/bishengjdk-11
+- name: Storage
+ repositories:
+ - src-openeuler/system-storage-manager
+ - src-openeuler/gom
+ - src-openeuler/parted
+ - src-openeuler/iprutils
+ - src-openeuler/ndctl
+ - src-openeuler/fuse
+ - src-openeuler/tree
+ - src-openeuler/sg3_utils
+ - src-openeuler/mdadm
+ - src-openeuler/python-configobj
+ - src-openeuler/btrfs-progs
+ - src-openeuler/python-rtslib
+ - src-openeuler/ccid
+ - src-openeuler/attr
+ - src-openeuler/smartmontools
+ - src-openeuler/luksmeta
+ - src-openeuler/nfs4-acl-tools
+ - src-openeuler/cryptsetup
+ - src-openeuler/udisks2
+ - src-openeuler/mtools
+ - src-openeuler/libblockdev
+ - src-openeuler/libldm
+ - src-openeuler/sdparm
+ - src-openeuler/perl-DBD-SQLite
+ - src-openeuler/libpciaccess
+ - src-openeuler/iotop
+ - src-openeuler/xfsdump
+ - src-openeuler/open-iscsi
+ - src-openeuler/libaio
+ - src-openeuler/libusbmuxd
+ - src-openeuler/file
+ - src-openeuler/e2fsprogs
+ - src-openeuler/gdbm
+ - src-openeuler/thin-provisioning-tools
+ - src-openeuler/dosfstools
+ - src-openeuler/libusbx
+ - src-openeuler/mariadb
+ - src-openeuler/pciutils
+ - src-openeuler/blktrace
+ - src-openeuler/usbredir
+ - src-openeuler/lvm2
+ - src-openeuler/dmraid
+ - src-openeuler/libtalloc
+ - src-openeuler/perl-DBD-MySQL
+ - src-openeuler/quota
+ - src-openeuler/mariadb-connector-c
+ - src-openeuler/xfsprogs
+ - src-openeuler/nfs-utils
+ - src-openeuler/libtevent
+ - src-openeuler/gdisk
+ - src-openeuler/glusterfs
+ - src-openeuler/multipath-tools
+ - src-openeuler/sysfsutils
+ - src-openeuler/sqlite
+ - src-openeuler/smp_utils
+ - src-openeuler/squashfs-tools
+ - src-openeuler/libiscsi
+ - src-openeuler/fxload
+ - src-openeuler/libusb
+ - src-openeuler/hdparm
+ - src-openeuler/pcsc-lite
+ - src-openeuler/filesystem
+ - src-openeuler/cifs-utils
+ - src-openeuler/cachefilesd
+ - src-openeuler/usbutils
+ - src-openeuler/lsscsi
+ - src-openeuler/open-isns
+ - openeuler/memory-scan
+ - src-openeuler/fastdfs
+ - src-openeuler/libfastcommon
+ - src-openeuler/DCache
+ - src-openeuler/s3fs-fuse
+- name: Desktop
+ repositories:
+ - src-openeuler/abattis-cantarell-fonts
+ - src-openeuler/accountsservice
+ - src-openeuler/adobe-mappings-cmap
+ - src-openeuler/adobe-mappings-pdf
+ - src-openeuler/adwaita-icon-theme
+ - src-openeuler/adwaita-qt
+ - src-openeuler/at-spi2-atk
+ - src-openeuler/at-spi2-core
+ - src-openeuler/atk
+ - src-openeuler/augeas
+ - src-openeuler/avahi
+ - src-openeuler/bluez
+ - src-openeuler/bpg-fonts
+ - src-openeuler/brltty
+ - src-openeuler/cairo
+ - src-openeuler/cairomm
+ - src-openeuler/cdparanoia
+ - src-openeuler/CharLS
+ - src-openeuler/cheese
+ - src-openeuler/cjkuni-ukai-fonts
+ - src-openeuler/clutter
+ - src-openeuler/clutter-gst3
+ - src-openeuler/clutter-gtk
+ - src-openeuler/cockpit
+ - src-openeuler/cogl
+ - src-openeuler/color-filesystem
+ - src-openeuler/colord
+ - src-openeuler/comps-extras
+ - src-openeuler/cups
+ - src-openeuler/cups-pk-helper
+ - src-openeuler/dconf
+ - src-openeuler/dconf-editor
+ - src-openeuler/desktop-file-utils
+ - src-openeuler/disomaster
+ - src-openeuler/emacs
+ - src-openeuler/enchant
+ - src-openeuler/epiphany
+ - src-openeuler/evolution-data-server
+ - src-openeuler/exiv2
+ - src-openeuler/fltk
+ - src-openeuler/fontconfig
+ - src-openeuler/fontpackages
+ - src-openeuler/freetype
+ - src-openeuler/fribidi
+ - src-openeuler/fros
+ - src-openeuler/GConf2
+ - src-openeuler/gcr
+ - src-openeuler/gd
+ - src-openeuler/gdk-pixbuf2
+ - src-openeuler/gdm
+ - src-openeuler/geoclue2
+ - src-openeuler/geocode-glib
+ - src-openeuler/giflib
+ - src-openeuler/gio-qt
+ - src-openeuler/gjs
+ - src-openeuler/glade
+ - src-openeuler/glib2
+ - src-openeuler/gnome-abrt
+ - src-openeuler/gnome-bluetooth
+ - src-openeuler/gnome-boxes
+ - src-openeuler/gnome-clocks
+ - src-openeuler/gnome-contacts
+ - src-openeuler/gnome-dictionary
+ - src-openeuler/gnome-doc-utils
+ - src-openeuler/gnome-icon-theme
+ - src-openeuler/gnome-initial-setup
+ - src-openeuler/gnome-keyring
+ - src-openeuler/gnome-menus
+ - src-openeuler/gnome-screenshot
+ - src-openeuler/gnome-session
+ - src-openeuler/gnome-settings-daemon
+ - src-openeuler/gnome-shell
+ - src-openeuler/gnome-shell-extensions
+ - src-openeuler/gnome-software
+ - src-openeuler/gnome-system-monitor
+ - src-openeuler/gnome-terminal
+ - src-openeuler/gnu-free-fonts
+ - src-openeuler/google-croscore-fonts
+ - src-openeuler/google-droid-fonts
+ - src-openeuler/google-noto-cjk-fonts
+ - src-openeuler/google-noto-emoji-fonts
+ - src-openeuler/gpm
+ - src-openeuler/graphite2
+ - src-openeuler/graphviz
+ - src-openeuler/grilo
+ - src-openeuler/gsettings-desktop-schemas
+ - src-openeuler/gsm
+ - src-openeuler/gstreamer1
+ - src-openeuler/gstreamer1-plugins-base
+ - src-openeuler/gtk2
+ - src-openeuler/gtk3
+ - src-openeuler/gubbi-fonts
+ - src-openeuler/guile
+ - src-openeuler/gv
+ - src-openeuler/gvfs
+ - src-openeuler/harfbuzz
+ - src-openeuler/hicolor-icon-theme
+ - src-openeuler/hunspell
+ - src-openeuler/hunspell-en
+ - src-openeuler/hyperscan
+ - src-openeuler/ibus
+ - src-openeuler/ibus-libzhuyin
+ - src-openeuler/icu
+ - src-openeuler/imake
+ - src-openeuler/jbig2dec
+ - src-openeuler/jbigkit
+ - src-openeuler/jomolhari-fonts
+ - src-openeuler/json-glib
+ - src-openeuler/jxrlib
+ - src-openeuler/kacst-fonts
+ - src-openeuler/kbd
+ - src-openeuler/kde-settings
+ - src-openeuler/keybinder3
+ - src-openeuler/kurdit-unikurd-web-fonts
+ - src-openeuler/lato-fonts
+ - src-openeuler/lcms2
+ - src-openeuler/libappindicator
+ - src-openeuler/libarchive
+ - src-openeuler/libart_lgpl
+ - src-openeuler/libasyncns
+ - src-openeuler/libatasmart
+ - src-openeuler/libbluray
+ - src-openeuler/libbonobo
+ - src-openeuler/libbonoboui
+ - src-openeuler/libcacard
+ - src-openeuler/libcanberra
+ - src-openeuler/libcdio
+ - src-openeuler/libcdio-paranoia
+ - src-openeuler/libdazzle
+ - src-openeuler/libdmx
+ - src-openeuler/libdrm
+ - src-openeuler/libepoxy
+ - src-openeuler/libexif
+ - src-openeuler/libfontenc
+ - src-openeuler/libgdata
+ - src-openeuler/libgee
+ - src-openeuler/libglade2
+ - src-openeuler/libglvnd
+ - src-openeuler/libgpg-error
+ - src-openeuler/libgtop2
+ - src-openeuler/libgudev
+ - src-openeuler/libgusb
+ - src-openeuler/libgweather
+ - src-openeuler/libgxps
+ - src-openeuler/libical
+ - src-openeuler/libICE
+ - src-openeuler/libimobiledevice
+ - src-openeuler/libiptcdata
+ - src-openeuler/libisal
+ - src-openeuler/libjpeg-turbo
+ - src-openeuler/libldb
+ - src-openeuler/libmatchbox
+ - src-openeuler/libmediaart
+ - src-openeuler/libmediainfo
+ - src-openeuler/libmng
+ - src-openeuler/libnotify
+ - src-openeuler/libpng
+ - src-openeuler/librsvg2
+ - src-openeuler/libsexy
+ - src-openeuler/libSM
+ - src-openeuler/libsoup
+ - src-openeuler/libtiff
+ - src-openeuler/libtimezonemap
+ - src-openeuler/libwebp
+ - src-openeuler/libwnck3
+ - src-openeuler/libX11
+ - src-openeuler/libx86emu
+ - src-openeuler/libXau
+ - src-openeuler/libXaw
+ - src-openeuler/libxcb
+ - src-openeuler/libXcomposite
+ - src-openeuler/libXcursor
+ - src-openeuler/libXdamage
+ - src-openeuler/libXdmcp
+ - src-openeuler/libXext
+ - src-openeuler/libXfixes
+ - src-openeuler/libXfont2
+ - src-openeuler/libXft
+ - src-openeuler/libXi
+ - src-openeuler/libXinerama
+ - src-openeuler/libxkbcommon
+ - src-openeuler/libxkbfile
+ - src-openeuler/libxklavier
+ - src-openeuler/libXmu
+ - src-openeuler/libXpm
+ - src-openeuler/libXrandr
+ - src-openeuler/libXrender
+ - src-openeuler/libXres
+ - src-openeuler/libxshmfence
+ - src-openeuler/libXt
+ - src-openeuler/libXtst
+ - src-openeuler/libXv
+ - src-openeuler/libXvMC
+ - src-openeuler/libXxf86dga
+ - src-openeuler/libXxf86misc
+ - src-openeuler/libXxf86vm
+ - src-openeuler/libzen
+ - src-openeuler/lxsession
+ - src-openeuler/madan-fonts
+ - src-openeuler/mailx
+ - src-openeuler/mesa
+ - src-openeuler/mesa-libGLU
+ - src-openeuler/metacity
+ - src-openeuler/mozilla-filesystem
+ - src-openeuler/mozjs52
+ - src-openeuler/mozjs60
+ - src-openeuler/mozjs68
+ - src-openeuler/nafees-web-naskh-fonts
+ - src-openeuler/navilu-fonts
+ - src-openeuler/ncurses
+ - src-openeuler/newt
+ - src-openeuler/openbox
+ - src-openeuler/openjpeg
+ - src-openeuler/openjpeg2
+ - src-openeuler/orca
+ - src-openeuler/PackageKit
+ - src-openeuler/PackageKit-Qt
+ - src-openeuler/paktype-naqsh-fonts
+ - src-openeuler/paktype-naskh-basic-fonts
+ - src-openeuler/paktype-tehreer-fonts
+ - src-openeuler/pango
+ - src-openeuler/paratype-pt-sans-fonts
+ - src-openeuler/pinentry
+ - src-openeuler/pipewire
+ - src-openeuler/pixman
+ - src-openeuler/plymouth
+ - src-openeuler/poppler
+ - src-openeuler/poppler-data
+ - src-openeuler/pyatspi
+ - src-openeuler/pycairo
+ - src-openeuler/python-coverage
+ - src-openeuler/python-dmidecode
+ - src-openeuler/python-ethtool
+ - src-openeuler/pytz
+ - src-openeuler/qrencode
+ - src-openeuler/qt-settings
+ - src-openeuler/qt5
+ - src-openeuler/rest
+ - src-openeuler/rtkit
+ - src-openeuler/saab-fonts
+ - src-openeuler/samyak-fonts
+ - src-openeuler/satyr
+ - src-openeuler/sbc
+ - src-openeuler/seahorse
+ - src-openeuler/sendmail
+ - src-openeuler/setserial
+ - src-openeuler/sgml-common
+ - src-openeuler/shared-mime-info
+ - src-openeuler/sil-nuosu-fonts
+ - src-openeuler/sil-padauk-fonts
+ - src-openeuler/sound-theme-freedesktop
+ - src-openeuler/source-highlight
+ - src-openeuler/spice
+ - src-openeuler/spice-gtk
+ - src-openeuler/spice-vdagent
+ - src-openeuler/stix-fonts
+ - src-openeuler/switcheroo-control
+ - src-openeuler/sysprof
+ - src-openeuler/taglib
+ - src-openeuler/telepathy-filesystem
+ - src-openeuler/telepathy-glib
+ - src-openeuler/telepathy-logger
+ - src-openeuler/texinfo
+ - src-openeuler/thai-scalable-fonts
+ - src-openeuler/tibetan-machine-uni-fonts
+ - src-openeuler/tigervnc
+ - src-openeuler/tk
+ - src-openeuler/tmux
+ - src-openeuler/urw-base35-fonts
+ - src-openeuler/vino
+ - src-openeuler/wayland
+ - src-openeuler/webkit2gtk3
+ - src-openeuler/webrtc-audio-processing
+ - src-openeuler/woff2
+ - src-openeuler/wqy-microhei-fonts
+ - src-openeuler/wqy-zenhei-fonts
+ - src-openeuler/wxGTK3
+ - src-openeuler/x265
+ - src-openeuler/x3270
+ - src-openeuler/Xaw3d
+ - src-openeuler/xcb-util
+ - src-openeuler/xdg-desktop-portal
+ - src-openeuler/xdg-user-dirs
+ - src-openeuler/xdg-user-dirs-gtk
+ - src-openeuler/xdg-utils
+ - src-openeuler/xkeyboard-config
+ - src-openeuler/xorg-x11-apps
+ - src-openeuler/xorg-x11-drivers
+ - src-openeuler/xorg-x11-drv-ati
+ - src-openeuler/xorg-x11-drv-dummy
+ - src-openeuler/xorg-x11-drv-evdev
+ - src-openeuler/xorg-x11-drv-fbdev
+ - src-openeuler/xorg-x11-drv-intel
+ - src-openeuler/xorg-x11-drv-libinput
+ - src-openeuler/xorg-x11-drv-nouveau
+ - src-openeuler/xorg-x11-drv-qxl
+ - src-openeuler/xorg-x11-drv-v4l
+ - src-openeuler/xorg-x11-drv-vesa
+ - src-openeuler/xorg-x11-drv-vmware
+ - src-openeuler/xorg-x11-drv-wacom
+ - src-openeuler/xorg-x11-font-utils
+ - src-openeuler/xorg-x11-fonts
+ - src-openeuler/xorg-x11-server
+ - src-openeuler/xorg-x11-server-utils
+ - src-openeuler/xorg-x11-utils
+ - src-openeuler/xorg-x11-xauth
+ - src-openeuler/xorg-x11-xbitmaps
+ - src-openeuler/xorg-x11-xinit
+ - src-openeuler/xorg-x11-xkb-utils
+ - src-openeuler/xrestop
+ - src-openeuler/xterm
+ - src-openeuler/xvattr
+ - src-openeuler/yelp
+ - src-openeuler/yelp-xsl
+ - src-openeuler/yp-tools
+ - src-openeuler/ypbind
+ - src-openeuler/ypserv
+ - src-openeuler/zenity
+- name: Computing
+ repositories:
+ - src-openeuler/jamm
+ - src-openeuler/double-conversion
+ - src-openeuler/ps_mem
+ - src-openeuler/libqb
+ - src-openeuler/memkind
+ - src-openeuler/dyninst
+ - src-openeuler/libevdev
+ - src-openeuler/nspr
+ - src-openeuler/libatomic_ops
+ - src-openeuler/lm_sensors
+ - src-openeuler/lttng-ust
+ - src-openeuler/hwdata
+ - src-openeuler/irqbalance
+ - src-openeuler/procps-ng
+ - src-openeuler/userspace-rcu
+ - src-openeuler/linux-firmware
+ - src-openeuler/mpfr
+ - src-openeuler/libinput
+ - src-openeuler/boost
+ - src-openeuler/psmisc
+ - src-openeuler/numad
+ - src-openeuler/libthai
+ - src-openeuler/kmod
+ - src-openeuler/lockdev
+ - src-openeuler/hwinfo
+ - src-openeuler/gdb
+ - src-openeuler/libipt
+ - src-openeuler/libsamplerate
+ - src-openeuler/gperftools
+ - src-openeuler/libogg
+ - src-openeuler/pulseaudio
+ - src-openeuler/libsndfile
+ - src-openeuler/tzdata
+ - src-openeuler/flac
+ - src-openeuler/upower
+ - src-openeuler/alsa-lib
+ - src-openeuler/gmp
+ - src-openeuler/alsa-firmware
+ - src-openeuler/numactl
+ - src-openeuler/glibc
+ - src-openeuler/libijs
+ - src-openeuler/libmpc
+ - src-openeuler/npth
+ - src-openeuler/acpid
+ - src-openeuler/ORBit2
+ - src-openeuler/libwacom
+ - src-openeuler/i2c-tools
+ - src-openeuler/strace
+ - src-openeuler/shapelib
+ - src-openeuler/tuned
+ - src-openeuler/systemtap
+ - src-openeuler/alsa-tools
+ - src-openeuler/libvisual
+ - src-openeuler/dmidecode
+ - src-openeuler/opus
+ - src-openeuler/libhugetlbfs
+- name: sig-Community
+ repositories:
+ - openeuler/community
+ - openeuler/blog
+- name: A-Tune
+ repositories:
+ - openeuler/A-Tune
+ - openeuler/prefetch_tuning
+ - src-openeuler/A-Tune
+ - src-openeuler/prefetch_tuning
+ - openeuler/wisdom-advisor
+ - src-openeuler/wisdom-advisor
+- name: kae
+ repositories:
+ - openeuler/kae_driver
+ - openeuler/libkae
+ - openeuler/libwd
+ - src-openeuler/kae_driver
+ - src-openeuler/libkae
+ - src-openeuler/libwd
+- name: iSulad
+ repositories:
+ - openeuler/iSulad
+ - openeuler/lcr
+ - openeuler/clibcni
+ - openeuler/iSulad-img
+ - openeuler/authz
+ - openeuler/syscontainer-tools
+ - openeuler/lxcfs-tools
+ - openeuler/async-libfuse
+ - openeuler/isula-build
+ - openeuler/isula-transform
+ - src-openeuler/authz
+ - src-openeuler/syscontainer-tools
+ - src-openeuler/lxcfs-tools
+ - src-openeuler/isula-build
+ - src-openeuler/isula-transform
+ - src-openeuler/libwebsockets
+- name: sig-Java
+ repositories:
+ - openeuler/Java-Packages
+ - src-openeuler/aesh
+ - src-openeuler/android-json-org-java
+ - src-openeuler/annotation-indexer
+ - src-openeuler/ant
+ - src-openeuler/ant-contrib
+ - src-openeuler/antlr3
+ - src-openeuler/aopalliance
+ - src-openeuler/apache-commons-cli
+ - src-openeuler/apache-commons-compress
+ - src-openeuler/apache-commons-configuration
+ - src-openeuler/apache-commons-discovery
+ - src-openeuler/apache-commons-exec
+ - src-openeuler/apache-commons-io
+ - src-openeuler/apache-commons-jxpath
+ - src-openeuler/apache-commons-lang3
+ - src-openeuler/apache-commons-ognl
+ - src-openeuler/apache-commons-parent
+ - src-openeuler/apache-ivy
+ - src-openeuler/apache-parent
+ - src-openeuler/apache-resource-bundles
+ - src-openeuler/apacheds
+ - src-openeuler/apiguardian
+ - src-openeuler/aqute-bnd
+ - src-openeuler/arquillian-core
+ - src-openeuler/artemis
+ - src-openeuler/aspectjweaver
+ - src-openeuler/atinject
+ - src-openeuler/avalon-framework
+ - src-openeuler/avalon-logkit
+ - src-openeuler/BareBonesBrowserLaunch
+ - src-openeuler/bean-validation-api
+ - src-openeuler/bsh
+ - src-openeuler/buildnumber-maven-plugin
+ - src-openeuler/byaccj
+ - src-openeuler/byteman
+ - src-openeuler/c3p0
+ - src-openeuler/cassandra-java-driver
+ - src-openeuler/cdi-api
+ - src-openeuler/classmate
+ - src-openeuler/codehaus-parent
+ - src-openeuler/codemodel
+ - src-openeuler/cpptasks
+ - src-openeuler/cxf-build-utils
+ - src-openeuler/cxf-xjc-utils
+ - src-openeuler/dain-snappy
+ - src-openeuler/datanucleus-api-jdo
+ - src-openeuler/datanucleus-core
+ - src-openeuler/datanucleus-maven-parent
+ - src-openeuler/datanucleus-rdbms
+ - src-openeuler/dnsjava
+ - src-openeuler/dom4j
+ - src-openeuler/easymock
+ - src-openeuler/eclipse-cdt
+ - src-openeuler/eclipse-ecf
+ - src-openeuler/eclipse-egit
+ - src-openeuler/eclipse-emf
+ - src-openeuler/eclipse-gef
+ - src-openeuler/eclipse-launchbar
+ - src-openeuler/eclipse-license
+ - src-openeuler/eclipse-linuxtools
+ - src-openeuler/eclipse-m2e-workspace
+ - src-openeuler/eclipse-mylyn
+ - src-openeuler/eclipse-photran
+ - src-openeuler/eclipse-ptp
+ - src-openeuler/eclipse-remote
+ - src-openeuler/eclipse-subclipse
+ - src-openeuler/eclipse-swtbot
+ - src-openeuler/eclipse-tm-terminal
+ - src-openeuler/eclipselink
+ - src-openeuler/ed25519-java
+ - src-openeuler/ehcache-core
+ - src-openeuler/ehcache-sizeof-agent
+ - src-openeuler/evo-inflector
+ - src-openeuler/exec-maven-plugin
+ - src-openeuler/extra166y
+ - src-openeuler/felix-bundlerepository
+ - src-openeuler/felix-framework
+ - src-openeuler/felix-gogo-command
+ - src-openeuler/felix-gogo-parent
+ - src-openeuler/felix-main
+ - src-openeuler/felix-osgi-obr-resolver
+ - src-openeuler/felix-scr
+ - src-openeuler/felix-utils
+ - src-openeuler/findbugs
+ - src-openeuler/findbugs-bcel
+ - src-openeuler/fop
+ - src-openeuler/geronimo-annotation
+ - src-openeuler/geronimo-commonj
+ - src-openeuler/geronimo-jaxrpc
+ - src-openeuler/geronimo-jms
+ - src-openeuler/geronimo-jta
+ - src-openeuler/geronimo-saaj
+ - src-openeuler/glassfish-el
+ - src-openeuler/glassfish-gmbal
+ - src-openeuler/glassfish-hk2
+ - src-openeuler/glassfish-jaxrpc-api
+ - src-openeuler/glassfish-jsp-api
+ - src-openeuler/glassfish-management-api
+ - src-openeuler/glassfish-pfl
+ - src-openeuler/glassfish-servlet-api
+ - src-openeuler/glassfish-toplink-essentials
+ - src-openeuler/glassfish-transaction-api
+ - src-openeuler/gnu-getopt
+ - src-openeuler/google-guice
+ - src-openeuler/gpars
+ - src-openeuler/grizzly-npn
+ - src-openeuler/groovy
+ - src-openeuler/groovy18
+ - src-openeuler/gsbase
+ - src-openeuler/guava20
+ - src-openeuler/hawtbuf
+ - src-openeuler/hawtjni
+ - src-openeuler/hessian
+ - src-openeuler/hibernate
+ - src-openeuler/hibernate-commons-annotations
+ - src-openeuler/hibernate-jpa-2.0-api
+ - src-openeuler/hibernate-jpa-2.1-api
+ - src-openeuler/hibernate-search
+ - src-openeuler/hibernate-validator
+ - src-openeuler/hibernate3
+ - src-openeuler/hibernate4
+ - src-openeuler/HikariCP
+ - src-openeuler/hsqldb
+ - src-openeuler/httpcomponents-client
+ - src-openeuler/httpcomponents-core
+ - src-openeuler/httpunit
+ - src-openeuler/icu4j
+ - src-openeuler/idlj-maven-plugin
+ - src-openeuler/infinispan
+ - src-openeuler/invokebinder
+ - src-openeuler/irclib
+ - src-openeuler/ironjacamar
+ - src-openeuler/itext
+ - src-openeuler/jackcess
+ - src-openeuler/jackcess-encrypt
+ - src-openeuler/jackson
+ - src-openeuler/jackson-databind
+ - src-openeuler/jackson-dataformat-xml
+ - src-openeuler/jackson-dataformats-text
+ - src-openeuler/jackson-datatype-joda
+ - src-openeuler/jackson-datatypes-collections
+ - src-openeuler/jackson-jaxrs-providers
+ - src-openeuler/jackson-modules-base
+ - src-openeuler/jacoco
+ - src-openeuler/jacorb
+ - src-openeuler/jaf
+ - src-openeuler/jakarta-commons-httpclient
+ - src-openeuler/jamonapi
+ - src-openeuler/jandex
+ - src-openeuler/jandex-maven-plugin
+ - src-openeuler/janino
+ - src-openeuler/jansi
+ - src-openeuler/jansi-native
+ - src-openeuler/jasperreports
+ - src-openeuler/jastow
+ - src-openeuler/jasypt
+ - src-openeuler/java-libpst
+ - src-openeuler/java-oauth
+ - src-openeuler/java-service-wrapper
+ - src-openeuler/java-xmlbuilder
+ - src-openeuler/javacc
+ - src-openeuler/javapackages-tools
+ - src-openeuler/javapoet
+ - src-openeuler/javassist
+ - src-openeuler/jaxb2-common-basics
+ - src-openeuler/jaxb2-maven-plugin
+ - src-openeuler/jaxen
+ - src-openeuler/jberet
+ - src-openeuler/jboss-batch-1.0-api
+ - src-openeuler/jboss-classfilewriter
+ - src-openeuler/jboss-common-beans
+ - src-openeuler/jboss-concurrency-1.0-api
+ - src-openeuler/jboss-connector-1.7-api
+ - src-openeuler/jboss-dmr
+ - src-openeuler/jboss-ejb-3.1-api
+ - src-openeuler/jboss-ejb-3.2-api
+ - src-openeuler/jboss-ejb-client
+ - src-openeuler/jboss-ejb3-ext-api
+ - src-openeuler/jboss-el-2.2-api
+ - src-openeuler/jboss-el-3.0-api
+ - src-openeuler/jboss-iiop-client
+ - src-openeuler/jboss-integration
+ - src-openeuler/jboss-interceptors-1.1-api
+ - src-openeuler/jboss-interceptors-1.2-api
+ - src-openeuler/jboss-invocation
+ - src-openeuler/jboss-jacc-1.4-api
+ - src-openeuler/jboss-jacc-1.5-api
+ - src-openeuler/jboss-jaspi-1.0-api
+ - src-openeuler/jboss-jaspi-1.1-api
+ - src-openeuler/jboss-jaxb-2.2-api
+ - src-openeuler/jboss-jaxrpc-1.1-api
+ - src-openeuler/jboss-jaxws-2.2-api
+ - src-openeuler/jboss-jms-1.1-api
+ - src-openeuler/jboss-jsf-2.2-api
+ - src-openeuler/jboss-jsp-2.2-api
+ - src-openeuler/jboss-logging
+ - src-openeuler/jboss-logging-tools
+ - src-openeuler/jboss-logging-tools1
+ - src-openeuler/jboss-logmanager
+ - src-openeuler/jboss-marshalling
+ - src-openeuler/jboss-metadata
+ - src-openeuler/jboss-modules
+ - src-openeuler/jboss-msc
+ - src-openeuler/jboss-negotiation
+ - src-openeuler/jboss-remote-naming
+ - src-openeuler/jboss-remoting-jmx
+ - src-openeuler/jboss-rmi-1.0-api
+ - src-openeuler/jboss-sasl
+ - src-openeuler/jboss-servlet-2.5-api
+ - src-openeuler/jboss-servlet-3.0-api
+ - src-openeuler/jboss-specs-parent
+ - src-openeuler/jboss-threads
+ - src-openeuler/jboss-transaction-1.1-api
+ - src-openeuler/jboss-transaction-1.2-api
+ - src-openeuler/jboss-transaction-spi
+ - src-openeuler/jboss-vfs
+ - src-openeuler/jboss-websocket-1.1-api
+ - src-openeuler/jbossws-api
+ - src-openeuler/jbossws-parent
+ - src-openeuler/jcifs
+ - src-openeuler/jcip-annotations
+ - src-openeuler/jcommon
+ - src-openeuler/jcsp
+ - src-openeuler/jdbi
+ - src-openeuler/jdependency
+ - src-openeuler/jdiff
+ - src-openeuler/jdo-api
+ - src-openeuler/jdo2-api
+ - src-openeuler/jdom2
+ - src-openeuler/je
+ - src-openeuler/jenkins-executable-war
+ - src-openeuler/jenkins-xstream
+ - src-openeuler/jersey
+ - src-openeuler/jersey1
+ - src-openeuler/jets3t
+ - src-openeuler/jetty-alpn
+ - src-openeuler/jetty-alpn-api
+ - src-openeuler/jetty-artifact-remote-resources
+ - src-openeuler/jetty-assembly-descriptors
+ - src-openeuler/jetty-build-support
+ - src-openeuler/jetty-distribution-remote-resources
+ - src-openeuler/jetty-test-helper
+ - src-openeuler/jetty-test-policy
+ - src-openeuler/jetty-toolchain
+ - src-openeuler/jetty-version-maven-plugin
+ - src-openeuler/jetty8
+ - src-openeuler/jflex
+ - src-openeuler/jFormatString
+ - src-openeuler/jfreechart
+ - src-openeuler/jgit
+ - src-openeuler/jgroups
+ - src-openeuler/jibx
+ - src-openeuler/jline
+ - src-openeuler/jline1
+ - src-openeuler/jmatio
+ - src-openeuler/jmh
+ - src-openeuler/jmock
+ - src-openeuler/jna
+ - src-openeuler/jnr-x86asm
+ - src-openeuler/joda-time
+ - src-openeuler/johnzon
+ - src-openeuler/json-path
+ - src-openeuler/json-smart
+ - src-openeuler/jsonic
+ - src-openeuler/jsoup
+ - src-openeuler/jspc
+ - src-openeuler/jsr-305
+ - src-openeuler/jsr-311
+ - src-openeuler/jtidy
+ - src-openeuler/jtoaster
+ - src-openeuler/jts
+ - src-openeuler/jul-to-slf4j-stub
+ - src-openeuler/junit-addons
+ - src-openeuler/junitperf
+ - src-openeuler/juniversalchardet
+ - src-openeuler/jvnet-parent
+ - src-openeuler/jwnl
+ - src-openeuler/jython
+ - src-openeuler/kxml
+ - src-openeuler/language-detector
+ - src-openeuler/ldaptive
+ - src-openeuler/lettuce
+ - src-openeuler/leveldb-java
+ - src-openeuler/leveldbjni
+ - src-openeuler/lightcouch
+ - src-openeuler/log4j
+ - src-openeuler/log4j-jboss-logmanager
+ - src-openeuler/lucene3
+ - src-openeuler/lz4-java
+ - src-openeuler/lzma-java
+ - src-openeuler/maven
+ - src-openeuler/maven-antrun-plugin
+ - src-openeuler/maven-archiver
+ - src-openeuler/maven-artifact-resolver
+ - src-openeuler/maven-artifact-transfer
+ - src-openeuler/maven-assembly-plugin
+ - src-openeuler/maven-checkstyle-plugin
+ - src-openeuler/maven-common-artifact-filters
+ - src-openeuler/maven-compiler-plugin
+ - src-openeuler/maven-dependency-analyzer
+ - src-openeuler/maven-dependency-plugin
+ - src-openeuler/maven-dependency-tree
+ - src-openeuler/maven-doxia
+ - src-openeuler/maven-doxia-sitetools
+ - src-openeuler/maven-eclipse-plugin
+ - src-openeuler/maven-enforcer
+ - src-openeuler/maven-file-management
+ - src-openeuler/maven-filtering
+ - src-openeuler/maven-gpg-plugin
+ - src-openeuler/maven-idea-plugin
+ - src-openeuler/maven-injection-plugin
+ - src-openeuler/maven-invoker
+ - src-openeuler/maven-invoker-plugin
+ - src-openeuler/maven-jar-plugin
+ - src-openeuler/maven-jarsigner-plugin
+ - src-openeuler/maven-javadoc-plugin
+ - src-openeuler/maven-jaxb2-plugin
+ - src-openeuler/maven-license-plugin
+ - src-openeuler/maven-local
+ - src-openeuler/maven-mapping
+ - src-openeuler/maven-native
+ - src-openeuler/maven-parent
+ - src-openeuler/maven-plugin-build-helper
+ - src-openeuler/maven-plugin-bundle
+ - src-openeuler/maven-plugin-testing
+ - src-openeuler/maven-plugin-tools
+ - src-openeuler/maven-processor-plugin
+ - src-openeuler/maven-remote-resources-plugin
+ - src-openeuler/maven-reporting-api
+ - src-openeuler/maven-reporting-exec
+ - src-openeuler/maven-reporting-impl
+ - src-openeuler/maven-resolver
+ - src-openeuler/maven-resources-plugin
+ - src-openeuler/maven-script-interpreter
+ - src-openeuler/maven-shade-plugin
+ - src-openeuler/maven-shared-incremental
+ - src-openeuler/maven-shared-io
+ - src-openeuler/maven-shared-jar
+ - src-openeuler/maven-shared-jarsigner
+ - src-openeuler/maven-shared-utils
+ - src-openeuler/maven-site-plugin
+ - src-openeuler/maven-source-plugin
+ - src-openeuler/maven-surefire
+ - src-openeuler/maven-verifier
+ - src-openeuler/maven-wagon
+ - src-openeuler/maven-war-plugin
+ - src-openeuler/maven2
+ - src-openeuler/mavibot
+ - src-openeuler/mchange-commons
+ - src-openeuler/memoryfilesystem
+ - src-openeuler/metainf-services
+ - src-openeuler/metrics
+ - src-openeuler/mimepull
+ - src-openeuler/mojarra
+ - src-openeuler/mongo-java-driver
+ - src-openeuler/multiverse
+ - src-openeuler/mustache-java
+ - src-openeuler/mx4j
+ - src-openeuler/narayana
+ - src-openeuler/native-platform
+ - src-openeuler/netty-tcnative
+ - src-openeuler/netty3
+ - src-openeuler/noggit
+ - src-openeuler/objectweb-pom
+ - src-openeuler/objenesis
+ - src-openeuler/ohc
+ - src-openeuler/openjpa
+ - src-openeuler/openwebbeans
+ - src-openeuler/os-maven-plugin
+ - src-openeuler/parboiled
+ - src-openeuler/pdf-renderer
+ - src-openeuler/pdfbox
+ - src-openeuler/pegdown
+ - src-openeuler/picketbox
+ - src-openeuler/picketbox-commons
+ - src-openeuler/picketbox-xacml
+ - src-openeuler/plexus-archiver
+ - src-openeuler/plexus-build-api
+ - src-openeuler/plexus-cipher
+ - src-openeuler/plexus-classworlds
+ - src-openeuler/plexus-cli
+ - src-openeuler/plexus-compiler
+ - src-openeuler/plexus-component-api
+ - src-openeuler/plexus-components-pom
+ - src-openeuler/plexus-containers
+ - src-openeuler/plexus-i18n
+ - src-openeuler/plexus-interactivity
+ - src-openeuler/plexus-interpolation
+ - src-openeuler/plexus-io
+ - src-openeuler/plexus-languages
+ - src-openeuler/plexus-pom
+ - src-openeuler/plexus-resources
+ - src-openeuler/plexus-sec-dispatcher
+ - src-openeuler/plexus-utils
+ - src-openeuler/plexus-velocity
+ - src-openeuler/postgresql-jdbc
+ - src-openeuler/proguard
+ - src-openeuler/protostream
+ - src-openeuler/proxool
+ - src-openeuler/proxytoys
+ - src-openeuler/qpid-proton-java
+ - src-openeuler/quartz
+ - src-openeuler/querydsl3
+ - src-openeuler/rabbitmq-java-client
+ - src-openeuler/reflections
+ - src-openeuler/remotetea
+ - src-openeuler/resteasy
+ - src-openeuler/rhino
+ - src-openeuler/rhq-plugin-annotations
+ - src-openeuler/robust-http-client
+ - src-openeuler/rome
+ - src-openeuler/rxjava
+ - src-openeuler/rxtx
+ - src-openeuler/sac
+ - src-openeuler/sat4j
+ - src-openeuler/saxpath
+ - src-openeuler/scala
+ - src-openeuler/scannotation
+ - src-openeuler/sequence-library
+ - src-openeuler/serp
+ - src-openeuler/sezpoz
+ - src-openeuler/shibboleth-java-parent-v3
+ - src-openeuler/shibboleth-java-support
+ - src-openeuler/shrinkwrap
+ - src-openeuler/shrinkwrap-descriptors
+ - src-openeuler/shrinkwrap-resolver
+ - src-openeuler/sigar
+ - src-openeuler/signpost-core
+ - src-openeuler/simple
+ - src-openeuler/simple-xml
+ - src-openeuler/sisu
+ - src-openeuler/sisu-mojos
+ - src-openeuler/slf4j-jboss-logmanager
+ - src-openeuler/snowball-java
+ - src-openeuler/sonatype-oss-parent
+ - src-openeuler/sonatype-plugins-parent
+ - src-openeuler/spatial4j
+ - src-openeuler/spring-ldap
+ - src-openeuler/springframework
+ - src-openeuler/springframework-amqp
+ - src-openeuler/springframework-batch
+ - src-openeuler/springframework-data-commons
+ - src-openeuler/springframework-data-mongodb
+ - src-openeuler/springframework-data-redis
+ - src-openeuler/springframework-hateoas
+ - src-openeuler/springframework-plugin
+ - src-openeuler/springframework-retry
+ - src-openeuler/spymemcached
+ - src-openeuler/sqljet
+ - src-openeuler/sslext
+ - src-openeuler/stapler
+ - src-openeuler/stapler-adjunct-timeline
+ - src-openeuler/staxmapper
+ - src-openeuler/stream-lib
+ - src-openeuler/struts
+ - src-openeuler/svnkit
+ - src-openeuler/swagger-core
+ - src-openeuler/swt-chart
+ - src-openeuler/tagsoup
+ - src-openeuler/takari-archiver
+ - src-openeuler/takari-incrementalbuild
+ - src-openeuler/takari-lifecycle
+ - src-openeuler/takari-plugin-testing
+ - src-openeuler/takari-pom
+ - src-openeuler/tascalate-asmx
+ - src-openeuler/tascalate-javaflow
+ - src-openeuler/test-interface
+ - src-openeuler/thredds
+ - src-openeuler/tika
+ - src-openeuler/tiles
+ - src-openeuler/time-api
+ - src-openeuler/tomcat-taglibs-parent
+ - src-openeuler/treelayout
+ - src-openeuler/trilead-putty-extension
+ - src-openeuler/trilead-ssh2
+ - src-openeuler/txw2
+ - src-openeuler/tycho
+ - src-openeuler/tycho-extras
+ - src-openeuler/typesafe-config
+ - src-openeuler/uima-addons
+ - src-openeuler/uima-parent-pom
+ - src-openeuler/uimaj
+ - src-openeuler/undertow
+ - src-openeuler/velocity
+ - src-openeuler/velocity-tools
+ - src-openeuler/vorbis-java
+ - src-openeuler/weld-api
+ - src-openeuler/weld-core
+ - src-openeuler/weld-parent
+ - src-openeuler/wildfly-build-tools
+ - src-openeuler/wildfly-core
+ - src-openeuler/wildfly-elytron
+ - src-openeuler/wildfly-security-manager
+ - src-openeuler/ws-jaxme
+ - src-openeuler/ws-xmlschema
+ - src-openeuler/wsdl4j
+ - src-openeuler/wss4j
+ - src-openeuler/xapool
+ - src-openeuler/xbean
+ - src-openeuler/xml-maven-plugin
+ - src-openeuler/xml-security
+ - src-openeuler/xmlbeans
+ - src-openeuler/xmlbeans-maven-plugin
+ - src-openeuler/xmlenc
+ - src-openeuler/xmlrpc
+ - src-openeuler/xmlunit
+ - src-openeuler/xmpcore
+ - src-openeuler/xmvn
+ - src-openeuler/xnio
+ - src-openeuler/xpp3
+ - src-openeuler/xsom
+ - src-openeuler/xstream
+ - src-openeuler/yecht
+ - src-openeuler/znerd-oss-parent
+ - src-openeuler/zxing
+- name: sig-ruby
+ repositories:
+ - src-openeuler/jruby
+ - src-openeuler/ruby
+ - src-openeuler/ruby-augeas
+ - src-openeuler/ruby-common
+ - src-openeuler/rubygem-abrt
+ - src-openeuler/rubygem-actioncable
+ - src-openeuler/rubygem-actionmailer
+ - src-openeuler/rubygem-actionpack
+ - src-openeuler/rubygem-actionview
+ - src-openeuler/rubygem-activejob
+ - src-openeuler/rubygem-activemodel
+ - src-openeuler/rubygem-activemodel-serializers-xml
+ - src-openeuler/rubygem-activerecord
+ - src-openeuler/rubygem-activeresource
+ - src-openeuler/rubygem-activestorage
+ - src-openeuler/rubygem-activesupport
+ - src-openeuler/rubygem-addressable
+ - src-openeuler/rubygem-afm
+ - src-openeuler/rubygem-ansi
+ - src-openeuler/rubygem-arel
+ - src-openeuler/rubygem-aruba
+ - src-openeuler/rubygem-Ascii85
+ - src-openeuler/rubygem-asciidoctor
+ - src-openeuler/rubygem-atomic
+ - src-openeuler/rubygem-backports
+ - src-openeuler/rubygem-bacon
+ - src-openeuler/rubygem-bcrypt
+ - src-openeuler/rubygem-bindex
+ - src-openeuler/rubygem-bootsnap
+ - src-openeuler/rubygem-builder
+ - src-openeuler/rubygem-bundler
+ - src-openeuler/rubygem-byebug
+ - src-openeuler/rubygem-capybara
+ - src-openeuler/rubygem-childprocess
+ - src-openeuler/rubygem-chronic
+ - src-openeuler/rubygem-coderay
+ - src-openeuler/rubygem-coffee-script
+ - src-openeuler/rubygem-coffee-script-source
+ - src-openeuler/rubygem-concurrent-ruby
+ - src-openeuler/rubygem-connection_pool
+ - src-openeuler/rubygem-contracts
+ - src-openeuler/rubygem-crack
+ - src-openeuler/rubygem-crass
+ - src-openeuler/rubygem-creole
+ - src-openeuler/rubygem-cucumber
+ - src-openeuler/rubygem-cucumber-core
+ - src-openeuler/rubygem-cucumber-expressions
+ - src-openeuler/rubygem-cucumber-tag_expressions
+ - src-openeuler/rubygem-cucumber-wire
+ - src-openeuler/rubygem-curb
+ - src-openeuler/rubygem-daemons
+ - src-openeuler/rubygem-dalli
+ - src-openeuler/rubygem-delorean
+ - src-openeuler/rubygem-diff-lcs
+ - src-openeuler/rubygem-docile
+ - src-openeuler/rubygem-domain_name
+ - src-openeuler/rubygem-ejs
+ - src-openeuler/rubygem-erubi
+ - src-openeuler/rubygem-erubis
+ - src-openeuler/rubygem-ethon
+ - src-openeuler/rubygem-eventmachine
+ - src-openeuler/rubygem-excon
+ - src-openeuler/rubygem-execjs
+ - src-openeuler/rubygem-expression_parser
+ - src-openeuler/rubygem-fakefs
+ - src-openeuler/rubygem-faraday
+ - src-openeuler/rubygem-fattr
+ - src-openeuler/rubygem-ffi
+ - src-openeuler/rubygem-flexmock
+ - src-openeuler/rubygem-formatador
+ - src-openeuler/rubygem-gem2rpm
+ - src-openeuler/rubygem-gherkin
+ - src-openeuler/rubygem-globalid
+ - src-openeuler/rubygem-haml
+ - src-openeuler/rubygem-hashdiff
+ - src-openeuler/rubygem-hashery
+ - src-openeuler/rubygem-http-cookie
+ - src-openeuler/rubygem-httpclient
+ - src-openeuler/rubygem-i18n
+ - src-openeuler/rubygem-idn
+ - src-openeuler/rubygem-introspection
+ - src-openeuler/rubygem-jbuilder
+ - src-openeuler/rubygem-jquery-rails
+ - src-openeuler/rubygem-json_pure
+ - src-openeuler/rubygem-launchy
+ - src-openeuler/rubygem-liquid
+ - src-openeuler/rubygem-listen
+ - src-openeuler/rubygem-loofah
+ - src-openeuler/rubygem-mail
+ - src-openeuler/rubygem-marcel
+ - src-openeuler/rubygem-maruku
+ - src-openeuler/rubygem-memcache-client
+ - src-openeuler/rubygem-metaclass
+ - src-openeuler/rubygem-method_source
+ - src-openeuler/rubygem-mime-types
+ - src-openeuler/rubygem-mime-types-data
+ - src-openeuler/rubygem-mimemagic
+ - src-openeuler/rubygem-mini_magick
+ - src-openeuler/rubygem-mini_mime
+ - src-openeuler/rubygem-minitest
+ - src-openeuler/rubygem-minitest-reporters
+ - src-openeuler/rubygem-minitest4
+ - src-openeuler/rubygem-mocha
+ - src-openeuler/rubygem-msgpack
+ - src-openeuler/rubygem-multi_json
+ - src-openeuler/rubygem-multi_test
+ - src-openeuler/rubygem-multipart-post
+ - src-openeuler/rubygem-mustermann
+ - src-openeuler/rubygem-nio4r
+ - src-openeuler/rubygem-nokogiri
+ - src-openeuler/rubygem-open4
+ - src-openeuler/rubygem-pathspec
+ - src-openeuler/rubygem-pdf-core
+ - src-openeuler/rubygem-pdf-inspector
+ - src-openeuler/rubygem-pdf-reader
+ - src-openeuler/rubygem-pkg-config
+ - src-openeuler/rubygem-power_assert
+ - src-openeuler/rubygem-prawn
+ - src-openeuler/rubygem-prawn-table
+ - src-openeuler/rubygem-pry
+ - src-openeuler/rubygem-pry-nav
+ - src-openeuler/rubygem-public_suffix
+ - src-openeuler/rubygem-puma
+ - src-openeuler/rubygem-rack
+ - src-openeuler/rubygem-rack-cache
+ - src-openeuler/rubygem-rack-protection
+ - src-openeuler/rubygem-rack-test
+ - src-openeuler/rubygem-rails
+ - src-openeuler/rubygem-rails-controller-testing
+ - src-openeuler/rubygem-rails-dom-testing
+ - src-openeuler/rubygem-rails-html-sanitizer
+ - src-openeuler/rubygem-railties
+ - src-openeuler/rubygem-rake-compiler
+ - src-openeuler/rubygem-rb-inotify
+ - src-openeuler/rubygem-rdiscount
+ - src-openeuler/rubygem-redcarpet
+ - src-openeuler/rubygem-RedCloth
+ - src-openeuler/rubygem-redis
+ - src-openeuler/rubygem-rgen
+ - src-openeuler/rubygem-rouge
+ - src-openeuler/rubygem-rspec
+ - src-openeuler/rubygem-rspec-core
+ - src-openeuler/rubygem-rspec-expectations
+ - src-openeuler/rubygem-rspec-its
+ - src-openeuler/rubygem-rspec-mocks
+ - src-openeuler/rubygem-rspec-rails
+ - src-openeuler/rubygem-rspec-support
+ - src-openeuler/rubygem-rspec2
+ - src-openeuler/rubygem-rspec2-core
+ - src-openeuler/rubygem-rspec2-expectations
+ - src-openeuler/rubygem-rspec2-mocks
+ - src-openeuler/rubygem-ruby-progressbar
+ - src-openeuler/rubygem-ruby-rc4
+ - src-openeuler/rubygem-ruby-shadow
+ - src-openeuler/rubygem-rubyzip
+ - src-openeuler/rubygem-safe_yaml
+ - src-openeuler/rubygem-sass
+ - src-openeuler/rubygem-sass-rails
+ - src-openeuler/rubygem-sdoc
+ - src-openeuler/rubygem-selenium-webdriver
+ - src-openeuler/rubygem-session
+ - src-openeuler/rubygem-shindo
+ - src-openeuler/rubygem-shoulda
+ - src-openeuler/rubygem-shoulda-context
+ - src-openeuler/rubygem-shoulda-matchers
+ - src-openeuler/rubygem-simplecov
+ - src-openeuler/rubygem-simplecov-html
+ - src-openeuler/rubygem-sinatra
+ - src-openeuler/rubygem-slop
+ - src-openeuler/rubygem-spring
+ - src-openeuler/rubygem-sprockets
+ - src-openeuler/rubygem-sprockets-rails
+ - src-openeuler/rubygem-sqlite3
+ - src-openeuler/rubygem-temple
+ - src-openeuler/rubygem-test_declarative
+ - src-openeuler/rubygem-thin
+ - src-openeuler/rubygem-thor
+ - src-openeuler/rubygem-thread_order
+ - src-openeuler/rubygem-thread_safe
+ - src-openeuler/rubygem-tilt
+ - src-openeuler/rubygem-timecop
+ - src-openeuler/rubygem-ttfunk
+ - src-openeuler/rubygem-turbolinks
+ - src-openeuler/rubygem-turbolinks-source
+ - src-openeuler/rubygem-typhoeus
+ - src-openeuler/rubygem-tzinfo
+ - src-openeuler/rubygem-uglifier
+ - src-openeuler/rubygem-unf
+ - src-openeuler/rubygem-unf_ext
+ - src-openeuler/rubygem-webmock
+ - src-openeuler/rubygem-websocket
+ - src-openeuler/rubygem-websocket-driver
+ - src-openeuler/rubygem-websocket-extensions
+ - src-openeuler/rubygem-wikicloth
+ - src-openeuler/rubygem-xpath
+ - src-openeuler/rubygem-yard
+ - src-openeuler/rubygem-ZenTest
+ - src-openeuler/rubygems-ronn
+- name: sig-nodejs
+ repositories:
+ - src-openeuler/closure-compiler
+ - src-openeuler/expresso
+ - src-openeuler/js-jquery2
+ - src-openeuler/js-sizzle
+ - src-openeuler/lodash
+ - src-openeuler/node-gyp
+ - src-openeuler/nodejs
+ - src-openeuler/nodejs-abbrev
+ - src-openeuler/nodejs-acorn
+ - src-openeuler/nodejs-ansi
+ - src-openeuler/nodejs-ansi-font
+ - src-openeuler/nodejs-ansi-regex
+ - src-openeuler/nodejs-ansi-styles
+ - src-openeuler/nodejs-are-we-there-yet
+ - src-openeuler/nodejs-argparse
+ - src-openeuler/nodejs-array-differ
+ - src-openeuler/nodejs-array-index
+ - src-openeuler/nodejs-array-union
+ - src-openeuler/nodejs-array-uniq
+ - src-openeuler/nodejs-arrify
+ - src-openeuler/nodejs-asap
+ - src-openeuler/nodejs-asn1
+ - src-openeuler/nodejs-assert-plus
+ - src-openeuler/nodejs-assertion-error
+ - src-openeuler/nodejs-async
+ - src-openeuler/nodejs-aws-sign2
+ - src-openeuler/nodejs-balanced-match
+ - src-openeuler/nodejs-better-assert
+ - src-openeuler/nodejs-bindings
+ - src-openeuler/nodejs-bl
+ - src-openeuler/nodejs-block-stream
+ - src-openeuler/nodejs-bluebird
+ - src-openeuler/nodejs-boom
+ - src-openeuler/nodejs-brace-expansion
+ - src-openeuler/nodejs-buffer-equal
+ - src-openeuler/nodejs-builtin-modules
+ - src-openeuler/nodejs-bunker
+ - src-openeuler/nodejs-burrito
+ - src-openeuler/nodejs-bytes
+ - src-openeuler/nodejs-caller-callsite
+ - src-openeuler/nodejs-caller-path
+ - src-openeuler/nodejs-callsite
+ - src-openeuler/nodejs-callsites
+ - src-openeuler/nodejs-caseless
+ - src-openeuler/nodejs-chai
+ - src-openeuler/nodejs-chalk
+ - src-openeuler/nodejs-character-parser
+ - src-openeuler/nodejs-charm
+ - src-openeuler/nodejs-cjson
+ - src-openeuler/nodejs-clean-css
+ - src-openeuler/nodejs-cli-color
+ - src-openeuler/nodejs-clone
+ - src-openeuler/nodejs-closure-compiler
+ - src-openeuler/nodejs-colors
+ - src-openeuler/nodejs-combined-stream
+ - src-openeuler/nodejs-commander
+ - src-openeuler/nodejs-commonmark
+ - src-openeuler/nodejs-concat-map
+ - src-openeuler/nodejs-concat-stream
+ - src-openeuler/nodejs-console-dot-log
+ - src-openeuler/nodejs-constantinople
+ - src-openeuler/nodejs-core-util-is
+ - src-openeuler/nodejs-cryptiles
+ - src-openeuler/nodejs-css
+ - src-openeuler/nodejs-css-parse
+ - src-openeuler/nodejs-css-stringify
+ - src-openeuler/nodejs-ctype
+ - src-openeuler/nodejs-d
+ - src-openeuler/nodejs-dateformat
+ - src-openeuler/nodejs-debug
+ - src-openeuler/nodejs-deep-eql
+ - src-openeuler/nodejs-deep-equal
+ - src-openeuler/nodejs-deep-is
+ - src-openeuler/nodejs-defence
+ - src-openeuler/nodejs-defence-cli
+ - src-openeuler/nodejs-define-properties
+ - src-openeuler/nodejs-defined
+ - src-openeuler/nodejs-delayed-stream
+ - src-openeuler/nodejs-delegates
+ - src-openeuler/nodejs-diff
+ - src-openeuler/nodejs-difflet
+ - src-openeuler/nodejs-difflib
+ - src-openeuler/nodejs-docopt
+ - src-openeuler/nodejs-dreamopt
+ - src-openeuler/nodejs-duplexer
+ - src-openeuler/nodejs-ebnf-parser
+ - src-openeuler/nodejs-ejs
+ - src-openeuler/nodejs-end-of-stream
+ - src-openeuler/nodejs-entities
+ - src-openeuler/nodejs-es-abstract
+ - src-openeuler/nodejs-es-to-primitive
+ - src-openeuler/nodejs-es5-ext
+ - src-openeuler/nodejs-es6-iterator
+ - src-openeuler/nodejs-es6-symbol
+ - src-openeuler/nodejs-es6-weak-map
+ - src-openeuler/nodejs-escape-string-regexp
+ - src-openeuler/nodejs-escodegen
+ - src-openeuler/nodejs-esprima
+ - src-openeuler/nodejs-estraverse
+ - src-openeuler/nodejs-esutils
+ - src-openeuler/nodejs-event-emitter
+ - src-openeuler/nodejs-eventemitter2
+ - src-openeuler/nodejs-events-to-array
+ - src-openeuler/nodejs-exit
+ - src-openeuler/nodejs-expect-dot-js
+ - src-openeuler/nodejs-extend
+ - src-openeuler/nodejs-eyes
+ - src-openeuler/nodejs-fast-levenshtein
+ - src-openeuler/nodejs-faye-websocket
+ - src-openeuler/nodejs-figures
+ - src-openeuler/nodejs-fileset
+ - src-openeuler/nodejs-fill-keys
+ - src-openeuler/nodejs-find-up
+ - src-openeuler/nodejs-findup-sync
+ - src-openeuler/nodejs-flot
+ - src-openeuler/nodejs-for-each
+ - src-openeuler/nodejs-foreach
+ - src-openeuler/nodejs-forever-agent
+ - src-openeuler/nodejs-form-data
+ - src-openeuler/nodejs-formatio
+ - src-openeuler/nodejs-from
+ - src-openeuler/nodejs-fstream
+ - src-openeuler/nodejs-function-bind
+ - src-openeuler/nodejs-gauge
+ - src-openeuler/nodejs-gaze
+ - src-openeuler/nodejs-generate-function
+ - src-openeuler/nodejs-generate-object-property
+ - src-openeuler/nodejs-getobject
+ - src-openeuler/nodejs-github-url-from-git
+ - src-openeuler/nodejs-glob
+ - src-openeuler/nodejs-globule
+ - src-openeuler/nodejs-graceful-fs
+ - src-openeuler/nodejs-graceful-readlink
+ - src-openeuler/nodejs-growl
+ - src-openeuler/nodejs-grunt
+ - src-openeuler/nodejs-grunt-cli
+ - src-openeuler/nodejs-grunt-contrib-clean
+ - src-openeuler/nodejs-grunt-contrib-internal
+ - src-openeuler/nodejs-grunt-contrib-nodeunit
+ - src-openeuler/nodejs-grunt-contrib-uglify
+ - src-openeuler/nodejs-grunt-contrib-watch
+ - src-openeuler/nodejs-grunt-known-options
+ - src-openeuler/nodejs-grunt-legacy-log
+ - src-openeuler/nodejs-grunt-legacy-log-utils
+ - src-openeuler/nodejs-grunt-legacy-util
+ - src-openeuler/nodejs-gzip-size
+ - src-openeuler/nodejs-handlebars
+ - src-openeuler/nodejs-har-validator
+ - src-openeuler/nodejs-has
+ - src-openeuler/nodejs-has-ansi
+ - src-openeuler/nodejs-has-color
+ - src-openeuler/nodejs-has-flag
+ - src-openeuler/nodejs-has-symbols
+ - src-openeuler/nodejs-has-unicode
+ - src-openeuler/nodejs-hash_file
+ - src-openeuler/nodejs-hashish
+ - src-openeuler/nodejs-hawk
+ - src-openeuler/nodejs-heap
+ - src-openeuler/nodejs-hoek
+ - src-openeuler/nodejs-hooker
+ - src-openeuler/nodejs-hosted-git-info
+ - src-openeuler/nodejs-http-signature
+ - src-openeuler/nodejs-iconv
+ - src-openeuler/nodejs-iconv-lite
+ - src-openeuler/nodejs-image-size
+ - src-openeuler/nodejs-inflight
+ - src-openeuler/nodejs-inherits
+ - src-openeuler/nodejs-inherits1
+ - src-openeuler/nodejs-interpret
+ - src-openeuler/nodejs-is
+ - src-openeuler/nodejs-is-builtin-module
+ - src-openeuler/nodejs-is-callable
+ - src-openeuler/nodejs-is-date-object
+ - src-openeuler/nodejs-is-function
+ - src-openeuler/nodejs-is-my-json-valid
+ - src-openeuler/nodejs-is-object
+ - src-openeuler/nodejs-is-property
+ - src-openeuler/nodejs-is-regex
+ - src-openeuler/nodejs-is-symbol
+ - src-openeuler/nodejs-is-typedarray
+ - src-openeuler/nodejs-isarray
+ - src-openeuler/nodejs-isexe
+ - src-openeuler/nodejs-isstream
+ - src-openeuler/nodejs-istanbul
+ - src-openeuler/nodejs-jade
+ - src-openeuler/nodejs-jison
+ - src-openeuler/nodejs-jison-lex
+ - src-openeuler/nodejs-jju
+ - src-openeuler/nodejs-js-yaml
+ - src-openeuler/nodejs-json-diff
+ - src-openeuler/nodejs-json-parse-helpfulerror
+ - src-openeuler/nodejs-json-stringify-safe
+ - src-openeuler/nodejs-jsonify
+ - src-openeuler/nodejs-jsonpointer
+ - src-openeuler/nodejs-jsonselect
+ - src-openeuler/nodejs-less
+ - src-openeuler/nodejs-less-plugin-clean-css
+ - src-openeuler/nodejs-levn
+ - src-openeuler/nodejs-lex-parser
+ - src-openeuler/nodejs-load-grunt-tasks
+ - src-openeuler/nodejs-locate-path
+ - src-openeuler/nodejs-lolex
+ - src-openeuler/nodejs-lru-queue
+ - src-openeuler/nodejs-make-arrow-function
+ - src-openeuler/nodejs-make-generator-function
+ - src-openeuler/nodejs-maxmin
+ - src-openeuler/nodejs-mdurl
+ - src-openeuler/nodejs-memoizee
+ - src-openeuler/nodejs-merge-descriptors
+ - src-openeuler/nodejs-mime
+ - src-openeuler/nodejs-mime-db
+ - src-openeuler/nodejs-mime-types
+ - src-openeuler/nodejs-minimatch
+ - src-openeuler/nodejs-minimist
+ - src-openeuler/nodejs-mkdirp
+ - src-openeuler/nodejs-mock-fs
+ - src-openeuler/nodejs-module-not-found-error
+ - src-openeuler/nodejs-monocle
+ - src-openeuler/nodejs-ms
+ - src-openeuler/nodejs-multimatch
+ - src-openeuler/nodejs-nan
+ - src-openeuler/nodejs-nan0
+ - src-openeuler/nodejs-nan1
+ - src-openeuler/nodejs-next-tick
+ - src-openeuler/nodejs-node-uuid
+ - src-openeuler/nodejs-nomnom
+ - src-openeuler/nodejs-nopt
+ - src-openeuler/nodejs-noptify
+ - src-openeuler/nodejs-normalize-package-data
+ - src-openeuler/nodejs-npmlog
+ - src-openeuler/nodejs-oauth-sign
+ - src-openeuler/nodejs-object-assign
+ - src-openeuler/nodejs-object-dot-assign
+ - src-openeuler/nodejs-object-inspect
+ - src-openeuler/nodejs-object-is
+ - src-openeuler/nodejs-object-keys
+ - src-openeuler/nodejs-once
+ - src-openeuler/nodejs-optimist
+ - src-openeuler/nodejs-optionator
+ - src-openeuler/nodejs-os-homedir
+ - src-openeuler/nodejs-os-tmpdir
+ - src-openeuler/nodejs-osenv
+ - src-openeuler/nodejs-p-limit
+ - src-openeuler/nodejs-p-locate
+ - src-openeuler/nodejs-package
+ - src-openeuler/nodejs-packaging
+ - src-openeuler/nodejs-paperboy
+ - src-openeuler/nodejs-path-array
+ - src-openeuler/nodejs-path-exists
+ - src-openeuler/nodejs-path-is-absolute
+ - src-openeuler/nodejs-path-parse
+ - src-openeuler/nodejs-pinkie
+ - src-openeuler/nodejs-pinkie-promise
+ - src-openeuler/nodejs-pkg-up
+ - src-openeuler/nodejs-prelude-ls
+ - src-openeuler/nodejs-pretty-bytes
+ - src-openeuler/nodejs-process-nextick-args
+ - src-openeuler/nodejs-promise
+ - src-openeuler/nodejs-promises-aplus-tests
+ - src-openeuler/nodejs-proxyquire
+ - src-openeuler/nodejs-qs
+ - src-openeuler/nodejs-raw-body
+ - src-openeuler/nodejs-read-package-json
+ - src-openeuler/nodejs-readable-stream
+ - src-openeuler/nodejs-readdirp
+ - src-openeuler/nodejs-rechoir
+ - src-openeuler/nodejs-replace-require-self
+ - src-openeuler/nodejs-request
+ - src-openeuler/nodejs-require-directory
+ - src-openeuler/nodejs-require-inject
+ - src-openeuler/nodejs-require-uncached
+ - src-openeuler/nodejs-requirejs
+ - src-openeuler/nodejs-resolve
+ - src-openeuler/nodejs-resolve-from
+ - src-openeuler/nodejs-resolve-pkg
+ - src-openeuler/nodejs-resumer
+ - src-openeuler/nodejs-rimraf
+ - src-openeuler/nodejs-rollup
+ - src-openeuler/nodejs-runforcover
+ - src-openeuler/nodejs-safe-buffer
+ - src-openeuler/nodejs-samsam
+ - src-openeuler/nodejs-semver
+ - src-openeuler/nodejs-set-immediate-shim
+ - src-openeuler/nodejs-shelljs
+ - src-openeuler/nodejs-should
+ - src-openeuler/nodejs-should-equal
+ - src-openeuler/nodejs-should-format
+ - src-openeuler/nodejs-should-type
+ - src-openeuler/nodejs-simple-assert
+ - src-openeuler/nodejs-sinon
+ - src-openeuler/nodejs-slide
+ - src-openeuler/nodejs-sntp
+ - src-openeuler/nodejs-source-map
+ - src-openeuler/nodejs-source-map-support
+ - src-openeuler/nodejs-spdx-correct
+ - src-openeuler/nodejs-spdx-exceptions
+ - src-openeuler/nodejs-spdx-expression-parse
+ - src-openeuler/nodejs-spdx-license-ids
+ - src-openeuler/nodejs-sprintf-js
+ - src-openeuler/nodejs-stream-replace
+ - src-openeuler/nodejs-string
+ - src-openeuler/nodejs-string-dot-prototype-dot-repeat
+ - src-openeuler/nodejs-string-dot-prototype-dot-trim
+ - src-openeuler/nodejs-string_decoder
+ - src-openeuler/nodejs-stringstream
+ - src-openeuler/nodejs-strip-ansi
+ - src-openeuler/nodejs-strip-json-comments
+ - src-openeuler/nodejs-supports-color
+ - src-openeuler/nodejs-tap
+ - src-openeuler/nodejs-tap-parser
+ - src-openeuler/nodejs-tape
+ - src-openeuler/nodejs-tar
+ - src-openeuler/nodejs-temporary
+ - src-openeuler/nodejs-test
+ - src-openeuler/nodejs-through
+ - src-openeuler/nodejs-through2
+ - src-openeuler/nodejs-timers-ext
+ - src-openeuler/nodejs-tiny-lr-fork
+ - src-openeuler/nodejs-tough-cookie
+ - src-openeuler/nodejs-transformers
+ - src-openeuler/nodejs-traverse
+ - src-openeuler/nodejs-tunnel-agent
+ - src-openeuler/nodejs-type-check
+ - src-openeuler/nodejs-type-detect
+ - src-openeuler/nodejs-underscore
+ - src-openeuler/nodejs-underscore-dot-string
+ - src-openeuler/nodejs-unpipe
+ - src-openeuler/nodejs-uri-path
+ - src-openeuler/nodejs-util
+ - src-openeuler/nodejs-util-deprecate
+ - src-openeuler/nodejs-validate-npm-package-license
+ - src-openeuler/nodejs-vows
+ - src-openeuler/nodejs-websocket-driver
+ - src-openeuler/nodejs-which
+ - src-openeuler/nodejs-window-size
+ - src-openeuler/nodejs-with
+ - src-openeuler/nodejs-wordwrap
+ - src-openeuler/nodejs-wrappy
+ - src-openeuler/nodejs-xtend
+ - src-openeuler/nodejs-yamlish
+ - src-openeuler/nodejs-yargs
+ - src-openeuler/nodeunit
+ - src-openeuler/uglify-js
+ - src-openeuler/uglify-js1
+- name: Private
+ repositories:
+ - openeuler/os-autoinst-distri-openEuler
+ - openeuler/security
+ - src-openeuler/aalto-xml
+ - src-openeuler/adobe-source-code-pro-fonts
+ - src-openeuler/allegro
+ - src-openeuler/amtk
+ - src-openeuler/antlr4
+ - src-openeuler/apache-commons-beanutils
+ - src-openeuler/apache-commons-codec
+ - src-openeuler/apache-commons-lang
+ - src-openeuler/apache-commons-vfs
+ - src-openeuler/appstream
+ - src-openeuler/appstream-data
+ - src-openeuler/args4j
+ - src-openeuler/armadillo
+ - src-openeuler/arpack
+ - src-openeuler/asio
+ - src-openeuler/autotrace
+ - src-openeuler/aws-sdk-java
+ - src-openeuler/baobab
+ - src-openeuler/batik
+ - src-openeuler/bcm283x-firmware
+ - src-openeuler/blosc
+ - src-openeuler/build
+ - src-openeuler/bullet
+ - src-openeuler/bytelist
+ - src-openeuler/cfitsio
+ - src-openeuler/checkstyle
+ - src-openeuler/chromaprint
+ - src-openeuler/ci_check
+ - src-openeuler/ci_project
+ - src-openeuler/clamav-unofficial-sigs
+ - src-openeuler/classloader-leak-test-framework
+ - src-openeuler/codenarc
+ - src-openeuler/compat-libgfortran
+ - src-openeuler/cvsps
+ - src-openeuler/cyrus-imapd
+ - src-openeuler/debian-keyring
+ - src-openeuler/devhelp
+ - src-openeuler/DevIL
+ - src-openeuler/dict2xml
+ - src-openeuler/dietlibc
+ - src-openeuler/Done
+ - src-openeuler/eclipse
+ - src-openeuler/eclipse-jgit
+ - src-openeuler/eclipselink-persistence-api
+ - src-openeuler/efl
+ - src-openeuler/ehcache-parent
+ - src-openeuler/extlinux-bootloader
+ - src-openeuler/ezmorph
+ - src-openeuler/f29-backgrounds
+ - src-openeuler/fasterxml-oss-parent
+ - src-openeuler/fastutil
+ - src-openeuler/fcitx
+ - src-openeuler/felix-parent
+ - src-openeuler/Flask-RESTful
+ - src-openeuler/fluid-soundfont
+ - src-openeuler/fluidsynth
+ - src-openeuler/folks-telepathy
+ - src-openeuler/freexl
+ - src-openeuler/fwupdate
+ - src-openeuler/game-music-emu
+ - src-openeuler/gdal
+ - src-openeuler/gedit
+ - src-openeuler/geos
+ - src-openeuler/geronimo-interceptor
+ - src-openeuler/geronimo-validation
+ - src-openeuler/glassfish-annotation-api
+ - src-openeuler/glyphicons-halflings-fonts
+ - src-openeuler/gmetrics
+ - src-openeuler/gnome-backgrounds
+ - src-openeuler/gnome-characters
+ - src-openeuler/gnome-logs
+ - src-openeuler/gnome-remote-desktop
+ - src-openeuler/gnome-tweaks
+ - src-openeuler/google-gson
+ - src-openeuler/google-http-java-client
+ - src-openeuler/google-oauth-java-client
+ - src-openeuler/google-roboto-slab-fonts
+ - src-openeuler/gradle
+ - src-openeuler/gssntlmssp
+ - src-openeuler/gtkspell
+ - src-openeuler/gtkspell3
+ - src-openeuler/gtkspellmm30
+ - src-openeuler/guava
+ - src-openeuler/hawtjni-runtime
+ - src-openeuler/hibernate-jpa
+ - src-openeuler/http-builder
+ - src-openeuler/ibus-kkc
+ - src-openeuler/icon-naming-utils
+ - src-openeuler/imlib2
+ - src-openeuler/imsettings
+ - src-openeuler/infinipath-psm
+ - src-openeuler/inkscape
+ - src-openeuler/temporary-integration-test
+ - src-openeuler/internal-issue
+ - src-openeuler/ipython
+ - src-openeuler/irrXML
+ - src-openeuler/jackson-core
+ - src-openeuler/libburn1
+ - src-openeuler/libisofs1
+ - src-openeuler/jack-audio-connection-kit
+ - src-openeuler/jackson-annotations
+ - src-openeuler/jackson-bom
+ - src-openeuler/jackson-dataformats-binary
+ - src-openeuler/jackson-parent
+ - src-openeuler/jai-imageio-core
+ - src-openeuler/jarjar
+ - src-openeuler/jatl
+ - src-openeuler/java
+ - src-openeuler/java-base64
+ - src-openeuler/java-comment-preprocessor
+ - src-openeuler/javacc-maven-plugin
+ - src-openeuler/javaewah
+ - src-openeuler/jboss-remoting
+ - src-openeuler/jboss-transaction
+ - src-openeuler/jcodings
+ - src-openeuler/jctools
+ - src-openeuler/jdeparser
+ - src-openeuler/jenkins_project
+ - src-openeuler/jetty
+ - src-openeuler/jetty-schemas
+ - src-openeuler/jhighlight
+ - src-openeuler/js-jquery
+ - src-openeuler/js-underscore
+ - src-openeuler/jsch-agent-proxy
+ - src-openeuler/js-jquery1
+ - src-openeuler/json-lib
+ - src-openeuler/Keras
+ - src-openeuler/kiwi-dlimage
+ - src-openeuler/kiwi-template-openEuler
+ - src-openeuler/kryo
+ - src-openeuler/ladspa
+ - src-openeuler/ledmon
+ - src-openeuler/lensfun
+ - src-openeuler/libass
+ - src-openeuler/libbs2b
+ - src-openeuler/libdap
+ - src-openeuler/libEMF
+ - src-openeuler/libffado
+ - src-openeuler/libgeotiff
+ - src-openeuler/libgta
+ - src-openeuler/libkate
+ - src-openeuler/libkkc
+ - src-openeuler/libkkc-data
+ - src-openeuler/libkml
+ - src-openeuler/libmodplug
+ - src-openeuler/libofa
+ - src-openeuler/liboggz
+ - src-openeuler/liboil
+ - src-openeuler/libomp
+ - src-openeuler/libpq
+ - src-openeuler/libpsm2
+ - src-openeuler/librevenge
+ - src-openeuler/libsane-hpaio
+ - src-openeuler/libspatialite
+ - src-openeuler/libuninameslist
+ - src-openeuler/libvncserver
+ - src-openeuler/libwpd
+ - src-openeuler/libwpg
+ - src-openeuler/libxmlpp
+ - src-openeuler/lldb
+ - src-openeuler/logback
+ - src-openeuler/lohit-gurmukhi-fonts
+ - src-openeuler/lohit-odia-fonts
+ - src-openeuler/lucene
+ - src-openeuler/lzma
+ - src-openeuler/mainline.list
+ - src-openeuler/malaga
+ - src-openeuler/malaga-suomi-voikko
+ - src-openeuler/manifest
+ - src-openeuler/maven-clean-plugin
+ - src-openeuler/maven-install-plugin
+ - src-openeuler/maven-plugins-pom
+ - src-openeuler/maven-scm
+ - src-openeuler/mingw-crt
+ - src-openeuler/mingw-filesystem
+ - src-openeuler/mingw-gcc
+ - src-openeuler/mingw-srvany
+ - src-openeuler/minlog
+ - src-openeuler/mkeuleros
+ - src-openeuler/modello
+ - src-openeuler/mojo-parent
+ - src-openeuler/nautilus-sendto
+ - src-openeuler/nekohtml
+ - src-openeuler/netcdf
+ - src-openeuler/netty
+ - src-openeuler/new.list
+ - src-openeuler/objectweb-asm3
+ - src-openeuler/ocaml-calendar
+ - src-openeuler/ocaml-camlp4
+ - src-openeuler/ocaml-camomile
+ - src-openeuler/ocaml-csv
+ - src-openeuler/ocaml-curses
+ - src-openeuler/ocaml-extlib
+ - src-openeuler/ocaml-fileutils
+ - src-openeuler/ocaml-findlib
+ - src-openeuler/ocaml-gettext
+ - src-openeuler/ocaml-libvirt
+ - src-openeuler/ocaml-ounit
+ - src-openeuler/ocaml-xml-light
+ - src-openeuler/ogdi
+ - src-openeuler/ongres-scram
+ - src-openeuler/opencryptoki
+ - src-openeuler/openEuler_chroot
+ - src-openeuler/openmotif
+ - src-openeuler/openpgm
+ - src-openeuler/osgi-annotation
+ - src-openeuler/osgi-compendium
+ - src-openeuler/osgi-core
+ - src-openeuler/passivetex
+ - src-openeuler/perl-CPAN-Changes
+ - src-openeuler/perl-Crypt-CBC
+ - src-openeuler/perl-Crypt-OpenSSL-Guess
+ - src-openeuler/perl-Expect
+ - src-openeuler/perl-Mojolicious
+ - src-openeuler/perl-IO-Tty
+ - src-openeuler/perl-Net-DNS-Resolver-Mock
+ - src-openeuler/perl-Net-LibIDN2
+ - src-openeuler/perl-srpm-macros
+ - src-openeuler/perl-Test-CPAN-Meta
+ - src-openeuler/perl-Tie-IxHash
+ - src-openeuler/perl-Time-Zone
+ - src-openeuler/perl-Unix-Syslog
+ - src-openeuler/phonon-backend-gstreamer
+ - src-openeuler/physfs
+ - src-openeuler/pkgconfig
+ - src-openeuler/plexus-ant-factory
+ - src-openeuler/plexus-bsh-factory
+ - src-openeuler/plotutils
+ - src-openeuler/pmix
+ - src-openeuler/portaudio
+ - src-openeuler/potrace
+ - src-openeuler/properties-maven-plugin
+ - src-openeuler/protoparser
+ - src-openeuler/pstoedit
+ - src-openeuler/python-appdirs
+ - src-openeuler/python-Automat
+ - src-openeuler/python-backports-functools_lru_cache
+ - src-openeuler/python-backports-shutil_get_terminal_size
+ - src-openeuler/python-behave
+ - src-openeuler/python-Bottleneck
+ - src-openeuler/python-breathe
+ - src-openeuler/python-eventlet
+ - src-openeuler/python-graphviz
+ - src-openeuler/python-h5py
+ - src-openeuler/python-hpack
+ - src-openeuler/python-httpbin
+ - src-openeuler/python-hyperframe
+ - src-openeuler/python-jmespath
+ - src-openeuler/python-Keras
+ - src-openeuler/python-keras-applications
+ - src-openeuler/python-Keras_Preprocessing
+ - src-openeuler/python-latexcodec
+ - src-openeuler/python-m2r
+ - src-openeuler/python-matplotlib
+ - src-openeuler/python-mistune
+ - src-openeuler/python-netifaces
+ - src-openeuler/python-networkx
+ - src-openeuler/python-numexpr
+ - src-openeuler/python-numpydoc
+ - src-openeuler/python-orderedset
+ - src-openeuler/python-parse_type
+ - src-openeuler/python-pasta
+ - src-openeuler/python-pathlib
+ - src-openeuler/python-pexpect
+ - src-openeuler/python-pickleshare
+ - src-openeuler/python-pkgconfig
+ - src-openeuler/python-priority
+ - src-openeuler/python-prompt_toolkit
+ - src-openeuler/python-ptyprocess
+ - src-openeuler/python-pybtex
+ - src-openeuler/python-pybtex-docutils
+ - src-openeuler/python-pydotplus
+ - src-openeuler/python-pyflakes
+ - src-openeuler/python-pyglet
+ - src-openeuler/python-pyside
+ - src-openeuler/python-pytest-httpbin
+ - src-openeuler/python-rpmfluff
+ - src-openeuler/python-scour
+ - src-openeuler/python-service-identity
+ - src-openeuler/python-sphinx-bootstrap-theme
+ - src-openeuler/python-sphinxcontrib-bibtex
+ - src-openeuler/python-tables
+ - src-openeuler/python-twisted
+ - src-openeuler/python-wcwidth
+ - src-openeuler/python-zmq
+ - src-openeuler/python-h2
+ - src-openeuler/reflectasm
+ - src-openeuler/repo
+ - src-openeuler/rpm-mpi-hooks
+ - src-openeuler/rsh
+ - src-openeuler/rubygem-hpricot
+ - src-openeuler/rubygem-mustache
+ - src-openeuler/rubygem-ronn
+ - src-openeuler/sbinary
+ - src-openeuler/sbt
+ - src-openeuler/scl-utils
+ - src-openeuler/SDL_sound
+ - src-openeuler/setuptool
+ - src-openeuler/slf4j
+ - src-openeuler/sni-qt
+ - src-openeuler/sos-collector
+ - src-openeuler/spice-parent
+ - src-openeuler/sshj
+ - src-openeuler/stax2-api
+ - src-openeuler/SuperLU
+ - src-openeuler/syslinux-tftpboot
+ - src-openeuler/system-config-firewall
+ - src-openeuler/taglist-enable
+ - src-openeuler/tclx
+ - src-openeuler/teckit
+ - src-openeuler/tesla-polyglot
+ - src-openeuler/thx
+ - src-openeuler/tinyxml
+ - src-openeuler/tomcat-native
+ - src-openeuler/tslib
+ - src-openeuler/ttembed
+ - src-openeuler/ttfautohint
+ - src-openeuler/ubu-keyring
+ - src-openeuler/uniconvertor
+ - src-openeuler/uriparser
+ - src-openeuler/virt-top
+ - src-openeuler/wildfly-common
+ - src-openeuler/wildmidi
+ - src-openeuler/wxPython
+ - src-openeuler/xerces-c
+ - src-openeuler/xhtml2fo-style-xsl
+ - src-openeuler/xmlgraphics-commons
+ - src-openeuler/xmvn-connector-gradle
+ - src-openeuler/xmvn-tools
+ - src-openeuler/xorg-sgml-doctools
+ - src-openeuler/xorg-x11-docs
+ - src-openeuler/xorg-x11-drv-armsoc
+ - src-openeuler/zbar
+ - src-openeuler/zvbi
+ - src-openeuler/pysendfile
+ - src-openeuler/python-pycdlib
+ - src-openeuler/zeromq
+ - src-openeuler/zinc
+- name: oVirt
+ repositories:
+ - src-openeuler/ioprocess
+ - src-openeuler/cockpit-ovirt
+ - src-openeuler/engine-db-query
+ - src-openeuler/go-ovirt-engine-sdk4
+ - src-openeuler/imgbased
+ - src-openeuler/java-ovirt-engine-sdk4
+ - src-openeuler/mingw-spice-vdagent
+ - src-openeuler/mom
+ - src-openeuler/nsis-simple-service-plugin
+ - src-openeuler/otopi
+ - src-openeuler/ovirt-ansible-cluster-upgrade
+ - src-openeuler/ovirt-ansible-disaster-recovery
+ - src-openeuler/ovirt-ansible-engine-setup
+ - src-openeuler/ovirt-ansible-hosted-engine-setup
+ - src-openeuler/ovirt-ansible-image-template
+ - src-openeuler/ovirt-ansible-infra
+ - src-openeuler/ovirt-ansible-manageiq
+ - src-openeuler/ovirt-ansible-repositories
+ - src-openeuler/ovirt-ansible-roles
+ - src-openeuler/ovirt-ansible-shutdown-env
+ - src-openeuler/ovirt-ansible-v2v-conversion-host
+ - src-openeuler/ovirt-ansible-vm-infra
+ - src-openeuler/ovirt-cockpit-sso
+ - src-openeuler/ovirt-engine
+ - src-openeuler/ovirt-engine-api-explorer
+ - src-openeuler/ovirt-engine-appliance
+ - src-openeuler/ovirt-engine-cli
+ - src-openeuler/ovirt-engine-dwh
+ - src-openeuler/ovirt-engine-extension-aaa-ldap
+ - src-openeuler/ovirt-engine-extension-aaa-misc
+ - src-openeuler/ovirt-engine-metrics
+ - src-openeuler/ovirt-engine-nodejs
+ - src-openeuler/ovirt-engine-nodejs-modules
+ - src-openeuler/ovirt-engine-ui-extensions
+ - src-openeuler/ovirt-engine-wildfly
+ - src-openeuler/ovirt-engine-wildfly-overlay
+ - src-openeuler/ovirt-engine-yarn
+ - src-openeuler/ovirt-guest-agent
+ - src-openeuler/ovirt-guest-agent-windows
+ - src-openeuler/ovirt-guest-tools-iso
+ - src-openeuler/ovirt-host
+ - src-openeuler/ovirt-host-deploy
+ - src-openeuler/ovirt-hosted-engine-ha
+ - src-openeuler/ovirt-hosted-engine-setup
+ - src-openeuler/ovirt-imageio-common
+ - src-openeuler/ovirt-imageio-daemon
+ - src-openeuler/ovirt-imageio-proxy
+ - src-openeuler/ovirt-iso-uploader
+ - src-openeuler/ovirt-lldp-labeler
+ - src-openeuler/ovirt-log-collector
+ - src-openeuler/ovirt-node-ng
+ - src-openeuler/ovirt-node-ng-image-update
+ - src-openeuler/ovirt-provider-ovn
+ - src-openeuler/ovirt-release43
+ - src-openeuler/ovirt-scheduler-proxy
+ - src-openeuler/ovirt-setup-lib
+ - src-openeuler/ovirt-vmconsole
+ - src-openeuler/ovirt-web-ui
+ - src-openeuler/python-ovirt-engine-sdk4
+ - src-openeuler/rubygem-ovirt-engine-sdk4
+ - src-openeuler/v2v-conversion-host
+ - src-openeuler/vcredist
+ - src-openeuler/vdsm
+ - src-openeuler/vdsm-jsonrpc-java
+ - src-openeuler/java-client-kubevirt
+ - src-openeuler/ovirt-engine-extension-aaa-jdbc
+ - src-openeuler/ovirt-engine-extension-logger-log4j
+ - src-openeuler/ovirt-engine-extensions-api
+ - src-openeuler/ovirt-imageio
+ - src-openeuler/ovirt-jboss-modules-maven-plugin
+ - src-openeuler/safelease
+ - src-openeuler/ovirt-engine-api-model
+- name: sig-REDF
+ repositories:
+ - openeuler/redf
+ - src-openeuler/redf
+- name: Marketing
+ repositories:
+ - openeuler/marketing
+- name: security-committee
+ repositories:
+ - openeuler/security-committee
+ - openeuler/security
+- name: dev-utils
+ repositories:
+ - openeuler/abichecker
+ - openeuler/auto_py2to3
+ - openeuler/nodejsporter
+ - openeuler/openEuler-bootstrap
+ - openeuler/openEuler-pkginfo
+ - openeuler/perlporter
+ - openeuler/pkgporter
+ - openeuler/pyporter
+ - openeuler/rubyporter
+ - openeuler/trucker
+ - src-openeuler/ansible
+ - src-openeuler/antlr
+ - src-openeuler/apache-commons-collections4
+ - src-openeuler/apache-commons-digester
+ - src-openeuler/apache-commons-fileupload
+ - src-openeuler/apache-commons-jexl
+ - src-openeuler/apache-commons-math
+ - src-openeuler/apache-commons-pool2
+ - src-openeuler/apache-log4j-extras
+ - src-openeuler/apache-poi
+ - src-openeuler/apache-sshd
+ - src-openeuler/apacheds-ldap-api
+ - src-openeuler/apiviz
+ - src-openeuler/aries-blueprint-api
+ - src-openeuler/aries-quiesce-api
+ - src-openeuler/aries-util
+ - src-openeuler/asymptote
+ - src-openeuler/atop
+ - src-openeuler/auto
+ - src-openeuler/automoc
+ - src-openeuler/bam
+ - src-openeuler/base64coder
+ - src-openeuler/bcc
+ - src-openeuler/bcel
+ - src-openeuler/bcftools
+ - src-openeuler/bcrypt
+ - src-openeuler/bea-stax
+ - src-openeuler/beust-jcommander
+ - src-openeuler/bouncycastle
+ - src-openeuler/bpftrace
+ - src-openeuler/bridge-method-injector
+ - src-openeuler/brpc
+ - src-openeuler/bsf
+ - src-openeuler/buildroot
+ - src-openeuler/caffeine
+ - src-openeuler/cal10n
+ - src-openeuler/castor-maven-plugin
+ - src-openeuler/catch1
+ - src-openeuler/cglib
+ - src-openeuler/ck
+ - src-openeuler/cloc
+ - src-openeuler/colm
+ - src-openeuler/colordiff
+ - src-openeuler/concurrent-trees
+ - src-openeuler/coro-mock
+ - src-openeuler/cpp-httplib
+ - src-openeuler/cpuid
+ - src-openeuler/cryptacular
+ - src-openeuler/csmith
+ - src-openeuler/ct-ng
+ - src-openeuler/curator
+ - src-openeuler/curvesapi
+ - src-openeuler/dbus-cpp
+ - src-openeuler/dbusmenu-qt
+ - src-openeuler/delve
+ - src-openeuler/dleyna-connector-dbus
+ - src-openeuler/dleyna-core
+ - src-openeuler/ecj
+ - src-openeuler/emma
+ - src-openeuler/enca
+ - src-openeuler/extra-cmake-modules
+ - src-openeuler/f2fs-tools
+ - src-openeuler/fcgi
+ - src-openeuler/figlet
+ - src-openeuler/fping
+ - src-openeuler/freeimage
+ - src-openeuler/freemarker
+ - src-openeuler/GAPP
+ - src-openeuler/geronimo-ejb
+ - src-openeuler/geronimo-jaspic-spec
+ - src-openeuler/geronimo-jcache
+ - src-openeuler/geronimo-jcdi-1.0-api
+ - src-openeuler/geronimo-jpa
+ - src-openeuler/geronimo-osgi-support
+ - src-openeuler/git-lfs
+ - src-openeuler/git-tools
+ - src-openeuler/glassfish-dtd-parser
+ - src-openeuler/glassfish-jaxb
+ - src-openeuler/glassfish-jsp
+ - src-openeuler/grizzly
+ - src-openeuler/gtkmm24
+ - src-openeuler/hamcrest
+ - src-openeuler/hardinfo
+ - src-openeuler/hawtdispatch
+ - src-openeuler/hello
+ - src-openeuler/hping
+ - src-openeuler/htop
+ - src-openeuler/htslib
+ - src-openeuler/http_load
+ - src-openeuler/httpcomponents-project
+ - src-openeuler/iftop
+ - src-openeuler/iniparser
+ - src-openeuler/iozone
+ - src-openeuler/ipwatchd
+ - src-openeuler/jakarta-oro
+ - src-openeuler/java_cup
+ - src-openeuler/javaparser
+ - src-openeuler/jBCrypt
+ - src-openeuler/jboss-annotations-1.2-api
+ - src-openeuler/jboss-connector-1.6-api
+ - src-openeuler/jboss-jaxrs-2.0-api
+ - src-openeuler/jboss-jsf-2.1-api
+ - src-openeuler/jboss-jsp-2.3-api
+ - src-openeuler/jboss-jstl-1.2-api
+ - src-openeuler/jboss-servlet-3.1-api
+ - src-openeuler/jboss-stdio
+ - src-openeuler/jboss-websocket-1.0-api
+ - src-openeuler/jetbrains-annotations
+ - src-openeuler/jettison
+ - src-openeuler/jetty-parent
+ - src-openeuler/jexcelapi
+ - src-openeuler/jffi
+ - src-openeuler/jnr-constants
+ - src-openeuler/jnr-enxio
+ - src-openeuler/jnr-ffi
+ - src-openeuler/jnr-netdb
+ - src-openeuler/jnr-posix
+ - src-openeuler/jnr-unixsocket
+ - src-openeuler/joda-convert
+ - src-openeuler/joni
+ - src-openeuler/jopt-simple
+ - src-openeuler/jredis
+ - src-openeuler/js-excanvas
+ - src-openeuler/junit
+ - src-openeuler/junit5
+ - src-openeuler/kelbt
+ - src-openeuler/kf5
+ - src-openeuler/kscreenlocker
+ - src-openeuler/ldapjdk
+ - src-openeuler/libecb
+ - src-openeuler/libgpod
+ - src-openeuler/libgssglue
+ - src-openeuler/libhandy
+ - src-openeuler/libkeepalive
+ - src-openeuler/librpcsecgss
+ - src-openeuler/libwpe
+ - src-openeuler/libyubikey
+ - src-openeuler/lmbench
+ - src-openeuler/log4cplus
+ - src-openeuler/log4cpp
+ - src-openeuler/maven-osgi
+ - src-openeuler/memleax
+ - src-openeuler/memtester
+ - src-openeuler/miniasm
+ - src-openeuler/minimap2
+ - src-openeuler/mocha
+ - src-openeuler/mock
+ - src-openeuler/morphia
+ - src-openeuler/multitail
+ - src-openeuler/mysql-connector-java
+ - src-openeuler/ncdu
+ - src-openeuler/nethogs
+ - src-openeuler/netperf
+ - src-openeuler/neXtaw
+ - src-openeuler/nmon
+ - src-openeuler/openEuler-pkginfo
+ - src-openeuler/options
+ - src-openeuler/p7zip
+ - src-openeuler/parfait
+ - src-openeuler/PEGTL
+ - src-openeuler/portals-pom
+ - src-openeuler/portlet-2.0-api
+ - src-openeuler/pyporter
+ - src-openeuler/pyusb
+ - src-openeuler/R-knitr
+ - src-openeuler/ragel
+ - src-openeuler/ranger
+ - src-openeuler/relaxngcc
+ - src-openeuler/relaxngDatatype
+ - src-openeuler/rpm-ostree
+ - src-openeuler/s-tui
+ - src-openeuler/samtools
+ - src-openeuler/saxon
+ - src-openeuler/slurm
+ - src-openeuler/sqlite-jdbc
+ - src-openeuler/stax-ex
+ - src-openeuler/stress-ng
+ - src-openeuler/stringtemplate
+ - src-openeuler/sysbench
+ - src-openeuler/sysget
+ - src-openeuler/systemd-bootchart
+ - src-openeuler/the_silver_searcher
+ - src-openeuler/tig
+ - src-openeuler/tito
+ - src-openeuler/unixbench
+ - src-openeuler/uom-se
+ - src-openeuler/webbench
+ - src-openeuler/woodstox-core
+ - src-openeuler/wpebackend-fdo
+ - src-openeuler/ws-commons-util
+ - src-openeuler/xom
+ - src-openeuler/ykpers
+- name: sig-mate-desktop
+ repositories:
+ - openeuler/mate-desktop
+ - src-openeuler/caja
+ - src-openeuler/caja-extensions
+ - src-openeuler/cjkuni-uming-fonts
+ - src-openeuler/eom
+ - src-openeuler/fcitx-configtool
+ - src-openeuler/gajim
+ - src-openeuler/gcolor2
+ - src-openeuler/glade3
+ - src-openeuler/gparted
+ - src-openeuler/gtk-layer-shell
+ - src-openeuler/gtk-murrine-engine
+ - src-openeuler/gtk2-engines
+ - src-openeuler/gtksourceview4
+ - src-openeuler/gucharmap
+ - src-openeuler/im-chooser
+ - src-openeuler/libXpresent
+ - src-openeuler/libmatekbd
+ - src-openeuler/libmatemixer
+ - src-openeuler/libmateweather
+ - src-openeuler/libwnck
+ - src-openeuler/marco
+ - src-openeuler/mate-applets
+ - src-openeuler/mate-backgrounds
+ - src-openeuler/mate-calc
+ - src-openeuler/mate-common
+ - src-openeuler/mate-control-center
+ - src-openeuler/mate-desktop
+ - src-openeuler/mate-icon-theme
+ - src-openeuler/mate-media
+ - src-openeuler/mate-menus
+ - src-openeuler/mate-notification-daemon
+ - src-openeuler/mate-panel
+ - src-openeuler/mate-polkit
+ - src-openeuler/mate-power-manager
+ - src-openeuler/mate-screensaver
+ - src-openeuler/mate-session-manager
+ - src-openeuler/mate-settings-daemon
+ - src-openeuler/mate-system-monitor
+ - src-openeuler/mate-terminal
+ - src-openeuler/mate-themes
+ - src-openeuler/mate-user-guide
+ - src-openeuler/mate-utils
+ - src-openeuler/open-chinese-fonts
+ - src-openeuler/pangox-compat
+ - src-openeuler/perl-ExtUtils-Depends
+ - src-openeuler/perl-ExtUtils-PkgConfig
+ - src-openeuler/perl-Glib
+ - src-openeuler/python-cssutils
+ - src-openeuler/python-nbxmpp
+ - src-openeuler/python-precis_i18n
+ - src-openeuler/re2c
+ - src-openeuler/system-config-users
+ - src-openeuler/system-config-users-docs
+ - src-openeuler/unique3
+ - src-openeuler/wireless-tools
+- name: sig-bounds_checking_function
+ repositories:
+ - openeuler/bounds_checking_function
+ - src-openeuler/bounds_checking_function
+- name: sig-UKUI
+ repositories:
+ - src-openeuler/qt5-ukui-platformtheme
+ - src-openeuler/peony
+ - src-openeuler/ukui-control-center
+ - src-openeuler/ukui-sidebar
+ - src-openeuler/ukui-panel
+ - src-openeuler/ukui-window-switch
+ - src-openeuler/ukui-power-manager
+ - src-openeuler/ukui-screensaver
+ - src-openeuler/ukui-media
+ - src-openeuler/ukui-menu
+ - src-openeuler/ukui-session-manager
+ - src-openeuler/ukui-settings-daemon
+ - src-openeuler/kylin-nm
+ - src-openeuler/ukui-themes
+ - src-openeuler/ukui-biometric-manager
+ - src-openeuler/ukui-biometric-auth
+ - src-openeuler/peony-extensions
+ - src-openeuler/ukui-greeter
+ - src-openeuler/ukylin-feedback-client
+ - src-openeuler/ukwm
+ - src-openeuler/ukui-interface
+ - src-openeuler/ukui-screenshot
+ - src-openeuler/ukui-indicators
+ - src-openeuler/ukui-desktop-environment
+ - src-openeuler/biometric-authentication
+ - src-openeuler/attica
+ - src-openeuler/bamf
+ - src-openeuler/grantlee
+ - src-openeuler/gsettings-qt
+ - src-openeuler/kf5-karchive
+ - src-openeuler/kf5-kauth
+ - src-openeuler/kf5-kcodecs
+ - src-openeuler/kf5-kconfig
+ - src-openeuler/kf5-kconfigwidgets
+ - src-openeuler/kf5-kcoreaddons
+ - src-openeuler/kf5-kdoctools
+ - src-openeuler/kf5-kguiaddons
+ - src-openeuler/kf5-ki18n
+ - src-openeuler/kf5-kidletime
+ - src-openeuler/kf5-kwayland
+ - src-openeuler/kf5-kwidgetsaddons
+ - src-openeuler/kf5-kwindowsystem
+ - src-openeuler/kf5-solid
+ - src-openeuler/libkscreen-qt5
+ - src-openeuler/libqtxdg
+ - src-openeuler/libstatgrab
+ - src-openeuler/libsysstat
+ - src-openeuler/libupnp
+ - src-openeuler/lxqt-build-tools
+ - src-openeuler/polkit-qt-1
+ - src-openeuler/qjson
+ - src-openeuler/qt5-qtcharts
+ - src-openeuler/qtchooser
+ - src-openeuler/redshift
+ - src-openeuler/shared-desktop-ontologies
+ - src-openeuler/ubuntukylin-default-settings
+ - src-openeuler/ukui-system-monitor
+ - src-openeuler/ukui-wallpapers
+ - src-openeuler/libchamplain
+ - src-openeuler/atril
+ - src-openeuler/mathjax
+ - src-openeuler/shotwell
+ - src-openeuler/engrampa
+- name: sig-recycle
+ repositories:
+ - src-openeuler/cmockery
+ - src-openeuler/jasper
+ - src-openeuler/liberation-sans-fonts
+ - src-openeuler/libibmad
+ - src-openeuler/python2
+ - src-openeuler/caffe
+ - src-openeuler/shim-unsigned-aarch64
+ - src-openeuler/subscription-manager
+ - src-openeuler/redhat-menus
+ - src-openeuler/golang-github-cpuguy83-go-md2man
+ - src-openeuler/golang-github-fsnotify-fsnotify
+ - src-openeuler/golang-github-go-tomb-tomb
+ - src-openeuler/golang-github-hpcloud-tail
+ - src-openeuler/golang-github-onsi-ginkgo
+ - src-openeuler/golang-github-onsi-gomega
+ - src-openeuler/golang-googlecode-go-crypto
+ - src-openeuler/golang-googlecode-net
+ - src-openeuler/golang-googlecode-text
+ - src-openeuler/golang-googlecode-tools
+ - src-openeuler/golang-gopkg-yaml
+ - src-openeuler/golang-googlecode-goprotobuf
+ - src-openeuler/golang-github-vishvananda-netns
+ - src-openeuler/golang-github-golang-sys
+ - src-openeuler/golang-github-vishvananda-netlink
+ - src-openeuler/golang-github-d2g-dhcp4
+ - src-openeuler/golang-github-coreos-go-iptables
+ - src-openeuler/golang-github-russross-blackfriday
+ - src-openeuler/yum-metadata-parser
+ - src-openeuler/hardlink
+ - src-openeuler/langpacks
+ - src-openeuler/hesiod
+ - src-openeuler/libmodman
+ - src-openeuler/tpm2-abrmd-selinux
+ - src-openeuler/oci-systemd-hook
+ - src-openeuler/openvswitch-kmod
+ - src-openeuler/docker-anaconda-addon
+- name: sig-RaspberryPi
+ repositories:
+ - openeuler/raspberrypi
+ - openeuler/raspberrypi-kernel
+ - src-openeuler/raspberrypi-kernel
+ - src-openeuler/raspberrypi-firmware
+ - src-openeuler/raspberrypi-build
+ - src-openeuler/raspberrypi-bluetooth
+ - openeuler/raspberrypi-build
+- name: sig-Ha
+ repositories:
+ - src-openeuler/pacemaker
+ - src-openeuler/corosync
+ - src-openeuler/pcs
+ - openeuler/pacemaker-mgmt
+ - openeuler/ha-api
+ - openeuler/ha-web
+ - src-openeuler/pacemaker-mgmt
+ - src-openeuler/ha-api
+ - src-openeuler/ha-web
+ - src-openeuler/fence-agents
+ - src-openeuler/fence-virt
+ - src-openeuler/sbd
+ - src-openeuler/corosync-qdevice
+ - src-openeuler/drbd
+ - src-openeuler/drbd-utils
+- name: sig-QA
+ repositories:
+ - openeuler/QA
+ - openeuler/avocado
+ - openeuler/avocado-vt
+ - openeuler/tp-libvirt
+ - openeuler/tp-qemu
+ - openeuler/EulerRobot
+ - openeuler/integration-test
+ - openeuler/container-test
+ - openeuler/compiler-test
+ - openeuler/package-reinforce-test
+ - openeuler/test-tools
+- name: sig-KIRAN-DESKTOP
+ repositories:
+ - src-openeuler/kiran-avatar-editor
+ - src-openeuler/kiran-gtk-theme
+ - src-openeuler/kiran-icon-theme
+ - src-openeuler/kiran-menu
+ - src-openeuler/kiran-screensaver-dialog
+ - src-openeuler/kiran-themes
+ - src-openeuler/kiran-wallpapers
+ - src-openeuler/lightdm-kiran-greeter
+ - src-openeuler/plymouth-theme-kiran
+- name: sig-ROS
+ repositories:
+ - openeuler/ros
+ - src-openeuler/catkin
+ - src-openeuler/class_loader
+ - src-openeuler/cmake_modules
+ - src-openeuler/gencpp
+ - src-openeuler/geneus
+ - src-openeuler/genlisp
+ - src-openeuler/genpy
+ - src-openeuler/gennodejs
+ - src-openeuler/genmsg
+ - src-openeuler/std_msgs
+ - src-openeuler/message_generation
+ - src-openeuler/ros_environment
+ - src-openeuler/message_runtime
+ - src-openeuler/roscpp_core
+ - src-openeuler/ros
+ - src-openeuler/rosconsole
+ - src-openeuler/roslisp
+ - src-openeuler/rospack
+ - src-openeuler/ros_comm_msgs
+ - src-openeuler/pluginlib
+ - src-openeuler/ros_comm
+- name: sig-ai-bigdata
+ repositories:
+ - src-openeuler/arm-ml-examples
+ - src-openeuler/armnn
+ - src-openeuler/bazel
+ - src-openeuler/blaze
+ - src-openeuler/ComputeLibrary
+ - src-openeuler/dlib
+ - src-openeuler/eigen
+ - src-openeuler/eli5
+ - src-openeuler/ensmallen
+ - src-openeuler/epstool
+ - src-openeuler/flink
+ - src-openeuler/ftgl
+ - src-openeuler/gl2ps
+ - src-openeuler/glpk
+ - src-openeuler/hadoop
+ - src-openeuler/hbase
+ - src-openeuler/hive
+ - src-openeuler/ibis
+ - src-openeuler/incubator-mxnet
+ - src-openeuler/jupyter
+ - src-openeuler/kafka
+ - src-openeuler/libhdfs
+ - src-openeuler/libiodbc
+ - src-openeuler/libmetal
+ - src-openeuler/libsvm
+ - src-openeuler/libxsmm
+ - src-openeuler/lightgbm
+ - src-openeuler/lzip
+ - src-openeuler/mlpack
+ - src-openeuler/octave
+ - src-openeuler/oneDNN
+ - src-openeuler/opencl
+ - src-openeuler/opencl-filesystem
+ - src-openeuler/opencl-headers
+ - src-openeuler/opencv
+ - src-openeuler/opennn
+ - src-openeuler/presto
+ - src-openeuler/pytorch
+ - src-openeuler/qrupdate
+ - src-openeuler/qscintilla
+ - src-openeuler/rain
+ - src-openeuler/Shark
+ - src-openeuler/spark
+ - src-openeuler/sundials
+ - src-openeuler/SuperLUMT
+ - src-openeuler/tensorflow
+ - src-openeuler/zeppelin
+ - src-openeuler/zookeeper
+- name: sig-golang
+ repositories:
+ - src-openeuler/golang
+- name: sig-EasyLife
+ repositories:
+ - openeuler/openEuler-Advisor
+ - src-openeuler/pkgship
+ - src-openeuler/abi-compliance-checker
+ - src-openeuler/abi-dumper
+ - src-openeuler/patch-tracking
+- name: sig-ceph
+ repositories:
+ - src-openeuler/ceph
+ - src-openeuler/ceph-deploy
+ - src-openeuler/ceph-ansible
+- name: sig-security-facility
+ repositories:
+ - openeuler/security-tool
+ - openeuler/attest-tools
+ - openeuler/digest-list-tools
+ - src-openeuler/mysql-selinux
+ - src-openeuler/pesign-obs-integration
+ - src-openeuler/tss2
+ - src-openeuler/oscap-anaconda-addon
+ - src-openeuler/certmonger
+ - src-openeuler/keycloak-httpd-client-install
+ - src-openeuler/mod_auth_openidc
+ - src-openeuler/mod_authnz_pam
+ - src-openeuler/attest-tools
+ - src-openeuler/digest-list-tools
+ - src-openeuler/apparmor
+ - src-openeuler/cryptopp
+ - src-openeuler/tpm2-tools
+ - src-openeuler/setroubleshoot
+ - src-openeuler/openssl
+ - src-openeuler/tpm2-abrmd
+ - src-openeuler/libselinux
+ - src-openeuler/libsepol
+ - src-openeuler/keyutils
+ - src-openeuler/mcstrans
+ - src-openeuler/selinux-policy
+ - src-openeuler/crypto-policies
+ - src-openeuler/checkpolicy
+ - src-openeuler/libcap
+ - src-openeuler/gnupg2
+ - src-openeuler/cracklib
+ - src-openeuler/policycoreutils
+ - src-openeuler/pyOpenSSL
+ - src-openeuler/libsemanage
+ - src-openeuler/openssl-pkcs11
+ - src-openeuler/gnutls
+ - src-openeuler/mokutil
+ - src-openeuler/pam
+ - src-openeuler/libpwquality
+ - src-openeuler/softhsm
+ - src-openeuler/nss
+ - src-openeuler/security-tool
+ - src-openeuler/tpm2-tss
+ - src-openeuler/audit
+ - src-openeuler/nss-pem
+ - src-openeuler/swtpm
+ - src-openeuler/libtpms
+- name: sig-Compatibility-Infra
+ repositories:
+ - openeuler/oec-hardware
+ - openeuler/oec-application
+ - src-openeuler/oec-hardware
+ - src-openeuler/oec-application
+- name: sig-cms
+ repositories:
+ - src-openeuler/doracms
+- name: sig-RISC-V
+ repositories:
+ - openeuler/RISC-V
+ - src-openeuler/risc-v-kernel
+ - src-openeuler/opensbi
+- name: sig-android-middleware
+ repositories:
+ - openeuler/android-emulator
+ - openeuler/anbox
+ - src-openeuler/platform_hardware_libhardware_legacy
+ - src-openeuler/platform_hardware_ril
+ - src-openeuler/platform_frameworks_base
+ - src-openeuler/platform_frameworks_native
+ - src-openeuler/platform_frameworks_opt_net_wifi
+ - src-openeuler/platform_system_core
+ - src-openeuler/platform_packages_apps_DeskClock
+ - src-openeuler/platform_packages_apps_PackageInstaller
+ - src-openeuler/platform_build
+ - src-openeuler/platform_manifests
+- name: sig-perl-modules
+ repositories:
+ - src-openeuler/biber
+ - src-openeuler/inst-source-utils
+ - src-openeuler/latexmk
+ - src-openeuler/perl-accessors
+ - src-openeuler/perl-Acme-Damn
+ - src-openeuler/perl-Algorithm-Combinatorics
+ - src-openeuler/perl-Algorithm-Dependency
+ - src-openeuler/perl-Algorithm-Diff
+ - src-openeuler/perl-Algorithm-Diff-XS
+ - src-openeuler/perl-Algorithm-Loops
+ - src-openeuler/perl-Algorithm-LUHN
+ - src-openeuler/perl-Algorithm-NaiveBayes
+ - src-openeuler/perl-aliased
+ - src-openeuler/perl-Alien-Build
+ - src-openeuler/perl-Alien-Libxml2
+ - src-openeuler/perl-Alien-Packages
+ - src-openeuler/perl-Any-Moose
+ - src-openeuler/perl-Any-URI-Escape
+ - src-openeuler/perl-AnyEvent
+ - src-openeuler/perl-Apache-LogFormat-Compiler
+ - src-openeuler/perl-Apache-Session
+ - src-openeuler/perl-Apache-Session-Wrapper
+ - src-openeuler/perl-App-Cmd
+ - src-openeuler/perl-App-FatPacker
+ - src-openeuler/perl-AppConfig
+ - src-openeuler/perl-Archive-Any-Lite
+ - src-openeuler/perl-Archive-Tar
+ - src-openeuler/perl-autobox
+ - src-openeuler/perl-autobox-Core
+ - src-openeuler/perl-autodie
+ - src-openeuler/perl-B-Compiling
+ - src-openeuler/perl-B-COW
+ - src-openeuler/perl-B-Debug
+ - src-openeuler/perl-B-Hooks-EndOfScope
+ - src-openeuler/perl-B-Hooks-OP-Annotation
+ - src-openeuler/perl-B-Hooks-OP-Check
+ - src-openeuler/perl-B-Hooks-OP-PPAddr
+ - src-openeuler/perl-B-Hooks-Parser
+ - src-openeuler/perl-B-Keywords
+ - src-openeuler/perl-B-Utils
+ - src-openeuler/perl-bareword-filehandles
+ - src-openeuler/perl-Biblio-EndnoteStyle
+ - src-openeuler/perl-BibTeX-Parser
+ - src-openeuler/perl-bignum
+ - src-openeuler/perl-Browser-Open
+ - src-openeuler/perl-Business-CreditCard
+ - src-openeuler/perl-Business-Hours
+ - src-openeuler/perl-Business-ISMN
+ - src-openeuler/perl-Business-ISSN
+ - src-openeuler/perl-Business-Stripe
+ - src-openeuler/perl-Cache-Cache
+ - src-openeuler/perl-Cache-FastMmap
+ - src-openeuler/perl-Cache-LRU
+ - src-openeuler/perl-Cache-Memcached
+ - src-openeuler/perl-CAD-Format-STL
+ - src-openeuler/perl-Carp
+ - src-openeuler/perl-Carp-Assert
+ - src-openeuler/perl-Carp-Assert-More
+ - src-openeuler/perl-Carp-Fix-1_25
+ - src-openeuler/perl-Carton
+ - src-openeuler/perl-Catalyst-Manual
+ - src-openeuler/perl-Catalyst-Plugin-CustomErrorMessage
+ - src-openeuler/perl-CBOR-XS
+ - src-openeuler/perl-CDDB
+ - src-openeuler/perl-CGI-Ajax
+ - src-openeuler/perl-CGI-Application
+ - src-openeuler/perl-CGI-Application-Plugin-ConfigAuto
+ - src-openeuler/perl-CGI-Application-Plugin-DBH
+ - src-openeuler/perl-CGI-Application-Plugin-DBIC-Schema
+ - src-openeuler/perl-CGI-Application-Plugin-DevPopup
+ - src-openeuler/perl-CGI-Application-Plugin-ErrorPage
+ - src-openeuler/perl-CGI-Application-Plugin-FillInForm
+ - src-openeuler/perl-CGI-Application-Plugin-FormState
+ - src-openeuler/perl-CGI-Application-Plugin-JSON
+ - src-openeuler/perl-CGI-Application-Plugin-LinkIntegrity
+ - src-openeuler/perl-CGI-Application-Plugin-MessageStack
+ - src-openeuler/perl-CGI-Application-Plugin-Redirect
+ - src-openeuler/perl-CGI-Application-Plugin-Session
+ - src-openeuler/perl-CGI-Application-Plugin-Stream
+ - src-openeuler/perl-CGI-Application-Plugin-TT
+ - src-openeuler/perl-CGI-Application-PSGI
+ - src-openeuler/perl-CGI-Application-Standard-Config
+ - src-openeuler/perl-CGI-Deurl-XS
+ - src-openeuler/perl-CGI-Emulate-PSGI
+ - src-openeuler/perl-CGI-Ex
+ - src-openeuler/perl-CGI-Fast
+ - src-openeuler/perl-CGI-FormBuilder
+ - src-openeuler/perl-CGI-Prototype
+ - src-openeuler/perl-CGI-PSGI
+ - src-openeuler/perl-CGI-Session
+ - src-openeuler/perl-CGI-Session-Driver-memcached
+ - src-openeuler/perl-CGI-Simple
+ - src-openeuler/perl-CGI-Struct
+ - src-openeuler/perl-Chatbot-Eliza
+ - src-openeuler/perl-Check-ISA
+ - src-openeuler/perl-Child
+ - src-openeuler/perl-ClamAV-Client
+ - src-openeuler/perl-CLASS
+ - src-openeuler/perl-Class-Accessor
+ - src-openeuler/perl-Class-Accessor-Chained
+ - src-openeuler/perl-Class-Accessor-Classy
+ - src-openeuler/perl-Class-Accessor-Grouped
+ - src-openeuler/perl-Class-Accessor-Lite
+ - src-openeuler/perl-Class-Adapter
+ - src-openeuler/perl-Class-Autouse
+ - src-openeuler/perl-Class-Base
+ - src-openeuler/perl-Class-C3
+ - src-openeuler/perl-Class-C3-Adopt-NEXT
+ - src-openeuler/perl-Class-C3-Componentised
+ - src-openeuler/perl-Class-C3-XS
+ - src-openeuler/perl-Class-Can
+ - src-openeuler/perl-Class-Container
+ - src-openeuler/perl-Class-Data-Accessor
+ - src-openeuler/perl-Class-Date
+ - src-openeuler/perl-Class-ErrorHandler
+ - src-openeuler/perl-Class-Factory-Util
+ - src-openeuler/perl-Class-Field
+ - src-openeuler/perl-Class-ISA
+ - src-openeuler/perl-Class-Load
+ - src-openeuler/perl-Class-Load-XS
+ - src-openeuler/perl-Class-MethodMaker
+ - src-openeuler/perl-Class-Prototyped
+ - src-openeuler/perl-Class-Refresh
+ - src-openeuler/perl-Class-ReturnValue
+ - src-openeuler/perl-Class-Std
+ - src-openeuler/perl-Class-Std-Fast
+ - src-openeuler/perl-Class-Throwable
+ - src-openeuler/perl-Class-Tiny
+ - src-openeuler/perl-Class-Trigger
+ - src-openeuler/perl-Class-Unload
+ - src-openeuler/perl-Class-Utils
+ - src-openeuler/perl-Class-Virtual
+ - src-openeuler/perl-Clipboard
+ - src-openeuler/perl-Clone
+ - src-openeuler/perl-Clone-Choose
+ - src-openeuler/perl-Clone-PP
+ - src-openeuler/perl-Color-Library
+ - src-openeuler/perl-Command-Runner
+ - src-openeuler/perl-Commandable
+ - src-openeuler/perl-Compress-LZ4
+ - src-openeuler/perl-Compress-LZF
+ - src-openeuler/perl-Compress-Raw-Bzip2
+ - src-openeuler/perl-Compress-Raw-Zlib
+ - src-openeuler/perl-Compress-Snappy
+ - src-openeuler/perl-Config-Any
+ - src-openeuler/perl-Config-Auto
+ - src-openeuler/perl-Config-Extend-MySQL
+ - src-openeuler/perl-Config-GitLike
+ - src-openeuler/perl-Config-Grammar
+ - src-openeuler/perl-Config-INI
+ - src-openeuler/perl-Config-INI-Reader-Multiline
+ - src-openeuler/perl-Config-INI-Reader-Ordered
+ - src-openeuler/perl-Config-Perl-V
+ - src-openeuler/perl-Config-Properties
+ - src-openeuler/perl-Config-Std
+ - src-openeuler/perl-Config-Tiny
+ - src-openeuler/perl-Config-ZOMG
+ - src-openeuler/perl-Const-Fast
+ - src-openeuler/perl-constant
+ - src-openeuler/perl-constant-boolean
+ - src-openeuler/perl-constant-defer
+ - src-openeuler/perl-constant-tiny
+ - src-openeuler/perl-Context-Preserve
+ - src-openeuler/perl-Contextual-Return
+ - src-openeuler/perl-Convert-ASN1
+ - src-openeuler/perl-Convert-Base32
+ - src-openeuler/perl-Convert-Base64
+ - src-openeuler/perl-Convert-Bencode
+ - src-openeuler/perl-Convert-BER
+ - src-openeuler/perl-Convert-Binary-C
+ - src-openeuler/perl-Convert-BinHex
+ - src-openeuler/perl-Convert-Color
+ - src-openeuler/perl-Convert-Color-XTerm
+ - src-openeuler/perl-Convert-NLS_DATE_FORMAT
+ - src-openeuler/perl-Convert-TNEF
+ - src-openeuler/perl-Convert-UU
+ - src-openeuler/perl-Cookie-Baker
+ - src-openeuler/perl-CPAN-Common-Index
+ - src-openeuler/perl-CPAN-DistnameInfo
+ - src-openeuler/perl-CPAN-Meta
+ - src-openeuler/perl-CPAN-Meta-Check
+ - src-openeuler/perl-CPAN-Meta-Requirements
+ - src-openeuler/perl-CPAN-Meta-YAML
+ - src-openeuler/perl-Cpanel-JSON-XS
+ - src-openeuler/perl-Crypt-Blowfish
+ - src-openeuler/perl-Crypt-ECB
+ - src-openeuler/perl-Crypt-GeneratePassword
+ - src-openeuler/perl-Crypt-GPG
+ - src-openeuler/perl-Crypt-IDEA
+ - src-openeuler/perl-Crypt-OpenSSL-DSA
+ - src-openeuler/perl-Crypt-OpenSSL-EC
+ - src-openeuler/perl-Crypt-OpenSSL-PKCS10
+ - src-openeuler/perl-Crypt-OpenSSL-X509
+ - src-openeuler/perl-Crypt-RandPasswd
+ - src-openeuler/perl-Crypt-Rijndael
+ - src-openeuler/perl-Crypt-Salsa20
+ - src-openeuler/perl-Crypt-SaltedHash
+ - src-openeuler/perl-Crypt-ScryptKDF
+ - src-openeuler/perl-Crypt-UnixCrypt_XS
+ - src-openeuler/perl-Crypt-URandom
+ - src-openeuler/perl-Crypt-X509
+ - src-openeuler/perl-CSS-DOM
+ - src-openeuler/perl-CSS-Minifier-XS
+ - src-openeuler/perl-CSS-Squish
+ - src-openeuler/perl-CSS-Tiny
+ - src-openeuler/perl-curry
+ - src-openeuler/perl-Cwd-Guard
+ - src-openeuler/perl-Cwd-utf8
+ - src-openeuler/perl-Daemon-Control
+ - src-openeuler/perl-Data-AsObject
+ - src-openeuler/perl-Data-Binary
+ - src-openeuler/perl-Data-Compare
+ - src-openeuler/perl-Data-Dmp
+ - src-openeuler/perl-Data-Dump-Streamer
+ - src-openeuler/perl-Data-Dumper
+ - src-openeuler/perl-Data-Dumper-Concise
+ - src-openeuler/perl-Data-Dumper-Names
+ - src-openeuler/perl-Data-Munge
+ - src-openeuler/perl-Data-Page
+ - src-openeuler/perl-Data-Perl
+ - src-openeuler/perl-Data-Section-Simple
+ - src-openeuler/perl-Data-Stream-Bulk
+ - src-openeuler/perl-Data-TreeDumper
+ - src-openeuler/perl-Data-Tumbler
+ - src-openeuler/perl-Data-Validate-Type
+ - src-openeuler/perl-Database-DumpTruck
+ - src-openeuler/perl-Date-Calc-XS
+ - src-openeuler/perl-Date-Easter
+ - src-openeuler/perl-Date-Holidays-DE
+ - src-openeuler/perl-Date-ISO8601
+ - src-openeuler/perl-Date-JD
+ - src-openeuler/perl-Date-Leapyear
+ - src-openeuler/perl-Date-Simple
+ - src-openeuler/perl-Date-Tiny
+ - src-openeuler/perl-DB_File
+ - src-openeuler/perl-DBD-Mock
+ - src-openeuler/perl-DBD-Pg
+ - src-openeuler/perl-DBD-SQLite2
+ - src-openeuler/perl-DBD-XBase
+ - src-openeuler/perl-DBI
+ - src-openeuler/perl-DBICx-AutoDoc
+ - src-openeuler/perl-DBIx-Class
+ - src-openeuler/perl-DBIx-Class-Candy
+ - src-openeuler/perl-DBIx-Class-Cursor-Cached
+ - src-openeuler/perl-DBIx-Class-IntrospectableM2M
+ - src-openeuler/perl-DBIx-Class-OptimisticLocking
+ - src-openeuler/perl-DBIx-Class-Schema-Config
+ - src-openeuler/perl-DBIx-Connector
+ - src-openeuler/perl-DBIx-DBSchema
+ - src-openeuler/perl-DBIx-Introspector
+ - src-openeuler/perl-DBIx-RunSQL
+ - src-openeuler/perl-DBIx-Simple
+ - src-openeuler/perl-DBIx-XHTML_Table
+ - src-openeuler/perl-DBM-Deep
+ - src-openeuler/perl-Debug-ShowStuff
+ - src-openeuler/perl-Declare-Constraints-Simple
+ - src-openeuler/perl-Devel-Autoflush
+ - src-openeuler/perl-Devel-Caller
+ - src-openeuler/perl-Devel-Caller-IgnoreNamespaces
+ - src-openeuler/perl-Devel-CheckBin
+ - src-openeuler/perl-Devel-CheckCompiler
+ - src-openeuler/perl-Devel-CheckOS
+ - src-openeuler/perl-Devel-Confess
+ - src-openeuler/perl-Devel-Cycle
+ - src-openeuler/perl-Devel-Dumpvar
+ - src-openeuler/perl-Devel-EnforceEncapsulation
+ - src-openeuler/perl-Devel-FindPerl
+ - src-openeuler/perl-Devel-Gladiator
+ - src-openeuler/perl-Devel-GoFaster
+ - src-openeuler/perl-Devel-Hexdump
+ - src-openeuler/perl-Devel-LexAlias
+ - src-openeuler/perl-Devel-MAT-Dumper
+ - src-openeuler/perl-Devel-OverloadInfo
+ - src-openeuler/perl-Devel-OverrideGlobalRequire
+ - src-openeuler/perl-Devel-PartialDump
+ - src-openeuler/perl-Devel-PPPort
+ - src-openeuler/perl-Devel-Pragma
+ - src-openeuler/perl-Devel-Refcount
+ - src-openeuler/perl-Devel-SelfStubber
+ - src-openeuler/perl-Devel-SimpleTrace
+ - src-openeuler/perl-Devel-StackTrace-AsHTML
+ - src-openeuler/perl-Devel-StackTrace-WithLexicals
+ - src-openeuler/perl-Devel-StringInfo
+ - src-openeuler/perl-Devel-Timer
+ - src-openeuler/perl-Devel-Trace
+ - src-openeuler/perl-Diff-LibXDiff
+ - src-openeuler/perl-Digest-BubbleBabble
+ - src-openeuler/perl-Digest-JHash
+ - src-openeuler/perl-Digest-MD2
+ - src-openeuler/perl-Digest-MD4
+ - src-openeuler/perl-Digest-MD5
+ - src-openeuler/perl-Digest-MD5-File
+ - src-openeuler/perl-Digest-Nilsimsa
+ - src-openeuler/perl-Digest-Perl-MD5
+ - src-openeuler/perl-Digest-SHA
+ - src-openeuler/perl-Dir-Manifest
+ - src-openeuler/perl-Dir-Self
+ - src-openeuler/perl-Directory-Scratch
+ - src-openeuler/perl-Dist-Metadata
+ - src-openeuler/perl-EBook-EPUB
+ - src-openeuler/perl-ElasticSearch-SearchBuilder
+ - src-openeuler/perl-Email-Abstract
+ - src-openeuler/perl-Email-Address
+ - src-openeuler/perl-Email-Address-List
+ - src-openeuler/perl-Email-Address-XS
+ - src-openeuler/perl-Email-Date
+ - src-openeuler/perl-Email-MessageID
+ - src-openeuler/perl-Email-MIME
+ - src-openeuler/perl-Email-MIME-Attachment-Stripper
+ - src-openeuler/perl-Email-MIME-ContentType
+ - src-openeuler/perl-Email-MIME-Encodings
+ - src-openeuler/perl-Email-Reply
+ - src-openeuler/perl-Email-Send
+ - src-openeuler/perl-Email-Sender
+ - src-openeuler/perl-Email-Simple
+ - src-openeuler/perl-Encode
+ - src-openeuler/perl-Encode-IMAPUTF7
+ - src-openeuler/perl-Encode-Locale
+ - src-openeuler/perl-Encode-Newlines
+ - src-openeuler/perl-End
+ - src-openeuler/perl-enum
+ - src-openeuler/perl-Env
+ - src-openeuler/perl-Env-C
+ - src-openeuler/perl-Env-Path
+ - src-openeuler/perl-Env-Sanctify
+ - src-openeuler/perl-Error
+ - src-openeuler/perl-Error-Pure
+ - src-openeuler/perl-Error-Pure-Output-Text
+ - src-openeuler/perl-Eval-Closure
+ - src-openeuler/perl-Eval-LineNumbers
+ - src-openeuler/perl-Eval-WithLexicals
+ - src-openeuler/perl-Event
+ - src-openeuler/perl-Excel-Writer-XLSX
+ - src-openeuler/perl-Exception-Base
+ - src-openeuler/perl-Exception-Class
+ - src-openeuler/perl-Exception-Class-TryCatch
+ - src-openeuler/perl-Exception-Tiny
+ - src-openeuler/perl-Expect-Simple
+ - src-openeuler/perl-experimental
+ - src-openeuler/perl-Export-Attrs
+ - src-openeuler/perl-Exporter
+ - src-openeuler/perl-Exporter-Declare
+ - src-openeuler/perl-Exporter-Declare-Magic
+ - src-openeuler/perl-Exporter-Easy
+ - src-openeuler/perl-Exporter-Lite
+ - src-openeuler/perl-Exporter-Tiny
+ - src-openeuler/perl-ExtUtils-AutoInstall
+ - src-openeuler/perl-ExtUtils-CChecker
+ - src-openeuler/perl-ExtUtils-HasCompiler
+ - src-openeuler/perl-ExtUtils-InferConfig
+ - src-openeuler/perl-ExtUtils-Install
+ - src-openeuler/perl-ExtUtils-LibBuilder
+ - src-openeuler/perl-ExtUtils-Manifest
+ - src-openeuler/perl-ExtUtils-ParseXS
+ - src-openeuler/perl-ExtUtils-TBone
+ - src-openeuler/perl-ExtUtils-Typemap
+ - src-openeuler/perl-ExtUtils-Typemaps-Default
+ - src-openeuler/perl-failures
+ - src-openeuler/perl-FCGI
+ - src-openeuler/perl-FCGI-ProcManager
+ - src-openeuler/perl-Fennec-Lite
+ - src-openeuler/perl-FFI-CheckLib
+ - src-openeuler/perl-File-BOM
+ - src-openeuler/perl-File-chdir
+ - src-openeuler/perl-File-CheckTree
+ - src-openeuler/perl-File-chmod
+ - src-openeuler/perl-File-ConfigDir
+ - src-openeuler/perl-File-Copy-Recursive-Reduced
+ - src-openeuler/perl-File-FcntlLock
+ - src-openeuler/perl-File-Fetch
+ - src-openeuler/perl-File-Find-Object
+ - src-openeuler/perl-File-Find-Object-Rule
+ - src-openeuler/perl-File-Find-Rule
+ - src-openeuler/perl-File-Find-Rule-Perl
+ - src-openeuler/perl-File-Find-Rule-PPI
+ - src-openeuler/perl-File-Find-Rule-VCS
+ - src-openeuler/perl-File-Find-utf8
+ - src-openeuler/perl-File-FindLib
+ - src-openeuler/perl-File-Flat
+ - src-openeuler/perl-File-HomeDir
+ - src-openeuler/perl-File-KeePass
+ - src-openeuler/perl-File-LoadLines
+ - src-openeuler/perl-File-Map
+ - src-openeuler/perl-File-MMagic
+ - src-openeuler/perl-File-Modified
+ - src-openeuler/perl-File-NCopy
+ - src-openeuler/perl-File-NFSLock
+ - src-openeuler/perl-File-Object
+ - src-openeuler/perl-File-Path
+ - src-openeuler/perl-File-Path-Tiny
+ - src-openeuler/perl-File-PathList
+ - src-openeuler/perl-File-Read
+ - src-openeuler/perl-File-SearchPath
+ - src-openeuler/perl-File-Share
+ - src-openeuler/perl-File-ShareDir-ProjectDistDir
+ - src-openeuler/perl-File-Slurp-Tiny
+ - src-openeuler/perl-File-Slurper
+ - src-openeuler/perl-File-Spec-Native
+ - src-openeuler/perl-File-Temp
+ - src-openeuler/perl-File-Touch
+ - src-openeuler/perl-File-Type
+ - src-openeuler/perl-File-Type-WebImages
+ - src-openeuler/perl-File-Which
+ - src-openeuler/perl-File-Zglob
+ - src-openeuler/perl-FileHandle-Fmode
+ - src-openeuler/perl-FileHandle-Unget
+ - src-openeuler/perl-Filesys-Notify-Simple
+ - src-openeuler/perl-Filter
+ - src-openeuler/perl-Filter-Simple
+ - src-openeuler/perl-Finance-YahooQuote
+ - src-openeuler/perl-Flow
+ - src-openeuler/perl-Format-Human-Bytes
+ - src-openeuler/perl-FreezeThaw
+ - src-openeuler/perl-Games-Solitaire-Verify
+ - src-openeuler/perl-GD-SVG
+ - src-openeuler/perl-Geo-Constants
+ - src-openeuler/perl-Geo-Ellipsoids
+ - src-openeuler/perl-Geo-Forward
+ - src-openeuler/perl-Geo-Functions
+ - src-openeuler/perl-Geo-Inverse
+ - src-openeuler/perl-Geo-IP
+ - src-openeuler/perl-Geo-IPfree
+ - src-openeuler/perl-Geography-Countries
+ - src-openeuler/perl-Getopt-ArgvFile
+ - src-openeuler/perl-Getopt-Euclid
+ - src-openeuler/perl-Getopt-Long
+ - src-openeuler/perl-Getopt-Long-Descriptive
+ - src-openeuler/perl-Getopt-Lucid
+ - src-openeuler/perl-Getopt-Simple
+ - src-openeuler/perl-Git-Repository
+ - src-openeuler/perl-Git-Repository-Plugin-AUTOLOAD
+ - src-openeuler/perl-Git-Version-Compare
+ - src-openeuler/perl-Git-Wrapper
+ - src-openeuler/perl-GPS-OID
+ - src-openeuler/perl-Graph
+ - src-openeuler/perl-Graphics-ColorNames
+ - src-openeuler/perl-Graphics-ColorNames-WWW
+ - src-openeuler/perl-Graphics-ColorNamesLite-WWW
+ - src-openeuler/perl-Growl-GNTP
+ - src-openeuler/perl-Guard
+ - src-openeuler/perl-Ham-Reference-QRZ
+ - src-openeuler/perl-HarfBuzz-Shaper
+ - src-openeuler/perl-Hash-Case
+ - src-openeuler/perl-Hash-Diff
+ - src-openeuler/perl-Hash-Flatten
+ - src-openeuler/perl-Hash-Merge
+ - src-openeuler/perl-Hash-Merge-Simple
+ - src-openeuler/perl-Hash-MoreUtils
+ - src-openeuler/perl-Hash-MultiValue
+ - src-openeuler/perl-Hash-Util-FieldHash-Compat
+ - src-openeuler/perl-Hook-LexWrap
+ - src-openeuler/perl-HTML-Defang
+ - src-openeuler/perl-HTML-Encoding
+ - src-openeuler/perl-HTML-FillInForm
+ - src-openeuler/perl-HTML-Form
+ - src-openeuler/perl-HTML-Format
+ - src-openeuler/perl-HTML-GenToc
+ - src-openeuler/perl-HTML-HTML5-Entities
+ - src-openeuler/perl-HTML-LinkList
+ - src-openeuler/perl-HTML-Lint
+ - src-openeuler/perl-HTML-Mason
+ - src-openeuler/perl-HTML-Quoted
+ - src-openeuler/perl-HTML-RewriteAttributes
+ - src-openeuler/perl-HTML-Scrubber
+ - src-openeuler/perl-HTML-SimpleParse
+ - src-openeuler/perl-HTML-Strip
+ - src-openeuler/perl-HTML-StripScripts
+ - src-openeuler/perl-HTML-StripScripts-Parser
+ - src-openeuler/perl-HTML-Table
+ - src-openeuler/perl-HTML-TagCloud
+ - src-openeuler/perl-HTML-Template
+ - src-openeuler/perl-HTML-Template-Pro
+ - src-openeuler/perl-HTML-Tiny
+ - src-openeuler/perl-HTML-TokeParser-Simple
+ - src-openeuler/perl-HTTP-Body
+ - src-openeuler/perl-HTTP-BrowserDetect
+ - src-openeuler/perl-HTTP-Cache-Transparent
+ - src-openeuler/perl-HTTP-CookieMonster
+ - src-openeuler/perl-HTTP-Exception
+ - src-openeuler/perl-HTTP-Headers-Fast
+ - src-openeuler/perl-HTTP-Link-Parser
+ - src-openeuler/perl-HTTP-Lite
+ - src-openeuler/perl-HTTP-MultiPartParser
+ - src-openeuler/perl-HTTP-Parser
+ - src-openeuler/perl-HTTP-Parser-XS
+ - src-openeuler/perl-HTTP-Request-AsCGI
+ - src-openeuler/perl-HTTP-Request-Params
+ - src-openeuler/perl-HTTP-Response-Encoding
+ - src-openeuler/perl-HTTP-Server-Simple
+ - src-openeuler/perl-HTTP-Server-Simple-PSGI
+ - src-openeuler/perl-HTTP-Thin
+ - src-openeuler/perl-HTTP-Tiny
+ - src-openeuler/perl-HTTP-Tiny-Multipart
+ - src-openeuler/perl-HTTP-Tinyish
+ - src-openeuler/perl-Image-Base
+ - src-openeuler/perl-Image-ExifTool
+ - src-openeuler/perl-Image-Math-Constrain
+ - src-openeuler/perl-Image-Size
+ - src-openeuler/perl-Image-Xbm
+ - src-openeuler/perl-Image-Xpm
+ - src-openeuler/perl-Importer
+ - src-openeuler/perl-indirect
+ - src-openeuler/perl-Inline
+ - src-openeuler/perl-IO
+ - src-openeuler/perl-IO-Any
+ - src-openeuler/perl-IO-Compress
+ - src-openeuler/perl-IO-Interactive
+ - src-openeuler/perl-IO-Interface
+ - src-openeuler/perl-IO-Pager
+ - src-openeuler/perl-IO-Pipely
+ - src-openeuler/perl-IO-Prompt-Tiny
+ - src-openeuler/perl-IO-Prompter
+ - src-openeuler/perl-IO-Pty-Easy
+ - src-openeuler/perl-IO-Socket-IP
+ - src-openeuler/perl-IO-Socket-Multicast
+ - src-openeuler/perl-IO-Socket-Socks
+ - src-openeuler/perl-IO-Socket-SSL
+ - src-openeuler/perl-IO-Socket-Timeout
+ - src-openeuler/perl-IO-Stty
+ - src-openeuler/perl-IO-Tee
+ - src-openeuler/perl-IO-TieCombine
+ - src-openeuler/perl-IPC-Cmd
+ - src-openeuler/perl-IPC-Run
+ - src-openeuler/perl-IPC-Run3
+ - src-openeuler/perl-IPC-ShareLite
+ - src-openeuler/perl-IPC-System-Simple
+ - src-openeuler/perl-IPC-SysV
+ - src-openeuler/perl-IPTables-ChainMgr
+ - src-openeuler/perl-IPTables-Parse
+ - src-openeuler/perl-IRC-Utils
+ - src-openeuler/perl-Iterator-Simple
+ - src-openeuler/perl-Iterator-Simple-Lookahead
+ - src-openeuler/perl-JavaScript-Beautifier
+ - src-openeuler/perl-JSON-Parse
+ - src-openeuler/perl-JSON-Pointer
+ - src-openeuler/perl-JSON-PP
+ - src-openeuler/perl-JSON-RPC-Common
+ - src-openeuler/perl-JSON-Tiny
+ - src-openeuler/perl-L
+ - src-openeuler/perl-Language-Functional
+ - src-openeuler/perl-latest
+ - src-openeuler/perl-LaTeX-ToUnicode
+ - src-openeuler/perl-Lchown
+ - src-openeuler/perl-Lexical-Persistence
+ - src-openeuler/perl-Lexical-SealRequireHints
+ - src-openeuler/perl-lexical-underscore
+ - src-openeuler/perl-lib-abs
+ - src-openeuler/perl-lib-relative
+ - src-openeuler/perl-libnet
+ - src-openeuler/perl-Library-CallNumber-LC
+ - src-openeuler/perl-Lingua-EN-Alphabet-Shaw
+ - src-openeuler/perl-Lingua-EN-Fathom
+ - src-openeuler/perl-Lingua-EN-FindNumber
+ - src-openeuler/perl-Lingua-EN-Inflect
+ - src-openeuler/perl-Lingua-EN-Inflect-Number
+ - src-openeuler/perl-Lingua-EN-Number-IsOrdinal
+ - src-openeuler/perl-Lingua-EN-Numbers
+ - src-openeuler/perl-Lingua-EN-Numbers-Easy
+ - src-openeuler/perl-Lingua-EN-Numbers-Ordinate
+ - src-openeuler/perl-Lingua-EN-PluralToSingular
+ - src-openeuler/perl-Lingua-EN-Sentence
+ - src-openeuler/perl-Lingua-EN-Syllable
+ - src-openeuler/perl-Lingua-EN-Words2Nums
+ - src-openeuler/perl-Lingua-Flags
+ - src-openeuler/perl-Lingua-Identify
+ - src-openeuler/perl-Lingua-KO-Hangul-Util
+ - src-openeuler/perl-Lingua-PT-Stemmer
+ - src-openeuler/perl-Lingua-Stem-Ru
+ - src-openeuler/perl-Lingua-Stem-Snowball
+ - src-openeuler/perl-Lingua-Translit
+ - src-openeuler/perl-List-AllUtils
+ - src-openeuler/perl-List-MoreUtils
+ - src-openeuler/perl-List-MoreUtils-XS
+ - src-openeuler/perl-List-Pairwise
+ - src-openeuler/perl-List-SomeUtils
+ - src-openeuler/perl-List-SomeUtils-XS
+ - src-openeuler/perl-List-UtilsBy
+ - src-openeuler/perl-Locale-Codes
+ - src-openeuler/perl-Locale-Currency-Format
+ - src-openeuler/perl-Locale-Maketext
+ - src-openeuler/perl-Locale-Maketext-Gettext
+ - src-openeuler/perl-Locale-Maketext-Lexicon
+ - src-openeuler/perl-Locale-Maketext-Simple
+ - src-openeuler/perl-Locale-MO-File
+ - src-openeuler/perl-Locale-Msgfmt
+ - src-openeuler/perl-Locale-PO
+ - src-openeuler/perl-Locale-SubCountry
+ - src-openeuler/perl-Locale-TextDomain-OO
+ - src-openeuler/perl-Locale-TextDomain-OO-Util
+ - src-openeuler/perl-Locale-US
+ - src-openeuler/perl-Locale-Utils-PlaceholderBabelFish
+ - src-openeuler/perl-Locale-Utils-PlaceholderMaketext
+ - src-openeuler/perl-Locale-Utils-PlaceholderNamed
+ - src-openeuler/perl-Log-Any
+ - src-openeuler/perl-Log-Contextual
+ - src-openeuler/perl-Log-Dispatch
+ - src-openeuler/perl-Log-ger
+ - src-openeuler/perl-Log-Handler
+ - src-openeuler/perl-Log-Log4perl
+ - src-openeuler/perl-Log-Message
+ - src-openeuler/perl-Log-Message-Simple
+ - src-openeuler/perl-Log-Trace
+ - src-openeuler/perl-Log-Trivial
+ - src-openeuler/perl-LWP-Online
+ - src-openeuler/perl-Mail-AuthenticationResults
+ - src-openeuler/perl-Mail-Box
+ - src-openeuler/perl-Mail-Box-Parser-C
+ - src-openeuler/perl-Mail-Box-POP3
+ - src-openeuler/perl-Mail-IMAPTalk
+ - src-openeuler/perl-Mail-JMAPTalk
+ - src-openeuler/perl-Mail-Message
+ - src-openeuler/perl-Mail-Sendmail
+ - src-openeuler/perl-Mail-SPF
+ - src-openeuler/perl-Mail-Transport
+ - src-openeuler/perl-Makefile-DOM
+ - src-openeuler/perl-MasonX-Request-WithApacheSession
+ - src-openeuler/perl-Math-Base36
+ - src-openeuler/perl-Math-Base85
+ - src-openeuler/perl-Math-BaseCnv
+ - src-openeuler/perl-Math-BigInt
+ - src-openeuler/perl-Math-BigInt-FastCalc
+ - src-openeuler/perl-Math-BigRat
+ - src-openeuler/perl-Math-Calc-Units
+ - src-openeuler/perl-Math-Cartesian-Product
+ - src-openeuler/perl-Math-Complex
+ - src-openeuler/perl-Math-ConvexHull
+ - src-openeuler/perl-Math-ConvexHull-MonotoneChain
+ - src-openeuler/perl-Math-Derivative
+ - src-openeuler/perl-Math-Expression-Evaluator
+ - src-openeuler/perl-Math-FFT
+ - src-openeuler/perl-Math-Int64
+ - src-openeuler/perl-Math-MatrixReal
+ - src-openeuler/perl-Math-Polygon
+ - src-openeuler/perl-Math-Round
+ - src-openeuler/perl-Math-Spline
+ - src-openeuler/perl-Math-Utils
+ - src-openeuler/perl-Math-Vec
+ - src-openeuler/perl-MemHandle
+ - src-openeuler/perl-Memoize
+ - src-openeuler/perl-Menlo
+ - src-openeuler/perl-Menlo-Legacy
+ - src-openeuler/perl-Meta-Builder
+ - src-openeuler/perl-Method-Signatures-Simple
+ - src-openeuler/perl-Metrics-Any
+ - src-openeuler/perl-MIME-Base32
+ - src-openeuler/perl-MIME-Base64
+ - src-openeuler/perl-MIME-Charset
+ - src-openeuler/perl-MIME-EncWords
+ - src-openeuler/perl-MIME-tools
+ - src-openeuler/perl-mixin
+ - src-openeuler/perl-Mixin-ExtraFields
+ - src-openeuler/perl-Mixin-Linewise
+ - src-openeuler/perl-Mock-Config
+ - src-openeuler/perl-Mock-Quick
+ - src-openeuler/perl-Mock-Sub
+ - src-openeuler/perl-Modern-Perl
+ - src-openeuler/perl-Module-Build-Deprecated
+ - src-openeuler/perl-Module-Build-Pluggable
+ - src-openeuler/perl-Module-Build-Using-PkgConfig
+ - src-openeuler/perl-Module-Compile
+ - src-openeuler/perl-Module-CoreList
+ - src-openeuler/perl-Module-CPANfile
+ - src-openeuler/perl-Module-Data
+ - src-openeuler/perl-Module-Depends
+ - src-openeuler/perl-Module-Extract
+ - src-openeuler/perl-Module-Extract-Namespaces
+ - src-openeuler/perl-Module-Extract-Use
+ - src-openeuler/perl-Module-Find
+ - src-openeuler/perl-Module-Install-Authority
+ - src-openeuler/perl-Module-Install-AutoManifest
+ - src-openeuler/perl-Module-Install-ExtraTests
+ - src-openeuler/perl-Module-Install-TestBase
+ - src-openeuler/perl-Module-Install-TrustMetaYml
+ - src-openeuler/perl-Module-Load
+ - src-openeuler/perl-Module-Load-Conditional
+ - src-openeuler/perl-Module-Load-Util
+ - src-openeuler/perl-Module-Manifest
+ - src-openeuler/perl-Module-Mask
+ - src-openeuler/perl-Module-Math-Depends
+ - src-openeuler/perl-Module-Metadata
+ - src-openeuler/perl-Module-Path
+ - src-openeuler/perl-Module-Pluggable
+ - src-openeuler/perl-Module-Reader
+ - src-openeuler/perl-Module-Refresh
+ - src-openeuler/perl-Module-Runtime-Conflicts
+ - src-openeuler/perl-Module-Signature
+ - src-openeuler/perl-Module-Starter
+ - src-openeuler/perl-Module-Util
+ - src-openeuler/perl-MogileFS-Client
+ - src-openeuler/perl-MogileFS-Utils
+ - src-openeuler/perl-Mojo-DOM58
+ - src-openeuler/perl-Monitoring-Plugin
+ - src-openeuler/perl-Monotone-AutomateStdio
+ - src-openeuler/perl-Moose
+ - src-openeuler/perl-Moose-Autobox
+ - src-openeuler/perl-MooseX-Aliases
+ - src-openeuler/perl-MooseX-App-Cmd
+ - src-openeuler/perl-MooseX-ArrayRef
+ - src-openeuler/perl-MooseX-Async
+ - src-openeuler/perl-MooseX-Attribute-Chained
+ - src-openeuler/perl-MooseX-CascadeClearing
+ - src-openeuler/perl-MooseX-ClassAttribute
+ - src-openeuler/perl-MooseX-CoercePerAttribute
+ - src-openeuler/perl-MooseX-ConfigFromFile
+ - src-openeuler/perl-MooseX-Configuration
+ - src-openeuler/perl-MooseX-Daemonize
+ - src-openeuler/perl-MooseX-Emulate-Class-Accessor-Fast
+ - src-openeuler/perl-MooseX-Getopt
+ - src-openeuler/perl-MooseX-GlobRef
+ - src-openeuler/perl-MooseX-Has-Options
+ - src-openeuler/perl-MooseX-Has-Sugar
+ - src-openeuler/perl-MooseX-InsideOut
+ - src-openeuler/perl-MooseX-Iterator
+ - src-openeuler/perl-MooseX-LazyRequire
+ - src-openeuler/perl-MooseX-MarkAsMethods
+ - src-openeuler/perl-MooseX-Meta-TypeConstraint-ForceCoercion
+ - src-openeuler/perl-MooseX-Meta-TypeConstraint-Mooish
+ - src-openeuler/perl-MooseX-MethodAttributes
+ - src-openeuler/perl-MooseX-MultiInitArg
+ - src-openeuler/perl-MooseX-NonMoose
+ - src-openeuler/perl-MooseX-Object-Pluggable
+ - src-openeuler/perl-MooseX-OneArgNew
+ - src-openeuler/perl-MooseX-Param
+ - src-openeuler/perl-MooseX-Params-Validate
+ - src-openeuler/perl-MooseX-POE
+ - src-openeuler/perl-MooseX-RelatedClassRoles
+ - src-openeuler/perl-MooseX-Role-Cmd
+ - src-openeuler/perl-MooseX-Role-Matcher
+ - src-openeuler/perl-MooseX-Role-Parameterized
+ - src-openeuler/perl-MooseX-Role-Strict
+ - src-openeuler/perl-MooseX-Role-Tempdir
+ - src-openeuler/perl-MooseX-SemiAffordanceAccessor
+ - src-openeuler/perl-MooseX-SetOnce
+ - src-openeuler/perl-MooseX-SimpleConfig
+ - src-openeuler/perl-MooseX-Singleton
+ - src-openeuler/perl-MooseX-StrictConstructor
+ - src-openeuler/perl-MooseX-TraitFor-Meta-Class-BetterAnonClassNames
+ - src-openeuler/perl-MooseX-Traits
+ - src-openeuler/perl-MooseX-Traits-Pluggable
+ - src-openeuler/perl-MooseX-Types
+ - src-openeuler/perl-MooseX-Types-Common
+ - src-openeuler/perl-MooseX-Types-LoadableClass
+ - src-openeuler/perl-MooseX-Types-Path-Class
+ - src-openeuler/perl-MooseX-Types-Path-Tiny
+ - src-openeuler/perl-MooseX-Types-Perl
+ - src-openeuler/perl-MooseX-Types-Stringlike
+ - src-openeuler/perl-MooX
+ - src-openeuler/perl-MooX-Cmd
+ - src-openeuler/perl-MooX-ConfigFromFile
+ - src-openeuler/perl-MooX-File-ConfigDir
+ - src-openeuler/perl-MooX-HandlesVia
+ - src-openeuler/perl-MooX-HasEnv
+ - src-openeuler/perl-MooX-Locale-Passthrough
+ - src-openeuler/perl-MooX-Locale-TextDomain-OO
+ - src-openeuler/perl-MooX-Log-Any
+ - src-openeuler/perl-MooX-Role-Parameterized
+ - src-openeuler/perl-MooX-Roles-Pluggable
+ - src-openeuler/perl-MooX-Singleton
+ - src-openeuler/perl-MooX-StrictConstructor
+ - src-openeuler/perl-Mozilla-LDAP
+ - src-openeuler/perl-Mozilla-PublicSuffix
+ - src-openeuler/perl-MP3-Info
+ - src-openeuler/perl-multidimensional
+ - src-openeuler/perl-namespace-autoclean
+ - src-openeuler/perl-namespace-clean
+ - src-openeuler/perl-namespace-sweep
+ - src-openeuler/perl-Net-AMQP
+ - src-openeuler/perl-Net-BGP
+ - src-openeuler/perl-Net-CIDR
+ - src-openeuler/perl-Net-Daemon
+ - src-openeuler/perl-Net-DNS-Resolver-Programmable
+ - src-openeuler/perl-Net-DNS-SEC
+ - src-openeuler/perl-Net-Domain-TLD
+ - src-openeuler/perl-Net-Google-AuthSub
+ - src-openeuler/perl-Net-HL7
+ - src-openeuler/perl-Net-INET6Glue
+ - src-openeuler/perl-Net-IP
+ - src-openeuler/perl-Net-IP-Match-Regexp
+ - src-openeuler/perl-Net-IP-Minimal
+ - src-openeuler/perl-Net-LDAP-SID
+ - src-openeuler/perl-Net-MQTT-Simple
+ - src-openeuler/perl-Net-OAuth
+ - src-openeuler/perl-Net-OpenSSH
+ - src-openeuler/perl-Net-Ping-External
+ - src-openeuler/perl-Net-POP3S
+ - src-openeuler/perl-Net-Random
+ - src-openeuler/perl-Net-RawIP
+ - src-openeuler/perl-Net-Server-SS-PreFork
+ - src-openeuler/perl-Net-SFTP-Foreign
+ - src-openeuler/perl-Net-SMTPS
+ - src-openeuler/perl-Net-SSLeay
+ - src-openeuler/perl-Net-Telnet
+ - src-openeuler/perl-Net-Telnet-Cisco
+ - src-openeuler/perl-Net-UPnP
+ - src-openeuler/perl-Nmap-Parser
+ - src-openeuler/perl-NNTPClient
+ - src-openeuler/perl-Number-Bytes-Human
+ - src-openeuler/perl-Number-Compare
+ - src-openeuler/perl-Number-Format
+ - src-openeuler/perl-Number-Misc
+ - src-openeuler/perl-Number-Range
+ - src-openeuler/perl-Number-Tolerant
+ - src-openeuler/perl-Object-Accessor
+ - src-openeuler/perl-Object-HashBase
+ - src-openeuler/perl-Object-Pluggable
+ - src-openeuler/perl-Object-Realize-Later
+ - src-openeuler/perl-Object-Signature
+ - src-openeuler/perl-Object-Tiny
+ - src-openeuler/perl-OLE-Storage_Lite
+ - src-openeuler/perl-Ouch
+ - src-openeuler/perl-Package-Anon
+ - src-openeuler/perl-Package-DeprecationManager
+ - src-openeuler/perl-Package-New
+ - src-openeuler/perl-Package-Stash
+ - src-openeuler/perl-Package-Variant
+ - src-openeuler/perl-PadWalker
+ - src-openeuler/perl-Palm
+ - src-openeuler/perl-Palm-PDB
+ - src-openeuler/perl-Panotools-Script
+ - src-openeuler/perl-PAR
+ - src-openeuler/perl-PAR-Dist
+ - src-openeuler/perl-Parallel-ForkManager
+ - src-openeuler/perl-Parallel-Iterator
+ - src-openeuler/perl-Parallel-Pipes
+ - src-openeuler/perl-Parallel-Runner
+ - src-openeuler/perl-Parallel-Scoreboard
+ - src-openeuler/perl-Params-CallbackRequest
+ - src-openeuler/perl-Params-Check
+ - src-openeuler/perl-Params-Coerce
+ - src-openeuler/perl-Params-Validate
+ - src-openeuler/perl-parent
+ - src-openeuler/perl-Parse-Debian-Packages
+ - src-openeuler/perl-Parse-DMIDecode
+ - src-openeuler/perl-Parse-EDID
+ - src-openeuler/perl-Parse-ErrorString-Perl
+ - src-openeuler/perl-Parse-ExuberantCTags
+ - src-openeuler/perl-Parse-Gitignore
+ - src-openeuler/perl-Parse-MIME
+ - src-openeuler/perl-Parse-PMFile
+ - src-openeuler/perl-Path-FindDev
+ - src-openeuler/perl-Path-IsDev
+ - src-openeuler/perl-Path-Iterator-Rule
+ - src-openeuler/perl-Path-ScanINC
+ - src-openeuler/perl-Path-Tiny-Rule
+ - src-openeuler/perl-PathTools
+ - src-openeuler/perl-PBKDF2-Tiny
+ - src-openeuler/perl-PDF-Create
+ - src-openeuler/perl-PDF-Reuse
+ - src-openeuler/perl-Pegex
+ - src-openeuler/perl-Perl-OSType
+ - src-openeuler/perl-Perl-PrereqScanner
+ - src-openeuler/perl-Perl-Stripper
+ - src-openeuler/perl-Perl-Tidy
+ - src-openeuler/perl-Perl-Tidy-Sweetened
+ - src-openeuler/perl-Perl-Version
+ - src-openeuler/perl-Perl6-Caller
+ - src-openeuler/perl-Perl6-Junction
+ - src-openeuler/perl-Perl6-Slurp
+ - src-openeuler/perl-perlfaq
+ - src-openeuler/perl-Perlilog
+ - src-openeuler/perl-PerlIO-buffersize
+ - src-openeuler/perl-PerlIO-eol
+ - src-openeuler/perl-PerlIO-gzip
+ - src-openeuler/perl-PerlIO-Layers
+ - src-openeuler/perl-PerlIO-locale
+ - src-openeuler/perl-PerlIO-utf8_strict
+ - src-openeuler/perl-PerlIO-via-QuotedPrint
+ - src-openeuler/perl-PerlIO-via-Timeout
+ - src-openeuler/perl-PFT
+ - src-openeuler/perl-PHP-Serialization
+ - src-openeuler/perl-PkgConfig-LibPkgConf
+ - src-openeuler/perl-Pod-Checker
+ - src-openeuler/perl-Pod-Constants
+ - src-openeuler/perl-Pod-Coverage-Moose
+ - src-openeuler/perl-Pod-Coverage-TrustPod
+ - src-openeuler/perl-Pod-Elemental
+ - src-openeuler/perl-Pod-Elemental-PerlMunger
+ - src-openeuler/perl-Pod-Escapes
+ - src-openeuler/perl-Pod-Eventual
+ - src-openeuler/perl-Pod-Markdown-Github
+ - src-openeuler/perl-Pod-MinimumVersion
+ - src-openeuler/perl-Pod-Parser
+ - src-openeuler/perl-Pod-Perldoc
+ - src-openeuler/perl-Pod-Plainer
+ - src-openeuler/perl-Pod-POM
+ - src-openeuler/perl-Pod-PseudoPod
+ - src-openeuler/perl-Pod-Simple
+ - src-openeuler/perl-Pod-Simple-Wiki
+ - src-openeuler/perl-Pod-Snippets
+ - src-openeuler/perl-Pod-Spell
+ - src-openeuler/perl-Pod-Spell-CommonMistakes
+ - src-openeuler/perl-Pod-Strip
+ - src-openeuler/perl-Pod-Tidy
+ - src-openeuler/perl-Pod-Usage
+ - src-openeuler/perl-Pod-Wrap
+ - src-openeuler/perl-Pod-Xhtml
+ - src-openeuler/perl-POD2-Base
+ - src-openeuler/perl-podlators
+ - src-openeuler/perl-POE
+ - src-openeuler/perl-POE-Test-Loops
+ - src-openeuler/perl-POSIX-strftime-Compiler
+ - src-openeuler/perl-POSIX-strptime
+ - src-openeuler/perl-PPI
+ - src-openeuler/perl-PPI-HTML
+ - src-openeuler/perl-PPI-XS
+ - src-openeuler/perl-PPIx-EditorTools
+ - src-openeuler/perl-PPIx-QuoteLike
+ - src-openeuler/perl-PPIx-Regexp
+ - src-openeuler/perl-prefork
+ - src-openeuler/perl-Printer
+ - src-openeuler/perl-Proc-Daemon
+ - src-openeuler/perl-Proc-InvokeEditor
+ - src-openeuler/perl-Proc-PID-File
+ - src-openeuler/perl-Proc-ProcessTable
+ - src-openeuler/perl-Proc-Simple
+ - src-openeuler/perl-Proc-Terminator
+ - src-openeuler/perl-Proc-Wait3
+ - src-openeuler/perl-Promises
+ - src-openeuler/perl-PSGI
+ - src-openeuler/perl-RDF-NS
+ - src-openeuler/perl-RDF-NS-Curated
+ - src-openeuler/perl-RDF-Prefixes
+ - src-openeuler/perl-re-engine-PCRE2
+ - src-openeuler/perl-ReadonlyX
+ - src-openeuler/perl-Redis
+ - src-openeuler/perl-Ref-Util
+ - src-openeuler/perl-Ref-Util-XS
+ - src-openeuler/perl-Regexp-Assemble
+ - src-openeuler/perl-Regexp-Assemble-Compressed
+ - src-openeuler/perl-Regexp-Common
+ - src-openeuler/perl-Regexp-Common-net-CIDR
+ - src-openeuler/perl-Regexp-Grammars
+ - src-openeuler/perl-Regexp-IPv6
+ - src-openeuler/perl-Regexp-Pattern
+ - src-openeuler/perl-Regexp-Stringify
+ - src-openeuler/perl-Regexp-Util
+ - src-openeuler/perl-REST-Client
+ - src-openeuler/perl-Retry
+ - src-openeuler/perl-Return-MultiLevel
+ - src-openeuler/perl-Return-Value
+ - src-openeuler/perl-Role-Basic
+ - src-openeuler/perl-Role-Identifiable
+ - src-openeuler/perl-Roman
+ - src-openeuler/perl-Router-Simple
+ - src-openeuler/perl-Safe-Isa
+ - src-openeuler/perl-Scalar-Construct
+ - src-openeuler/perl-Scalar-List-Utils
+ - src-openeuler/perl-Scalar-String
+ - src-openeuler/perl-Schedule-Cron
+ - src-openeuler/perl-Scope-Guard
+ - src-openeuler/perl-Scope-Upper
+ - src-openeuler/perl-Scriptalicious
+ - src-openeuler/perl-SelfLoader
+ - src-openeuler/perl-Server-Starter
+ - src-openeuler/perl-Set-Array
+ - src-openeuler/perl-Set-Crontab
+ - src-openeuler/perl-Set-Infinite
+ - src-openeuler/perl-Set-IntSpan
+ - src-openeuler/perl-Set-Scalar
+ - src-openeuler/perl-Set-Tiny
+ - src-openeuler/perl-Shell
+ - src-openeuler/perl-Shell-Guess
+ - src-openeuler/perl-Smart-Comments
+ - src-openeuler/perl-Snowball-Swedish
+ - src-openeuler/perl-Socket
+ - src-openeuler/perl-Software-License-CCpack
+ - src-openeuler/perl-Sort-Key
+ - src-openeuler/perl-Sort-MergeSort
+ - src-openeuler/perl-Sort-Naturally
+ - src-openeuler/perl-Sort-Versions
+ - src-openeuler/perl-Spellunker
+ - src-openeuler/perl-Spiffy
+ - src-openeuler/perl-Spreadsheet-ParseExcel
+ - src-openeuler/perl-SQL-Abstract
+ - src-openeuler/perl-SQL-Interp
+ - src-openeuler/perl-SQL-Library
+ - src-openeuler/perl-SQL-ReservedWords
+ - src-openeuler/perl-Statistics-Basic
+ - src-openeuler/perl-Statistics-CaseResampling
+ - src-openeuler/perl-Statistics-ChiSquare
+ - src-openeuler/perl-Statistics-Contingency
+ - src-openeuler/perl-Statistics-Descriptive
+ - src-openeuler/perl-STD
+ - src-openeuler/perl-Stream-Buffered
+ - src-openeuler/perl-String-Approx
+ - src-openeuler/perl-String-Base
+ - src-openeuler/perl-String-CamelCase
+ - src-openeuler/perl-String-Copyright
+ - src-openeuler/perl-String-Dirify
+ - src-openeuler/perl-String-Escape
+ - src-openeuler/perl-String-Format
+ - src-openeuler/perl-String-Formatter
+ - src-openeuler/perl-String-Interpolate-Named
+ - src-openeuler/perl-String-Print
+ - src-openeuler/perl-String-Random
+ - src-openeuler/perl-String-RewritePrefix
+ - src-openeuler/perl-String-Similarity
+ - src-openeuler/perl-String-Tagged
+ - src-openeuler/perl-String-Tagged-Terminal
+ - src-openeuler/perl-String-Trim
+ - src-openeuler/perl-String-Truncate
+ - src-openeuler/perl-String-Util
+ - src-openeuler/perl-Struct-Dumb
+ - src-openeuler/perl-Sub-Attribute
+ - src-openeuler/perl-Sub-Exporter-ForMethods
+ - src-openeuler/perl-Sub-Exporter-GlobExporter
+ - src-openeuler/perl-Sub-Identify
+ - src-openeuler/perl-Sub-Infix
+ - src-openeuler/perl-Sub-Info
+ - src-openeuler/perl-Sub-Override
+ - src-openeuler/perl-Sub-Prototype
+ - src-openeuler/perl-Sub-WrapPackages
+ - src-openeuler/perl-SUPER
+ - src-openeuler/perl-SVG
+ - src-openeuler/perl-SVG-Parser
+ - src-openeuler/perl-Symbol-Global-Name
+ - src-openeuler/perl-Symbol-Util
+ - src-openeuler/perl-syntax
+ - src-openeuler/perl-Syntax-Keyword-Gather
+ - src-openeuler/perl-Syntax-Keyword-Junction
+ - src-openeuler/perl-Syntax-Keyword-Try
+ - src-openeuler/perl-Sys-Hostname-Long
+ - src-openeuler/perl-Sys-Info-Base
+ - src-openeuler/perl-Sys-Mmap
+ - src-openeuler/perl-Sys-Statistics-Linux
+ - src-openeuler/perl-Sys-Syslog
+ - src-openeuler/perl-System-Command
+ - src-openeuler/perl-System-Info
+ - src-openeuler/perl-Taint-Util
+ - src-openeuler/perl-Tangerine
+ - src-openeuler/perl-TAP-Formatter-HTML
+ - src-openeuler/perl-TAP-Harness-Archive
+ - src-openeuler/perl-TAP-Harness-JUnit
+ - src-openeuler/perl-TAP-SimpleOutput
+ - src-openeuler/perl-Tapper
+ - src-openeuler/perl-Task-Kensho-Exceptions
+ - src-openeuler/perl-Task-Moose
+ - src-openeuler/perl-Task-Weaken
+ - src-openeuler/perl-Template-Alloy
+ - src-openeuler/perl-Template-Multilingual
+ - src-openeuler/perl-Template-Plugin-Class
+ - src-openeuler/perl-Template-Plugin-Cycle
+ - src-openeuler/perl-Template-Tiny
+ - src-openeuler/perl-Template-Toolkit
+ - src-openeuler/perl-Template-Toolkit-Simple
+ - src-openeuler/perl-Term-ANSIColor
+ - src-openeuler/perl-Term-Cap
+ - src-openeuler/perl-Term-Chrome
+ - src-openeuler/perl-Term-Clui
+ - src-openeuler/perl-Term-EditorEdit
+ - src-openeuler/perl-Term-Encoding
+ - src-openeuler/perl-Term-ProgressBar
+ - src-openeuler/perl-Term-Size
+ - src-openeuler/perl-Term-Table
+ - src-openeuler/perl-Term-UI
+ - src-openeuler/perl-TermReadKey
+ - src-openeuler/perl-Test-Abortable
+ - src-openeuler/perl-Test-API
+ - src-openeuler/perl-Test-Assert
+ - src-openeuler/perl-Test-Assertions
+ - src-openeuler/perl-Test-Base
+ - src-openeuler/perl-Test-CheckChanges
+ - src-openeuler/perl-Test-CheckDeps
+ - src-openeuler/perl-Test-Class
+ - src-openeuler/perl-Test-Class-Most
+ - src-openeuler/perl-Test-CleanNamespaces
+ - src-openeuler/perl-Test-Cmd
+ - src-openeuler/perl-Test-Command
+ - src-openeuler/perl-Test-Compile
+ - src-openeuler/perl-Test-ConsistentVersion
+ - src-openeuler/perl-Test-CPAN-Meta-JSON
+ - src-openeuler/perl-Test-CPAN-Meta-YAML
+ - src-openeuler/perl-Test-Deep-Fuzzy
+ - src-openeuler/perl-Test-Deep-Type
+ - src-openeuler/perl-Test-Dependencies
+ - src-openeuler/perl-Test-Differences
+ - src-openeuler/perl-Test-Dir
+ - src-openeuler/perl-Test-Directory
+ - src-openeuler/perl-Test-Dist-VersionSync
+ - src-openeuler/perl-Test-Distribution
+ - src-openeuler/perl-Test-EOL
+ - src-openeuler/perl-Test-Exception
+ - src-openeuler/perl-Test-Exception-LessClever
+ - src-openeuler/perl-Test-Exit
+ - src-openeuler/perl-Test-Expect
+ - src-openeuler/perl-Test-File
+ - src-openeuler/perl-Test-File-Contents
+ - src-openeuler/perl-Test-File-ShareDir
+ - src-openeuler/perl-Test-Filename
+ - src-openeuler/perl-Test-Fixme
+ - src-openeuler/perl-Test-Harness
+ - src-openeuler/perl-Test-Harness-Straps
+ - src-openeuler/perl-Test-HasVersion
+ - src-openeuler/perl-Test-HexDifferences
+ - src-openeuler/perl-Test-HexString
+ - src-openeuler/perl-Test-HTTP-Server-Simple
+ - src-openeuler/perl-Test-Identity
+ - src-openeuler/perl-Test-Inter
+ - src-openeuler/perl-Test-Is
+ - src-openeuler/perl-Test-JSON
+ - src-openeuler/perl-Test-LectroTest
+ - src-openeuler/perl-Test-LoadAllModules
+ - src-openeuler/perl-Test-LongString
+ - src-openeuler/perl-Test-LWP-UserAgent
+ - src-openeuler/perl-Test-Manifest
+ - src-openeuler/perl-Test-Memory-Cycle
+ - src-openeuler/perl-Test-Metrics-Any
+ - src-openeuler/perl-Test-Mock-LWP
+ - src-openeuler/perl-Test-Mock-Time
+ - src-openeuler/perl-Test-MockModule
+ - src-openeuler/perl-Test-MockObject
+ - src-openeuler/perl-Test-MockRandom
+ - src-openeuler/perl-Test-MockTime
+ - src-openeuler/perl-Test-Modern
+ - src-openeuler/perl-Test-Mojibake
+ - src-openeuler/perl-Test-Moose-More
+ - src-openeuler/perl-Test-More-UTF8
+ - src-openeuler/perl-Test-Most
+ - src-openeuler/perl-Test-mysqld
+ - src-openeuler/perl-Test-Name-FromLine
+ - src-openeuler/perl-Test-NiceDump
+ - src-openeuler/perl-Test-NoBreakpoints
+ - src-openeuler/perl-Test-NoPlan
+ - src-openeuler/perl-Test-NoTabs
+ - src-openeuler/perl-Test-Number-Delta
+ - src-openeuler/perl-Test-Object
+ - src-openeuler/perl-Test-Output
+ - src-openeuler/perl-Test-Pod-Content
+ - src-openeuler/perl-Test-Pod-No404s
+ - src-openeuler/perl-Test-Pod-Spelling-CommonMistakes
+ - src-openeuler/perl-Test-POE-Client-TCP
+ - src-openeuler/perl-Test-POE-Server-TCP
+ - src-openeuler/perl-Test-Portability-Files
+ - src-openeuler/perl-Test-Prereq
+ - src-openeuler/perl-Test-Regexp
+ - src-openeuler/perl-Test-Regression
+ - src-openeuler/perl-Test-Requires-Git
+ - src-openeuler/perl-Test-Roo
+ - src-openeuler/perl-Test-Routine
+ - src-openeuler/perl-Test-Run
+ - src-openeuler/perl-Test-Run-CmdLine
+ - src-openeuler/perl-Test-Script-Run
+ - src-openeuler/perl-Test-SharedFork
+ - src-openeuler/perl-Test-Simple
+ - src-openeuler/perl-Test-Spelling
+ - src-openeuler/perl-Test-Strict
+ - src-openeuler/perl-Test-SubCalls
+ - src-openeuler/perl-Test-Synopsis
+ - src-openeuler/perl-Test-Taint
+ - src-openeuler/perl-Test-TCP
+ - src-openeuler/perl-Test-Time
+ - src-openeuler/perl-Test-TinyMocker
+ - src-openeuler/perl-Test-Toolbox
+ - src-openeuler/perl-Test-TrailingSpace
+ - src-openeuler/perl-Test-Trap
+ - src-openeuler/perl-Test-Unit-Lite
+ - src-openeuler/perl-Test-UseAllModules
+ - src-openeuler/perl-Test-utf8
+ - src-openeuler/perl-Test-Vars
+ - src-openeuler/perl-Test-Warn
+ - src-openeuler/perl-Test-Without-Module
+ - src-openeuler/perl-Test-WriteVariants
+ - src-openeuler/perl-Test-WWW-Selenium
+ - src-openeuler/perl-Test-YAML
+ - src-openeuler/perl-Test-YAML-Valid
+ - src-openeuler/perl-Test2-Suite
+ - src-openeuler/perl-TestML
+ - src-openeuler/perl-TeX-Encode
+ - src-openeuler/perl-TeX-Hyphen
+ - src-openeuler/perl-Text-Affixes
+ - src-openeuler/perl-Text-Aligner
+ - src-openeuler/perl-Text-ASCIITable
+ - src-openeuler/perl-Text-Autoformat
+ - src-openeuler/perl-Text-Balanced
+ - src-openeuler/perl-Text-Clip
+ - src-openeuler/perl-Text-CSV-Separator
+ - src-openeuler/perl-Text-Diff
+ - src-openeuler/perl-Text-Diff-HTML
+ - src-openeuler/perl-Text-Diff-Parser
+ - src-openeuler/perl-Text-FindIndent
+ - src-openeuler/perl-Text-Format
+ - src-openeuler/perl-Text-FormatTable
+ - src-openeuler/perl-Text-Fuzzy
+ - src-openeuler/perl-Text-Haml
+ - src-openeuler/perl-Text-Levenshtein-Damerau
+ - src-openeuler/perl-Text-Levenshtein-Damerau-XS
+ - src-openeuler/perl-Text-Markdown
+ - src-openeuler/perl-Text-MultiMarkdown
+ - src-openeuler/perl-Text-Ngram
+ - src-openeuler/perl-Text-ParseWords
+ - src-openeuler/perl-Text-PDF
+ - src-openeuler/perl-Text-Quoted
+ - src-openeuler/perl-Text-Reflow
+ - src-openeuler/perl-Text-Reform
+ - src-openeuler/perl-Text-Roman
+ - src-openeuler/perl-Text-Soundex
+ - src-openeuler/perl-Text-Sprintf-Named
+ - src-openeuler/perl-Text-Table
+ - src-openeuler/perl-Text-Table-Tiny
+ - src-openeuler/perl-Text-TabularDisplay
+ - src-openeuler/perl-Text-Template-Simple
+ - src-openeuler/perl-Text-Textile
+ - src-openeuler/perl-Text-vCard
+ - src-openeuler/perl-Text-VCardFast
+ - src-openeuler/perl-Text-vFile-asData
+ - src-openeuler/perl-Text-VisualWidth-PP
+ - src-openeuler/perl-Text-WikiFormat
+ - src-openeuler/perl-Text-WordDiff
+ - src-openeuler/perl-Text-Wrapper
+ - src-openeuler/perl-Text-xSV
+ - src-openeuler/perl-Thread-Queue
+ - src-openeuler/perl-Thread-SigMask
+ - src-openeuler/perl-threads
+ - src-openeuler/perl-threads-shared
+ - src-openeuler/perl-Throwable
+ - src-openeuler/perl-Tie-Cache
+ - src-openeuler/perl-Tie-Cycle
+ - src-openeuler/perl-Tie-DataUUID
+ - src-openeuler/perl-Tie-DBI
+ - src-openeuler/perl-Tie-EncryptedHash
+ - src-openeuler/perl-Tie-Handle-Offset
+ - src-openeuler/perl-Tie-Hash-MultiValue
+ - src-openeuler/perl-Tie-Simple
+ - src-openeuler/perl-Tie-Sub
+ - src-openeuler/perl-Time-Clock
+ - src-openeuler/perl-Time-Duration
+ - src-openeuler/perl-Time-Duration-Parse
+ - src-openeuler/perl-Time-HiRes
+ - src-openeuler/perl-Time-Interval
+ - src-openeuler/perl-Time-Local
+ - src-openeuler/perl-Time-Mock
+ - src-openeuler/perl-Time-Moment
+ - src-openeuler/perl-Time-ParseDate
+ - src-openeuler/perl-Time-Period
+ - src-openeuler/perl-Time-Piece
+ - src-openeuler/perl-Time-timegm
+ - src-openeuler/perl-Time-Tiny
+ - src-openeuler/perl-Time-Warp
+ - src-openeuler/perl-Time-y2038
+ - src-openeuler/perl-Tk-Canvas-GradientColor
+ - src-openeuler/perl-Tk-ColoredButton
+ - src-openeuler/perl-Tk-DoubleClick
+ - src-openeuler/perl-Tk-FontDialog
+ - src-openeuler/perl-Tk-ObjScanner
+ - src-openeuler/perl-Tk-Pod
+ - src-openeuler/perl-Tk-Text-SuperText
+ - src-openeuler/perl-TOML-Parser
+ - src-openeuler/perl-Tree
+ - src-openeuler/perl-Tree-DAG_Node
+ - src-openeuler/perl-Tree-R
+ - src-openeuler/perl-Tree-Simple
+ - src-openeuler/perl-Type-Tiny-XS
+ - src-openeuler/perl-Unicode-CaseFold
+ - src-openeuler/perl-Unicode-Casing
+ - src-openeuler/perl-Unicode-CheckUTF8
+ - src-openeuler/perl-Unicode-CheckUTF8-PP
+ - src-openeuler/perl-Unicode-Collate
+ - src-openeuler/perl-Unicode-Map
+ - src-openeuler/perl-Unicode-Normalize
+ - src-openeuler/perl-Unicode-String
+ - src-openeuler/perl-UNIVERSAL-can
+ - src-openeuler/perl-UNIVERSAL-isa
+ - src-openeuler/perl-UNIVERSAL-require
+ - src-openeuler/perl-Unix-Process
+ - src-openeuler/perl-URI
+ - src-openeuler/perl-URI-db
+ - src-openeuler/perl-URI-Encode
+ - src-openeuler/perl-URI-Escape-XS
+ - src-openeuler/perl-URI-Find
+ - src-openeuler/perl-URI-Find-Simple
+ - src-openeuler/perl-URI-FromHash
+ - src-openeuler/perl-URI-Nested
+ - src-openeuler/perl-URI-Query
+ - src-openeuler/perl-URI-Title
+ - src-openeuler/perl-URI-ws
+ - src-openeuler/perl-URL-Encode
+ - src-openeuler/perl-URL-Encode-XS
+ - src-openeuler/perl-User
+ - src-openeuler/perl-User-Identity
+ - src-openeuler/perl-UUID
+ - src-openeuler/perl-UUID-Tiny
+ - src-openeuler/perl-v6
+ - src-openeuler/perl-Validation-Class
+ - src-openeuler/perl-Variable-Magic
+ - src-openeuler/perl-Verilog-Readmem
+ - src-openeuler/perl-version
+ - src-openeuler/perl-Version-Next
+ - src-openeuler/perl-Version-Requirements
+ - src-openeuler/perl-Want
+ - src-openeuler/perl-WebService-Linode
+ - src-openeuler/perl-WebService-Validator-HTML-W3C
+ - src-openeuler/perl-Win32-ShellQuote
+ - src-openeuler/perl-WWW-DuckDuckGo
+ - src-openeuler/perl-WWW-GoodData
+ - src-openeuler/perl-WWW-Mechanize
+ - src-openeuler/perl-WWW-Shorten
+ - src-openeuler/perl-WWW-Splunk
+ - src-openeuler/perl-WWW-Twilio-API
+ - src-openeuler/perl-XML-Atom-SimpleFeed
+ - src-openeuler/perl-XML-Bare
+ - src-openeuler/perl-XML-CommonNS
+ - src-openeuler/perl-XML-DOM
+ - src-openeuler/perl-XML-Fast
+ - src-openeuler/perl-XML-FeedPP
+ - src-openeuler/perl-XML-Flow
+ - src-openeuler/perl-XML-Generator
+ - src-openeuler/perl-XML-Generator-PerlData
+ - src-openeuler/perl-XML-Hash-LX
+ - src-openeuler/perl-XML-LibXML-Debugging
+ - src-openeuler/perl-XML-LibXML-PrettyPrint
+ - src-openeuler/perl-XML-LibXML-Simple
+ - src-openeuler/perl-XML-Merge
+ - src-openeuler/perl-XML-NamespaceFactory
+ - src-openeuler/perl-XML-Parser
+ - src-openeuler/perl-XML-Parser-Lite
+ - src-openeuler/perl-XML-Parser-Lite-Tree
+ - src-openeuler/perl-XML-Parser-Lite-Tree-XPath
+ - src-openeuler/perl-XML-RegExp
+ - src-openeuler/perl-XML-SAX-ExpatXS
+ - src-openeuler/perl-XML-SemanticDiff
+ - src-openeuler/perl-XML-Stream
+ - src-openeuler/perl-XML-Tidy
+ - src-openeuler/perl-XML-Tidy-Tiny
+ - src-openeuler/perl-XML-Tiny
+ - src-openeuler/perl-XML-TreePP
+ - src-openeuler/perl-XML-Twig
+ - src-openeuler/perl-XML-Writer
+ - src-openeuler/perl-XML-XPathEngine
+ - src-openeuler/perl-XXX
+ - src-openeuler/perl-YAML-PP
+ - src-openeuler/perl-YAML-Syck
+ - src-openeuler/perl-ZMQ-Constants
+- name: sig-python-modules
+ repositories:
+ - src-openeuler/python-ez_setup
+ - src-openeuler/python-APScheduler
+ - src-openeuler/python-ATpy
+ - src-openeuler/python-AWSIoTPythonSDK
+ - src-openeuler/python-Arpeggio
+ - src-openeuler/python-Babel
+ - src-openeuler/python-Brotli
+ - src-openeuler/python-Cerberus
+ - src-openeuler/python-Cerealizer
+ - src-openeuler/python-Chameleon
+ - src-openeuler/python-ConfigArgParse
+ - src-openeuler/python-CouchDB
+ - src-openeuler/python-Cython
+ - src-openeuler/python-ECPy
+ - src-openeuler/python-EditorConfig
+ - src-openeuler/python-Faker
+ - src-openeuler/python-Flask-APScheduler
+ - src-openeuler/python-Flask-Admin
+ - src-openeuler/python-Flask-Assets
+ - src-openeuler/python-Flask-AutoIndex
+ - src-openeuler/python-Flask-Bootstrap
+ - src-openeuler/python-Flask-Cache
+ - src-openeuler/python-Flask-Classy
+ - src-openeuler/python-Flask-Mail
+ - src-openeuler/python-Flask-Mako
+ - src-openeuler/python-Flask-OAuth
+ - src-openeuler/python-Flask-OpenID
+ - src-openeuler/python-Flask-Paranoid
+ - src-openeuler/python-Flask-Principal
+ - src-openeuler/python-Flask-RSTPages
+ - src-openeuler/python-Flask-SQLAlchemy
+ - src-openeuler/python-Flask-Script
+ - src-openeuler/python-Flask-Silk
+ - src-openeuler/python-Flask-HTTPAuth
+ - src-openeuler/python-FormEncode
+ - src-openeuler/python-GitPython
+ - src-openeuler/python-GridDataFormats
+ - src-openeuler/python-HeapDict
+ - src-openeuler/python-ipython_genutils
+ - src-openeuler/python-JPype1
+ - src-openeuler/python-JSON_minify
+ - src-openeuler/python-JayDeBeApi
+ - src-openeuler/python-Kajiki
+ - src-openeuler/python-Lasagne
+ - src-openeuler/python-Logbook
+ - src-openeuler/python-ModestMaps
+ - src-openeuler/python-Naked
+ - src-openeuler/python-Parsley
+ - src-openeuler/python-PyDispatcher
+ - src-openeuler/python-PyDrive
+ - src-openeuler/python-PyLaTeX
+ - src-openeuler/python-PyLink
+ - src-openeuler/python-PyMeeus
+ - src-openeuler/python-PyNLPl
+ - src-openeuler/python-PyOpenGL
+ - src-openeuler/python-PyPDF2
+ - src-openeuler/python-PyRSS2Gen
+ - src-openeuler/python-PySimpleSOAP
+ - src-openeuler/python-PySnooper
+ - src-openeuler/python-PyYAML
+ - src-openeuler/python-Pympler
+ - src-openeuler/python-Pyphen
+ - src-openeuler/python-QtAwesome
+ - src-openeuler/python-QtPy
+ - src-openeuler/python-SALib
+ - src-openeuler/python-SQLAlchemy-Utils
+ - src-openeuler/python-Send2Trash
+ - src-openeuler/python-Slowloris
+ - src-openeuler/python-TGScheduler
+ - src-openeuler/python-Theano
+ - src-openeuler/python-Trololio
+ - src-openeuler/python-TurboGears2
+ - src-openeuler/python-Twiggy
+ - src-openeuler/python-Unipath
+ - src-openeuler/python-XStatic
+ - src-openeuler/python-XStatic-Angular
+ - src-openeuler/python-XStatic-Angular-Bootstrap
+ - src-openeuler/python-XStatic-Angular-Gettext
+ - src-openeuler/python-XStatic-Bootstrap-SCSS
+ - src-openeuler/python-XStatic-Font-Awesome
+ - src-openeuler/python-XStatic-JSEncrypt
+ - src-openeuler/python-XStatic-Jasmine
+ - src-openeuler/python-XStatic-Patternfly-Bootstrap-Treeview
+ - src-openeuler/python-XStatic-bootswatch
+ - src-openeuler/python-XStatic-mdi
+ - src-openeuler/python-XStatic-roboto-fontface
+ - src-openeuler/python-XStatic-smart-table
+ - src-openeuler/python-XlsxWriter
+ - src-openeuler/python-Yapsy
+ - src-openeuler/python-ZEO
+ - src-openeuler/python-aaargh
+ - src-openeuler/python-abclient
+ - src-openeuler/python-abimap
+ - src-openeuler/python-adodbapi
+ - src-openeuler/python-aenum
+ - src-openeuler/python-agate
+ - src-openeuler/python-agate-dbf
+ - src-openeuler/python-agate-excel
+ - src-openeuler/python-agate-sql
+ - src-openeuler/python-aiodns
+ - src-openeuler/python-aiofiles
+ - src-openeuler/python-aiohttp-negotiate
+ - src-openeuler/python-aiomqtt
+ - src-openeuler/python-aiomysql
+ - src-openeuler/python-aioodbc
+ - src-openeuler/python-aiorpcX
+ - src-openeuler/python-aiosmtpd
+ - src-openeuler/python-aiosnmp
+ - src-openeuler/python-aiostream
+ - src-openeuler/python-aiounittest
+ - src-openeuler/python-aiowinreg
+ - src-openeuler/python-aiozeroconf
+ - src-openeuler/python-airspeed
+ - src-openeuler/python-alembic
+ - src-openeuler/python-altgraph
+ - src-openeuler/python-amqp
+ - src-openeuler/python-animatplot
+ - src-openeuler/python-ansi2html
+ - src-openeuler/python-ansible-inventory-grapher
+ - src-openeuler/python-ansible-review
+ - src-openeuler/python-ansicolor
+ - src-openeuler/python-ansicolors
+ - src-openeuler/python-anyjson
+ - src-openeuler/python-anykeystore
+ - src-openeuler/python-anymarkup
+ - src-openeuler/python-anymarkup-core
+ - src-openeuler/python-anytree
+ - src-openeuler/python-apptools
+ - src-openeuler/python-apypie
+ - src-openeuler/python-argh
+ - src-openeuler/python-argon2-cffi
+ - src-openeuler/python-argparse-manpage
+ - src-openeuler/python-args
+ - src-openeuler/python-arpy
+ - src-openeuler/python-asciitree
+ - src-openeuler/python-asgiref
+ - src-openeuler/python-aspectlib
+ - src-openeuler/python-aspy
+ - src-openeuler/python-asteval
+ - src-openeuler/python-astral
+ - src-openeuler/python-astroid
+ - src-openeuler/python-astroML
+ - src-openeuler/python-astroplan
+ - src-openeuler/python-astropy
+ - src-openeuler/python-astropy-healpix
+ - src-openeuler/python-astropy-helpers
+ - src-openeuler/python-astroquery
+ - src-openeuler/python-astunparse
+ - src-openeuler/python-async-timeout
+ - src-openeuler/python-async_generator
+ - src-openeuler/python-asyncssh
+ - src-openeuler/python-asynctest
+ - src-openeuler/python-atpublic
+ - src-openeuler/python-audioread
+ - src-openeuler/python-auth.credential
+ - src-openeuler/python-autopep8
+ - src-openeuler/python-babelfish
+ - src-openeuler/python-backcall
+ - src-openeuler/python-backlash
+ - src-openeuler/python-backoff
+ - src-openeuler/python-baluhn
+ - src-openeuler/python-bashate
+ - src-openeuler/python-bcc
+ - src-openeuler/python-beanbag
+ - src-openeuler/python-beniget
+ - src-openeuler/python-bids-validator
+ - src-openeuler/python-bigsuds
+ - src-openeuler/python-billiard
+ - src-openeuler/python-binaryornot
+ - src-openeuler/python-binstruct
+ - src-openeuler/python-bintrees
+ - src-openeuler/python-bitcoinlib
+ - src-openeuler/python-bitlyapi
+ - src-openeuler/python-bitmath
+ - src-openeuler/python-bitstring
+ - src-openeuler/python-bleach
+ - src-openeuler/python-blessed
+ - src-openeuler/python-blessings
+ - src-openeuler/python-blindspin
+ - src-openeuler/python-blockdiag
+ - src-openeuler/python-blowfish
+ - src-openeuler/python-blurb
+ - src-openeuler/python-bobo
+ - src-openeuler/python-booleanOperations
+ - src-openeuler/python-boom
+ - src-openeuler/python-boto
+ - src-openeuler/python-boto3
+ - src-openeuler/python-botocore
+ - src-openeuler/python-bottle-sqlite
+ - src-openeuler/python-branca
+ - src-openeuler/python-bson
+ - src-openeuler/python-btrfs
+ - src-openeuler/python-bucky
+ - src-openeuler/python-bugzilla
+ - src-openeuler/python-bytesize
+ - src-openeuler/python-bz2file
+ - src-openeuler/python-cachelib
+ - src-openeuler/python-cachetools
+ - src-openeuler/python-cachez
+ - src-openeuler/python-cairocffi
+ - src-openeuler/python-canonicaljson
+ - src-openeuler/python-capturer
+ - src-openeuler/python-caribou
+ - src-openeuler/python-case
+ - src-openeuler/python-catkin-sphinx
+ - src-openeuler/python-ccdproc
+ - src-openeuler/python-cchardet
+ - src-openeuler/python-certifi
+ - src-openeuler/python-cfgv
+ - src-openeuler/python-check-manifest
+ - src-openeuler/python-citeproc-py
+ - src-openeuler/python-cjdns
+ - src-openeuler/python-click-completion
+ - src-openeuler/python-click-help-colors
+ - src-openeuler/python-click-log
+ - src-openeuler/python-click-man
+ - src-openeuler/python-click-threading
+ - src-openeuler/python-cliff-tablib
+ - src-openeuler/python-cligj
+ - src-openeuler/python-clint
+ - src-openeuler/python-cloud_sptheme
+ - src-openeuler/python-cloudpickle
+ - src-openeuler/python-cltk
+ - src-openeuler/python-clyent
+ - src-openeuler/python-cmarkgfm
+ - src-openeuler/python-cmdln
+ - src-openeuler/python-cmigemo
+ - src-openeuler/python-cocotb
+ - src-openeuler/python-codecov
+ - src-openeuler/python-colcon-bazel
+ - src-openeuler/python-colorama
+ - src-openeuler/python-colorclass
+ - src-openeuler/python-coloredlogs
+ - src-openeuler/python-colorful
+ - src-openeuler/python-colorlog
+ - src-openeuler/python-colorspacious
+ - src-openeuler/python-colour
+ - src-openeuler/python-colour-runner
+ - src-openeuler/python-conditional
+ - src-openeuler/python-condor
+ - src-openeuler/python-confuse
+ - src-openeuler/python-contextvars
+ - src-openeuler/python-convertdate
+ - src-openeuler/python-copr
+ - src-openeuler/python-copr-common
+ - src-openeuler/python-copr-messaging
+ - src-openeuler/python-cov-core
+ - src-openeuler/python-cram
+ - src-openeuler/python-crank
+ - src-openeuler/python-crashtest
+ - src-openeuler/python-crayons
+ - src-openeuler/python-crcelk
+ - src-openeuler/python-croniter
+ - src-openeuler/python-cson
+ - src-openeuler/python-css-parser
+ - src-openeuler/python-cssmin
+ - src-openeuler/python-cssselect2
+ - src-openeuler/python-csvkit
+ - src-openeuler/python-cu2qu
+ - src-openeuler/python-curio
+ - src-openeuler/python-curtsies
+ - src-openeuler/python-cvss
+ - src-openeuler/python-cxxfilt
+ - src-openeuler/python-cypy
+ - src-openeuler/python-d2to1
+ - src-openeuler/python-daemonize
+ - src-openeuler/python-daiquiri
+ - src-openeuler/python-dataclasses
+ - src-openeuler/python-datanommer.consumer
+ - src-openeuler/python-datanommer.models
+ - src-openeuler/python-dateparser
+ - src-openeuler/python-dbfread
+ - src-openeuler/python-dbus-client-gen
+ - src-openeuler/python-dbus-signature-pyparsing
+ - src-openeuler/python-ddt
+ - src-openeuler/python-deap
+ - src-openeuler/python-debrepo
+ - src-openeuler/python-deepmerge
+ - src-openeuler/python-defusedxml
+ - src-openeuler/python-demjson
+ - src-openeuler/python-deprecation
+ - src-openeuler/python-dict.sorted
+ - src-openeuler/python-dictdumper
+ - src-openeuler/python-diff-match-patch
+ - src-openeuler/python-dill
+ - src-openeuler/python-dirq
+ - src-openeuler/python-diskcache
+ - src-openeuler/python-distlib
+ - src-openeuler/python-distro-info
+ - src-openeuler/python-dj-database-url
+ - src-openeuler/python-dj-email-url
+ - src-openeuler/python-dj-search-url
+ - src-openeuler/python-django
+ - src-openeuler/python-django-ajax-selects
+ - src-openeuler/python-django-angular
+ - src-openeuler/python-django-annoying
+ - src-openeuler/python-django-appconf
+ - src-openeuler/python-django-authority
+ - src-openeuler/python-django-babel
+ - src-openeuler/python-django-cache-url
+ - src-openeuler/python-django-compressor
+ - src-openeuler/python-django-cors-headers
+ - src-openeuler/python-django-crispy-forms
+ - src-openeuler/python-django-debreach
+ - src-openeuler/python-django-debug-toolbar
+ - src-openeuler/python-django-discover-runner
+ - src-openeuler/python-django-filter
+ - src-openeuler/python-django-haystack
+ - src-openeuler/python-django-health-check
+ - src-openeuler/python-django-helpdesk
+ - src-openeuler/python-django-ipware
+ - src-openeuler/python-django-macros
+ - src-openeuler/python-django-markdownx
+ - src-openeuler/python-django-mptt
+ - src-openeuler/python-django-nose
+ - src-openeuler/python-django-pipeline
+ - src-openeuler/python-django-pyscss
+ - src-openeuler/python-django-pytest
+ - src-openeuler/python-django-redis
+ - src-openeuler/python-django-registration
+ - src-openeuler/python-django-rest-framework
+ - src-openeuler/python-django-reversion
+ - src-openeuler/python-django-robots
+ - src-openeuler/python-django-simple-captcha
+ - src-openeuler/python-django-tagging
+ - src-openeuler/python-django-tastypie
+ - src-openeuler/python-django-tinymce
+ - src-openeuler/python-djangoql
+ - src-openeuler/python-dnf
+ - src-openeuler/python-dns-lexicon
+ - src-openeuler/python-dnspython
+ - src-openeuler/python-docker-squash
+ - src-openeuler/python-dockerfile-parse
+ - src-openeuler/python-docx
+ - src-openeuler/python-dogpile.cache
+ - src-openeuler/python-doit
+ - src-openeuler/python-dominate
+ - src-openeuler/python-dotenv
+ - src-openeuler/python-dpath
+ - src-openeuler/python-dpkt
+ - src-openeuler/python-drat
+ - src-openeuler/python-duecredit
+ - src-openeuler/python-dulwich
+ - src-openeuler/python-easyargs
+ - src-openeuler/python-easygui
+ - src-openeuler/python-editdistance
+ - src-openeuler/python-email_reply_parser
+ - src-openeuler/python-emcee
+ - src-openeuler/python-emoji
+ - src-openeuler/python-envisage
+ - src-openeuler/python-enzyme
+ - src-openeuler/python-epdb
+ - src-openeuler/python-epub
+ - src-openeuler/python-et_xmlfile
+ - src-openeuler/python-exif
+ - src-openeuler/python-f5-icontrol-rest
+ - src-openeuler/python-fabulous
+ - src-openeuler/python-fastavro
+ - src-openeuler/python-fasteners
+ - src-openeuler/python-fastimport
+ - src-openeuler/python-fastnumbers
+ - src-openeuler/python-fastpurge
+ - src-openeuler/python-fauxquests
+ - src-openeuler/python-fdb
+ - src-openeuler/python-fedfind
+ - src-openeuler/python-feedgenerator
+ - src-openeuler/python-feedparser
+ - src-openeuler/python-fido2
+ - src-openeuler/python-fields
+ - src-openeuler/python-filetype
+ - src-openeuler/python-fire
+ - src-openeuler/python-firebirdsql
+ - src-openeuler/python-firehose
+ - src-openeuler/python-firewall
+ - src-openeuler/python-first
+ - src-openeuler/python-fisx
+ - src-openeuler/python-flake8-import-order
+ - src-openeuler/python-flaky
+ - src-openeuler/python-flann
+ - src-openeuler/python-flask-multistatic
+ - src-openeuler/python-flask-oidc
+ - src-openeuler/python-flask-restplus
+ - src-openeuler/python-flask-restx
+ - src-openeuler/python-flask-session
+ - src-openeuler/python-flask-whooshee
+ - src-openeuler/python-flatpak-module-tools
+ - src-openeuler/python-flexmock
+ - src-openeuler/python-flickrapi
+ - src-openeuler/python-flock
+ - src-openeuler/python-flower
+ - src-openeuler/python-flufl.i18n
+ - src-openeuler/python-flufl.lock
+ - src-openeuler/python-flufl.testing
+ - src-openeuler/python-flup
+ - src-openeuler/python-fontMath
+ - src-openeuler/python-fontdump
+ - src-openeuler/python-fontname
+ - src-openeuler/python-formats
+ - src-openeuler/python-friendlyloris
+ - src-openeuler/python-frozendict
+ - src-openeuler/python-fsmonitor
+ - src-openeuler/python-fsspec
+ - src-openeuler/python-fuckit
+ - src-openeuler/python-funcparserlib
+ - src-openeuler/python-furl
+ - src-openeuler/python-fusepy
+ - src-openeuler/python-futurist
+ - src-openeuler/python-fuzzyfinder
+ - src-openeuler/python-fypp
+ - src-openeuler/python-gTTS-token
+ - src-openeuler/python-gast
+ - src-openeuler/python-gatspy
+ - src-openeuler/python-gccinvocation
+ - src-openeuler/python-gearbox
+ - src-openeuler/python-genty
+ - src-openeuler/python-geographiclib
+ - src-openeuler/python-geojson
+ - src-openeuler/python-geomet
+ - src-openeuler/python-gerrit-view
+ - src-openeuler/python-gerritlib
+ - src-openeuler/python-gerrymander
+ - src-openeuler/python-getmac
+ - src-openeuler/python-ghp-import2
+ - src-openeuler/python-git-url-parse
+ - src-openeuler/python-gitapi
+ - src-openeuler/python-gitdb
+ - src-openeuler/python-githubpy
+ - src-openeuler/python-gitlab
+ - src-openeuler/python-glad
+ - src-openeuler/python-glances_api
+ - src-openeuler/python-glob2
+ - src-openeuler/python-gntp
+ - src-openeuler/python-gnupg
+ - src-openeuler/python-google-auth
+ - src-openeuler/python-google-compute-engine
+ - src-openeuler/python-gpxpy
+ - src-openeuler/python-grabbit
+ - src-openeuler/python-grabserial
+ - src-openeuler/python-guizero
+ - src-openeuler/python-gwebsockets
+ - src-openeuler/python-h11
+ - src-openeuler/python-h5io
+ - src-openeuler/python-hdfs
+ - src-openeuler/python-heketi
+ - src-openeuler/python-hgapi
+ - src-openeuler/python-hgdistver
+ - src-openeuler/python-hkdf
+ - src-openeuler/python-hl7
+ - src-openeuler/python-hole
+ - src-openeuler/python-holidays
+ - src-openeuler/python-hstspreload
+ - src-openeuler/python-html2text
+ - src-openeuler/python-htmlmin
+ - src-openeuler/python-httmock
+ - src-openeuler/python-http_client
+ - src-openeuler/python-httpsig_cffi
+ - src-openeuler/python-httptools
+ - src-openeuler/python-humanfriendly
+ - src-openeuler/python-humblewx
+ - src-openeuler/python-husl
+ - src-openeuler/python-hypothesis-fspaths
+ - src-openeuler/python-icalendar
+ - src-openeuler/python-identify
+ - src-openeuler/python-idstools
+ - src-openeuler/python-ifcfg
+ - src-openeuler/python-igor
+ - src-openeuler/python-igraph
+ - src-openeuler/python-img2pdf
+ - src-openeuler/python-importmagic
+ - src-openeuler/python-inema
+ - src-openeuler/python-injector
+ - src-openeuler/python-interfile
+ - src-openeuler/python-intervaltree
+ - src-openeuler/python-into-dbus-python
+ - src-openeuler/python-iowait
+ - src-openeuler/python-ipdb
+ - src-openeuler/python-ipgetter2
+ - src-openeuler/python-isodate
+ - src-openeuler/python-isort
+ - src-openeuler/python-javalang
+ - src-openeuler/python-jdcal
+ - src-openeuler/python-jeepney
+ - src-openeuler/python-jinja2-time
+ - src-openeuler/python-jinja2_pluralize
+ - src-openeuler/python-journal-brief
+ - src-openeuler/python-jsmin
+ - src-openeuler/python-json2table
+ - src-openeuler/python-json5
+ - src-openeuler/python-json_logger
+ - src-openeuler/python-jsonmodels
+ - src-openeuler/python-jsonpath-rw
+ - src-openeuler/python-jsonpath-rw-ext
+ - src-openeuler/python-justbytes
+ - src-openeuler/python-jwcrypto
+ - src-openeuler/python-kaitaistruct
+ - src-openeuler/python-kaptan
+ - src-openeuler/python-kdcproxy
+ - src-openeuler/python-kerberos
+ - src-openeuler/python-kickstart
+ - src-openeuler/python-klusta
+ - src-openeuler/python-kobo
+ - src-openeuler/python-krbcontext
+ - src-openeuler/python-landslide
+ - src-openeuler/python-langtable
+ - src-openeuler/python-lark-parser
+ - src-openeuler/python-lasso
+ - src-openeuler/python-launchpadlib
+ - src-openeuler/python-lazr.config
+ - src-openeuler/python-lazr.delegates
+ - src-openeuler/python-lazr.restfulclient
+ - src-openeuler/python-lazr.smtptest
+ - src-openeuler/python-lazr.uri
+ - src-openeuler/python-lazyarray
+ - src-openeuler/python-lazy-object-proxy
+ - src-openeuler/python-leather
+ - src-openeuler/python-lesscpy
+ - src-openeuler/python-libNeuroML
+ - src-openeuler/python-libarchive-c
+ - src-openeuler/python-libevdev
+ - src-openeuler/python-liblinear
+ - src-openeuler/python-libmount
+ - src-openeuler/python-libnacl
+ - src-openeuler/python-libnl
+ - src-openeuler/python-librosa
+ - src-openeuler/python-libsass
+ - src-openeuler/python-libtmux
+ - src-openeuler/python-libusb1
+ - src-openeuler/python-libvoikko
+ - src-openeuler/python-liquidctl
+ - src-openeuler/python-listparser
+ - src-openeuler/python-littleutils
+ - src-openeuler/python-livereload
+ - src-openeuler/python-lmdb
+ - src-openeuler/python-locket
+ - src-openeuler/python-lockfile
+ - src-openeuler/python-logging_tree
+ - src-openeuler/python-logzero
+ - src-openeuler/python-lrparsing
+ - src-openeuler/python-lttngust
+ - src-openeuler/python-luftdaten
+ - src-openeuler/python-lupa
+ - src-openeuler/python-mailer
+ - src-openeuler/python-makeelf
+ - src-openeuler/python-manuel
+ - src-openeuler/python-maps
+ - src-openeuler/python-markdown2
+ - src-openeuler/python-marshmallow
+ - src-openeuler/python-mccabe
+ - src-openeuler/python-mdx_gh_links
+ - src-openeuler/python-med
+ - src-openeuler/python-metaextract
+ - src-openeuler/python-metar
+ - src-openeuler/python-micawber
+ - src-openeuler/python-microfs
+ - src-openeuler/python-migen
+ - src-openeuler/python-migrate
+ - src-openeuler/python-mimerender
+ - src-openeuler/python-minibelt
+ - src-openeuler/python-minidb
+ - src-openeuler/python-minidump
+ - src-openeuler/python-mne
+ - src-openeuler/python-mne-bids
+ - src-openeuler/python-mnemonic
+ - src-openeuler/python-modernize
+ - src-openeuler/python-moksha.common
+ - src-openeuler/python-mongoengine
+ - src-openeuler/python-monotonic
+ - src-openeuler/python-mpmath
+ - src-openeuler/python-msgpack
+ - src-openeuler/python-mtg
+ - src-openeuler/python-multi_key_dict
+ - src-openeuler/python-multidict
+ - src-openeuler/python-multio
+ - src-openeuler/python-multipart
+ - src-openeuler/python-munkres
+ - src-openeuler/python-musicbrainzngs
+ - src-openeuler/python-mutagen
+ - src-openeuler/python-mwclient
+ - src-openeuler/python-mygpoclient
+ - src-openeuler/python-nb2plots
+ - src-openeuler/python-ndjson-testrunner
+ - src-openeuler/python-neomodel
+ - src-openeuler/python-neotime
+ - src-openeuler/python-neovim
+ - src-openeuler/python-netdata
+ - src-openeuler/python-ngram
+ - src-openeuler/python-nine
+ - src-openeuler/python-nltk
+ - src-openeuler/python-nmap
+ - src-openeuler/python-nmrglue
+ - src-openeuler/python-nose-cov
+ - src-openeuler/python-nose-exclude
+ - src-openeuler/python-nose-ignore-docstring
+ - src-openeuler/python-nose-parameterized
+ - src-openeuler/python-nose-progressive
+ - src-openeuler/python-nose-timer
+ - src-openeuler/python-nose2
+ - src-openeuler/python-nose_fixes
+ - src-openeuler/python-notario
+ - src-openeuler/python-notify2
+ - src-openeuler/python-notmuch
+ - src-openeuler/python-ns1-python
+ - src-openeuler/python-nss
+ - src-openeuler/python-ntlm-auth
+ - src-openeuler/python-nudatus
+ - src-openeuler/python-num2words
+ - src-openeuler/python-numpoly
+ - src-openeuler/python-oauth2client
+ - src-openeuler/python-odML
+ - src-openeuler/python-odfpy
+ - src-openeuler/python-offtrac
+ - src-openeuler/python-ofxparse
+ - src-openeuler/python-okaara
+ - src-openeuler/python-oletools
+ - src-openeuler/python-openidc-client
+ - src-openeuler/python-openpyxl
+ - src-openeuler/python-opensensemap-api
+ - src-openeuler/python-openstackdocstheme
+ - src-openeuler/python-orderedmultidict
+ - src-openeuler/python-os-service-types
+ - src-openeuler/python-oslo.i18n
+ - src-openeuler/python-oslo.sphinx
+ - src-openeuler/python-oslotest
+ - src-openeuler/python-outcome
+ - src-openeuler/python-outdated
+ - src-openeuler/python-packit
+ - src-openeuler/python-pacpy
+ - src-openeuler/python-paho-mqtt
+ - src-openeuler/python-pamela
+ - src-openeuler/python-pandocfilters
+ - src-openeuler/python-paperwork-backend
+ - src-openeuler/python-parameterized
+ - src-openeuler/python-parsedatetime
+ - src-openeuler/python-parso
+ - src-openeuler/python-passlib
+ - src-openeuler/python-pastel
+ - src-openeuler/python-patch-ng
+ - src-openeuler/python-pathlib2
+ - src-openeuler/python-pathspec
+ - src-openeuler/python-pathtools
+ - src-openeuler/python-patool
+ - src-openeuler/python-patsy
+ - src-openeuler/python-pbkdf2
+ - src-openeuler/python-pdc-client
+ - src-openeuler/python-pdfkit
+ - src-openeuler/python-pdfminer
+ - src-openeuler/python-pdfrw
+ - src-openeuler/python-pdir2
+ - src-openeuler/python-peewee
+ - src-openeuler/python-pendulum
+ - src-openeuler/python-pep517
+ - src-openeuler/python-periodictable
+ - src-openeuler/python-persist-queue
+ - src-openeuler/python-pg8000
+ - src-openeuler/python-pgpdump
+ - src-openeuler/python-phonenumbers
+ - src-openeuler/python-phpserialize
+ - src-openeuler/python-piexif
+ - src-openeuler/python-pigpio
+ - src-openeuler/python-pika-pool
+ - src-openeuler/python-pipdeptree
+ - src-openeuler/python-pkginfo
+ - src-openeuler/python-pkgwat.api
+ - src-openeuler/python-plaintable
+ - src-openeuler/python-player
+ - src-openeuler/python-plink
+ - src-openeuler/python-pluginbase
+ - src-openeuler/python-pluginlib
+ - src-openeuler/python-plugnplay
+ - src-openeuler/python-plumbum
+ - src-openeuler/python-podcastparser
+ - src-openeuler/python-portalocker
+ - src-openeuler/python-power
+ - src-openeuler/python-poyo
+ - src-openeuler/python-praw
+ - src-openeuler/python-prettyprinter
+ - src-openeuler/python-process-tests
+ - src-openeuler/python-profilehooks
+ - src-openeuler/python-progress
+ - src-openeuler/python-progressbar2
+ - src-openeuler/python-prometheus_client
+ - src-openeuler/python-psycogreen
+ - src-openeuler/python-pudb
+ - src-openeuler/python-pulsectl
+ - src-openeuler/python-pungi
+ - src-openeuler/python-pure-sasl
+ - src-openeuler/python-pvc
+ - src-openeuler/python-py-cpuinfo
+ - src-openeuler/python-py-make
+ - src-openeuler/python-py2pack
+ - src-openeuler/python-pyLibravatar
+ - src-openeuler/python-pyModbusTCP
+ - src-openeuler/python-pyPEG2
+ - src-openeuler/python-pyTelegramBotAPI
+ - src-openeuler/python-pyactivetwo
+ - src-openeuler/python-pyaes
+ - src-openeuler/python-pyasn1-modules
+ - src-openeuler/python-pybeam
+ - src-openeuler/python-pycares
+ - src-openeuler/python-pyclipper
+ - src-openeuler/python-pycodestyle
+ - src-openeuler/python-pycollada
+ - src-openeuler/python-pycryptodome
+ - src-openeuler/python-pycryptodomex
+ - src-openeuler/python-pycscope
+ - src-openeuler/python-pydenticon
+ - src-openeuler/python-pydicom
+ - src-openeuler/python-pydocstyle
+ - src-openeuler/python-pyelectro
+ - src-openeuler/python-pyephem
+ - src-openeuler/python-pyface
+ - src-openeuler/python-pyfakefs
+ - src-openeuler/python-pyftdi
+ - src-openeuler/python-pyftpdlib
+ - src-openeuler/python-pygal
+ - src-openeuler/python-pygatt
+ - src-openeuler/python-pygeoip
+ - src-openeuler/python-pyghmi
+ - src-openeuler/python-pygments-style-solarized
+ - src-openeuler/python-pyhcl
+ - src-openeuler/python-pyi2cflash
+ - src-openeuler/python-pyinstaller
+ - src-openeuler/python-pykalman
+ - src-openeuler/python-pykeepass
+ - src-openeuler/python-pylast
+ - src-openeuler/python-pylev
+ - src-openeuler/python-pylons-sphinx-themes
+ - src-openeuler/python-pymatreader
+ - src-openeuler/python-pymemcache
+ - src-openeuler/python-pymoc
+ - src-openeuler/python-pymod2pkg
+ - src-openeuler/python-pynetdicom
+ - src-openeuler/python-pyngus
+ - src-openeuler/python-pynvml
+ - src-openeuler/python-pyocr
+ - src-openeuler/python-pyotp
+ - src-openeuler/python-pypandoc
+ - src-openeuler/python-pyperclip
+ - src-openeuler/python-pypng
+ - src-openeuler/python-pyprocdev
+ - src-openeuler/python-pyrad
+ - src-openeuler/python-pyramid_fas_openid
+ - src-openeuler/python-pyreadline
+ - src-openeuler/python-pyroute2
+ - src-openeuler/python-pyrsistent
+ - src-openeuler/python-pyrtlsdr
+ - src-openeuler/python-pysb
+ - src-openeuler/python-pyserial
+ - src-openeuler/python-pyshark
+ - src-openeuler/python-pyshp
+ - src-openeuler/python-pysmi
+ - src-openeuler/python-pysnmp
+ - src-openeuler/python-pyspf
+ - src-openeuler/python-pyspiflash
+ - src-openeuler/python-pysrt
+ - src-openeuler/python-pystache
+ - src-openeuler/python-pystalk
+ - src-openeuler/python-pystoi
+ - src-openeuler/python-pystray
+ - src-openeuler/python-pytest-arraydiff
+ - src-openeuler/python-pytest-asyncio
+ - src-openeuler/python-pytest-beakerlib
+ - src-openeuler/python-pytest-cache
+ - src-openeuler/python-pytest-capturelog
+ - src-openeuler/python-pytest-catchlog
+ - src-openeuler/python-pytest-datafiles
+ - src-openeuler/python-pytest-doctestplus
+ - src-openeuler/python-pytest-faulthandler
+ - src-openeuler/python-pytest-flakes
+ - src-openeuler/python-pytest-forked
+ - src-openeuler/python-pytest-helpers-namespace
+ - src-openeuler/python-pytest-isort
+ - src-openeuler/python-pytest-lazy-fixture
+ - src-openeuler/python-pytest-metadata
+ - src-openeuler/python-pytest-multihost
+ - src-openeuler/python-pytest-openfiles
+ - src-openeuler/python-pytest-ordering
+ - src-openeuler/python-pytest-pep8
+ - src-openeuler/python-pytest-random-order
+ - src-openeuler/python-pytest-relaxed
+ - src-openeuler/python-pytest-remotedata
+ - src-openeuler/python-pytest-repeat
+ - src-openeuler/python-pytest-rerunfailures
+ - src-openeuler/python-pytest-runner
+ - src-openeuler/python-pytest-sourceorder
+ - src-openeuler/python-pytest-subtests
+ - src-openeuler/python-pytest-sugar
+ - src-openeuler/python-pytest-testmon
+ - src-openeuler/python-pytest-timeout
+ - src-openeuler/python-pytest-toolbox
+ - src-openeuler/python-pytest-tornado
+ - src-openeuler/python-pytest-watch
+ - src-openeuler/python-pytest-xdist
+ - src-openeuler/python-pytest-xprocess
+ - src-openeuler/python-pytimeparse
+ - src-openeuler/python-pytools
+ - src-openeuler/python-pytrailer
+ - src-openeuler/python-pytzdata
+ - src-openeuler/python-pyusb
+ - src-openeuler/python-pyvit
+ - src-openeuler/python-pyvmomi
+ - src-openeuler/python-pyvo
+ - src-openeuler/python-pyxdg
+ - src-openeuler/python-pyxs
+ - src-openeuler/python-pyzabbix
+ - src-openeuler/python-pyzmq
+ - src-openeuler/python-pyzolib
+ - src-openeuler/python-qcelemental
+ - src-openeuler/python-qrcodegen
+ - src-openeuler/python-quantities
+ - src-openeuler/python-queuelib
+ - src-openeuler/python-random2
+ - src-openeuler/python-rangehttpserver
+ - src-openeuler/python-rarfile
+ - src-openeuler/python-ratelimitingfilter
+ - src-openeuler/python-rawkit
+ - src-openeuler/python-rcssmin
+ - src-openeuler/python-rebulk
+ - src-openeuler/python-regex
+ - src-openeuler/python-remoto
+ - src-openeuler/python-renderspec
+ - src-openeuler/python-repoze.sphinx.autointerface
+ - src-openeuler/python-repoze.tm2
+ - src-openeuler/python-repoze.who
+ - src-openeuler/python-repoze.who.plugins.sa
+ - src-openeuler/python-requests-gssapi
+ - src-openeuler/python-requests-kerberos
+ - src-openeuler/python-requests-ntlm
+ - src-openeuler/python-requests-oauthlib
+ - src-openeuler/python-requestsexceptions
+ - src-openeuler/python-restfly
+ - src-openeuler/python-restsh
+ - src-openeuler/python-retask
+ - src-openeuler/python-retrying
+ - src-openeuler/python-retryz
+ - src-openeuler/python-rfc3986
+ - src-openeuler/python-ripozo
+ - src-openeuler/python-rjsmin
+ - src-openeuler/python-rmtest
+ - src-openeuler/python-rnc2rng
+ - src-openeuler/python-roman
+ - src-openeuler/python-rope
+ - src-openeuler/python-rosinstall
+ - src-openeuler/python-rpdb
+ - src-openeuler/python-rstcheck
+ - src-openeuler/python-ruffus
+ - src-openeuler/python-rustcfg
+ - src-openeuler/python-rxjson
+ - src-openeuler/python-saml
+ - src-openeuler/python-sanction
+ - src-openeuler/python-scales
+ - src-openeuler/python-scandir
+ - src-openeuler/python-scapy
+ - src-openeuler/python-schema
+ - src-openeuler/python-scp
+ - src-openeuler/python-scramp
+ - src-openeuler/python-scripttester
+ - src-openeuler/python-scrypt
+ - src-openeuler/python-selectors2
+ - src-openeuler/python-semver
+ - src-openeuler/python-serpy
+ - src-openeuler/python-setuptools_hg
+ - src-openeuler/python-sh
+ - src-openeuler/python-shamir-mnemonic
+ - src-openeuler/python-shodan
+ - src-openeuler/python-shortuuid
+ - src-openeuler/python-should_dsl
+ - src-openeuler/python-sieve
+ - src-openeuler/python-simplebayes
+ - src-openeuler/python-simpleeval
+ - src-openeuler/python-simplejson
+ - src-openeuler/python-simplepam
+ - src-openeuler/python-simplevisor
+ - src-openeuler/python-simpy
+ - src-openeuler/python-siphash
+ - src-openeuler/python-slack-cleaner
+ - src-openeuler/python-slacker
+ - src-openeuler/python-slixmpp
+ - src-openeuler/python-slugify
+ - src-openeuler/python-smmap
+ - src-openeuler/python-sniffio
+ - src-openeuler/python-snuggs
+ - src-openeuler/python-social-auth-app-flask
+ - src-openeuler/python-social-auth-app-flask-sqlalchemy
+ - src-openeuler/python-social-auth-storage-sqlalchemy
+ - src-openeuler/python-sockjs-tornado
+ - src-openeuler/python-socks5line
+ - src-openeuler/python-sortedcontainers
+ - src-openeuler/python-spake2
+ - src-openeuler/python-spdx-lookup
+ - src-openeuler/python-speaklater
+ - src-openeuler/python-spec
+ - src-openeuler/python-speedtest-cli
+ - src-openeuler/python-speg
+ - src-openeuler/python-sphinx-argparse
+ - src-openeuler/python-sphinx-epytext
+ - src-openeuler/python-sphinx-gallery
+ - src-openeuler/python-sphinx-intl
+ - src-openeuler/python-sphinx-notfound-page
+ - src-openeuler/python-sphinxcontrib-applehelp
+ - src-openeuler/python-sphinxcontrib-blockdiag
+ - src-openeuler/python-sphinxcontrib-devhelp
+ - src-openeuler/python-sphinxcontrib-fulltoc
+ - src-openeuler/python-sphinxcontrib-htmlhelp
+ - src-openeuler/python-sphinxcontrib-issuetracker
+ - src-openeuler/python-sphinxcontrib-jsmath
+ - src-openeuler/python-sphinxcontrib-qthelp
+ - src-openeuler/python-sphinxcontrib-serializinghtml
+ - src-openeuler/python-sphinxtesters
+ - src-openeuler/python-sphobjinv
+ - src-openeuler/python-spur
+ - src-openeuler/python-sqlalchemy-collectd
+ - src-openeuler/python-sqlalchemy_schemadisplay
+ - src-openeuler/python-sqlparse
+ - src-openeuler/python-sseclient
+ - src-openeuler/python-statistics
+ - src-openeuler/python-statsd
+ - src-openeuler/python-statsmodels
+ - src-openeuler/python-stdlib-list
+ - src-openeuler/python-stem
+ - src-openeuler/python-stevedore
+ - src-openeuler/python-stomper
+ - src-openeuler/python-stompest
+ - src-openeuler/python-stuf
+ - src-openeuler/python-subliminal
+ - src-openeuler/python-supersmoother
+ - src-openeuler/python-svg
+ - src-openeuler/python-svg.path
+ - src-openeuler/python-svgwrite
+ - src-openeuler/python-sympy
+ - src-openeuler/python-tabulate
+ - src-openeuler/python-tambo
+ - src-openeuler/python-tasklib
+ - src-openeuler/python-tbgrep
+ - src-openeuler/python-tblib
+ - src-openeuler/python-tbtrim
+ - src-openeuler/python-tempdir
+ - src-openeuler/python-termcolor
+ - src-openeuler/python-terminaltables
+ - src-openeuler/python-test-server
+ - src-openeuler/python-testpath
+ - src-openeuler/python-testrepository
+ - src-openeuler/python-testresources
+ - src-openeuler/python-texext
+ - src-openeuler/python-text-unidecode
+ - src-openeuler/python-textparser
+ - src-openeuler/python-tftpy
+ - src-openeuler/python-tgext.crud
+ - src-openeuler/python-timeout-decorator
+ - src-openeuler/python-timeunit
+ - src-openeuler/python-tinydb
+ - src-openeuler/python-tinyrpc
+ - src-openeuler/python-toolz
+ - src-openeuler/python-tox
+ - src-openeuler/python-traitsui
+ - src-openeuler/python-traitlets
+ - src-openeuler/python-translationstring
+ - src-openeuler/python-trustme
+ - src-openeuler/python-tvb-data
+ - src-openeuler/python-tw2.core
+ - src-openeuler/python-tw2.forms
+ - src-openeuler/python-tw2.jqplugins.ui
+ - src-openeuler/python-tw2.jquery
+ - src-openeuler/python-twilio
+ - src-openeuler/python-txWS
+ - src-openeuler/python-txZMQ
+ - src-openeuler/python-typing
+ - src-openeuler/python-typogrify
+ - src-openeuler/python-tzlocal
+ - src-openeuler/python-unicodecsv
+ - src-openeuler/python-unidiff
+ - src-openeuler/python-upoints
+ - src-openeuler/python-uritemplate
+ - src-openeuler/python-urllib_gssapi
+ - src-openeuler/python-urwidtrees
+ - src-openeuler/python-utmp
+ - src-openeuler/python-uwsgidecorators
+ - src-openeuler/python-vagrantpy
+ - src-openeuler/python-validators
+ - src-openeuler/python-vatnumber
+ - src-openeuler/python-vconnector
+ - src-openeuler/python-vdirsyncer
+ - src-openeuler/python-verboselogs
+ - src-openeuler/python-versiontools
+ - src-openeuler/python-vine
+ - src-openeuler/python-virtualenv-api
+ - src-openeuler/python-virtualenv-clone
+ - src-openeuler/python-virtualenvwrapper
+ - src-openeuler/python-visidata
+ - src-openeuler/python-visitor
+ - src-openeuler/python-visvis
+ - src-openeuler/python-vobject
+ - src-openeuler/python-volkszaehler
+ - src-openeuler/python-voluptuous
+ - src-openeuler/python-vpoller
+ - src-openeuler/python-vulture
+ - src-openeuler/python-w3lib
+ - src-openeuler/python-wadllib
+ - src-openeuler/python-walkdir
+ - src-openeuler/python-warlock
+ - src-openeuler/python-watchdog
+ - src-openeuler/python-webassets
+ - src-openeuler/python-webcolors
+ - src-openeuler/python-websockets
+ - src-openeuler/python-websockify
+ - src-openeuler/python-webthing-ws
+ - src-openeuler/python-whichcraft
+ - src-openeuler/python-whisper
+ - src-openeuler/python-whitenoise
+ - src-openeuler/python-whois
+ - src-openeuler/python-wikipedia
+ - src-openeuler/python-wikitcms
+ - src-openeuler/python-winacl
+ - src-openeuler/python-winrm
+ - src-openeuler/python-wsproto
+ - src-openeuler/python-wrapt
+ - src-openeuler/python-wtf-peewee
+ - src-openeuler/python-wurlitzer
+ - src-openeuler/python-www-authenticate
+ - src-openeuler/python-wxnatpy
+ - src-openeuler/python-xarray
+ - src-openeuler/python-xcffib
+ - src-openeuler/python-xlib
+ - src-openeuler/python-xlrd
+ - src-openeuler/python-xlwt
+ - src-openeuler/python-xml2rfc
+ - src-openeuler/python-xmlrunner
+ - src-openeuler/python-xmltodict
+ - src-openeuler/python-xpath-expressions
+ - src-openeuler/python-xtermcolor
+ - src-openeuler/python-xunitparser
+ - src-openeuler/python-xvfbwrapper
+ - src-openeuler/python-xxhash
+ - src-openeuler/python-yamlordereddictloader
+ - src-openeuler/python-yaql
+ - src-openeuler/python-yara
+ - src-openeuler/python-yarg
+ - src-openeuler/python-yarl
+ - src-openeuler/python-yaspin
+ - src-openeuler/python-yaswfp
+ - src-openeuler/python-yattag
+ - src-openeuler/python-yubico
+ - src-openeuler/python-yubikey-manager
+ - src-openeuler/python-zabbix-api-erigones
+ - src-openeuler/python-zanata2fedmsg
+ - src-openeuler/python-zarr
+ - src-openeuler/python-zc.customdoctests
+ - src-openeuler/python-zdaemon
+ - src-openeuler/python-zipstream
+ - src-openeuler/python-zope.dottedname
+ - src-openeuler/python-zope.fixers
+ - src-openeuler/python-zope.i18n
+ - src-openeuler/python-zope.i18nmessageid
+ - src-openeuler/python-zope.testing
+ - src-openeuler/python-lightgbm
+ - src-openeuler/python-eli5
+ - src-openeuler/python-blaze
+ - src-openeuler/python-Flask-Cors
+ - src-openeuler/python-odo
+ - src-openeuler/python-datashape
+ - src-openeuler/python-multipledispatch
+ - src-openeuler/python3-docs
+ - src-openeuler/python-concurrent-log-handler
+- name: sig-release-management
+ repositories:
+ - src-openeuler/openEuler-lsb
+ - openeuler/openEuler-lsb
+ - openeuler/release-management
+- name: xfce
+ repositories:
+ - src-openeuler/Thunar
+ - src-openeuler/catfish
+ - src-openeuler/exo
+ - src-openeuler/garcon
+ - src-openeuler/gigolo
+ - src-openeuler/hddtemp
+ - src-openeuler/libglademm24
+ - src-openeuler/libgnomecanvasmm26
+ - src-openeuler/libmpd
+ - src-openeuler/libxfce4ui
+ - src-openeuler/libxfce4util
+ - src-openeuler/lightdm
+ - src-openeuler/lightdm-gtk
+ - src-openeuler/lightdm-gtk-greeter
+ - src-openeuler/mousepad
+ - src-openeuler/orage
+ - src-openeuler/parole
+ - src-openeuler/python-distutils-extra
+ - src-openeuler/ristretto
+ - src-openeuler/thunar-archive-plugin
+ - src-openeuler/thunar-media-tags-plugin
+ - src-openeuler/thunar-vcs-plugin
+ - src-openeuler/thunar-volman
+ - src-openeuler/thunarx-python
+ - src-openeuler/tumbler
+ - src-openeuler/xarchiver
+ - src-openeuler/xfburn
+ - src-openeuler/xfce-polkit
+ - src-openeuler/xfce-theme-manager
+ - src-openeuler/xfce4-appfinder
+ - src-openeuler/xfce4-battery-plugin
+ - src-openeuler/xfce4-calculator-plugin
+ - src-openeuler/xfce4-clipman-plugin
+ - src-openeuler/xfce4-cpufreq-plugin
+ - src-openeuler/xfce4-cpugraph-plugin
+ - src-openeuler/xfce4-datetime-plugin
+ - src-openeuler/xfce4-dev-tools
+ - src-openeuler/xfce4-dict
+ - src-openeuler/xfce4-diskperf-plugin
+ - src-openeuler/xfce4-embed-plugin
+ - src-openeuler/xfce4-eyes-plugin
+ - src-openeuler/xfce4-fsguard-plugin
+ - src-openeuler/xfce4-genmon-plugin
+ - src-openeuler/xfce4-hardware-monitor-plugin
+ - src-openeuler/xfce4-mailwatch-plugin
+ - src-openeuler/xfce4-mount-plugin
+ - src-openeuler/xfce4-mpc-plugin
+ - src-openeuler/xfce4-netload-plugin
+ - src-openeuler/xfce4-notes-plugin
+ - src-openeuler/xfce4-notifyd
+ - src-openeuler/xfce4-panel
+ - src-openeuler/xfce4-panel-profiles
+ - src-openeuler/xfce4-places-plugin
+ - src-openeuler/xfce4-power-manager
+ - src-openeuler/xfce4-pulseaudio-plugin
+ - src-openeuler/xfce4-screensaver
+ - src-openeuler/xfce4-screenshooter
+ - src-openeuler/xfce4-sensors-plugin
+ - src-openeuler/xfce4-session
+ - src-openeuler/xfce4-settings
+ - src-openeuler/xfce4-smartbookmark-plugin
+ - src-openeuler/xfce4-statusnotifier-plugin
+ - src-openeuler/xfce4-systemload-plugin
+ - src-openeuler/xfce4-taskmanager
+ - src-openeuler/xfce4-terminal
+ - src-openeuler/xfce4-time-out-plugin
+ - src-openeuler/xfce4-timer-plugin
+ - src-openeuler/xfce4-vala
+ - src-openeuler/xfce4-verve-plugin
+ - src-openeuler/xfce4-volumed-pulse
+ - src-openeuler/xfce4-wavelan-plugin
+ - src-openeuler/xfce4-weather-plugin
+ - src-openeuler/xfce4-whiskermenu-plugin
+ - src-openeuler/xfce4-xkb-plugin
+ - src-openeuler/xfconf
+ - src-openeuler/xfdashboard
+ - src-openeuler/xfdesktop
+ - src-openeuler/xfwm4
+- name: GNOME
+ repositories:
+ - src-openeuler/gdlmm
+ - src-openeuler/libgdl
+ - src-openeuler/qgnomeplatform
+ - src-openeuler/gnome-control-center
+ - src-openeuler/gtk-doc
+ - src-openeuler/nautilus
+ - src-openeuler/mutter
+ - src-openeuler/libgnomekbd
+ - src-openeuler/libgnomecanvas
+ - src-openeuler/gnome-themes-standard
+ - src-openeuler/gnome-online-accounts
+ - src-openeuler/gnome-autoar
+ - src-openeuler/gnome-desktop3
+ - src-openeuler/gnome-vfs2
+ - src-openeuler/libgnome
+- name: sig-desktop-apps
+ repositories:
+ - src-openeuler/vnpy
+ - src-openeuler/musescore
+ - src-openeuler/lilypond
+ - src-openeuler/uget
+ - src-openeuler/meld
+ - src-openeuler/thunderbird
+- name: sig-DDE
+ repositories:
+ - src-openeuler/dde-control-center
+ - src-openeuler/blur-effect
+ - src-openeuler/dde-api
+ - src-openeuler/dde-calendar
+ - src-openeuler/dde-clipboard
+ - src-openeuler/dde-daemon
+ - src-openeuler/dde-dock
+ - src-openeuler/dde-file-manager
+ - src-openeuler/dde-introduction
+ - src-openeuler/deepin-kwin
+ - src-openeuler/dde-kwin
+ - src-openeuler/dde-launcher
+ - src-openeuler/dde-network-utils
+ - src-openeuler/dde-polkit-agent
+ - src-openeuler/dde-qt-dbus-factory
+ - src-openeuler/dde-session-shell
+ - src-openeuler/dde-session-ui
+ - src-openeuler/deepin-anything
+ - src-openeuler/deepin-compressor
+ - src-openeuler/deepin-desktop-base
+ - src-openeuler/deepin-desktop-schemas
+ - src-openeuler/deepin-devicemanager
+ - src-openeuler/deepin-editor
+ - src-openeuler/deepin-font-manager
+ - src-openeuler/deepin-gettext-tools
+ - src-openeuler/deepin-graphics-driver-manager
+ - src-openeuler/deepin-image-viewer
+ - src-openeuler/deepin-log-viewer
+ - src-openeuler/deepin-manual
+ - src-openeuler/deepin-menu
+ - src-openeuler/deepin-reader
+ - src-openeuler/deepin-shortcut-viewer
+ - src-openeuler/deepin-system-monitor
+ - src-openeuler/deepin-terminal
+ - src-openeuler/deepin-turbo
+ - src-openeuler/deepin-sound-theme
+ - src-openeuler/dtkcore
+ - src-openeuler/dtkcore2
+ - src-openeuler/dtkgui
+ - src-openeuler/dtkwidget
+ - src-openeuler/dtkwidget2
+ - src-openeuler/dtkwm
+ - src-openeuler/deepin-icon-theme
+ - src-openeuler/qt5integration
+ - src-openeuler/udisks2-qt5
+ - src-openeuler/startdde
+ - src-openeuler/deepin-wallpapers
+ - src-openeuler/deepin-gtk-theme
+ - src-openeuler/dde-account-faces
+ - src-openeuler/dde-server-industry-config
+ - src-openeuler/dde-device-formatter
+ - src-openeuler/deepin-clone
+ - src-openeuler/deepin-dbus-generator
+ - src-openeuler/deepin-default-settings
+ - src-openeuler/deepin-gir-generator
+ - src-openeuler/deepin-qml-widgets
+ - src-openeuler/dde
+- name: sig-high-performance-network
+ repositories:
+ - src-openeuler/dwarves
+ - src-openeuler/dpdk
+ - src-openeuler/rdma-core
+ - src-openeuler/libbpf
+ - src-openeuler/goebpf
+ - src-openeuler/xdp-tools
+ - src-openeuler/libvma
+ - src-openeuler/polycube
+ - src-openeuler/libkefir
+ - src-openeuler/cilium
+ - src-openeuler/katran
+ - src-openeuler/pistache
+ - src-openeuler/libyang
+ - src-openeuler/libtins
+ - src-openeuler/go-bindata
+ - src-openeuler/seastar
+- name: sig-openstack
+ repositories:
+ - src-openeuler/openstack-nova
+ - src-openeuler/openstack-python-novaclient
+ - src-openeuler/openstack-neutron
+- name: sig-wine
+ repositories:
+ - src-openeuler/wine
+- name: sig-OS-Builder
+ repositories:
+ - src-openeuler/anaconda
+ - src-openeuler/anaconda-user-help
+ - src-openeuler/blivet-gui
+ - src-openeuler/cdrkit
+ - src-openeuler/dnf
+ - src-openeuler/dnf-plugins-core
+ - src-openeuler/libdnf
+ - src-openeuler/libsolv
+ - src-openeuler/efi-rpm-macros
+ - src-openeuler/efibootmgr
+ - src-openeuler/efivar
+ - src-openeuler/grub2
+ - src-openeuler/ipxe
+ - src-openeuler/syslinux
+ - src-openeuler/lorax
+ - src-openeuler/python-blivet
+ - src-openeuler/uboot-tools
+ - src-openeuler/python-dasbus
+ - src-openeuler/oemaker
+ - openeuler/oemaker
+- name: sig-Gatekeeper
+ repositories:
+ - openeuler/ci-bot
+ - openeuler/openeuler-jenkins
+ - openeuler/openeuler-obs
+- name: sig-OKD
+ repositories:
+ - src-openeuler/moosefs
+ - src-openeuler/kubevirt
+ - src-openeuler/prometheus
+ - src-openeuler/node_exporter
+ - src-openeuler/etcd
+ - src-openeuler/alertmanager
+ - src-openeuler/quay
+ - src-openeuler/pulp
+ - src-openeuler/gvisor
+ - src-openeuler/cri-o
+ - src-openeuler/cri-tools
+ - src-openeuler/go-rpm-macros
+ - src-openeuler/go-srpm-macros
+ - src-openeuler/goversioninfo
+ - src-openeuler/openshift-ansible
+ - src-openeuler/origin
+- name: sig-bootstrap
+ repositories:
+ - src-openeuler/bazel-bin
+- name: sig-confidential-computing
+ repositories:
+ - src-openeuler/linux-sgx
+ - openeuler/secGear
+- name: sig-Kubernetes
+ repositories:
+ - openeuler/kubekey
+- name: sig-KDE
+ repositories:
+ - src-openeuler/kf5-attica
+ - src-openeuler/kf5-frameworkintegration
+ - src-openeuler/kf5-kactivities
+ - src-openeuler/kf5-kbookmarks
+ - src-openeuler/kf5-kcmutils
+ - src-openeuler/kf5-kcompletion
+ - src-openeuler/kf5-kcrash
+ - src-openeuler/kf5-kdbusaddons
+ - src-openeuler/kf5-kdeclarative
+ - src-openeuler/kf5-kded
+ - src-openeuler/kf5-kdelibs4support
+ - src-openeuler/kf5-kdesignerplugin
+ - src-openeuler/kf5-kdesu
+ - src-openeuler/kf5-kemoticons
+ - src-openeuler/kf5-kglobalaccel
+ - src-openeuler/kf5-kiconthemes
+ - src-openeuler/kf5-kinit
+ - src-openeuler/kf5-kio
+ - src-openeuler/kf5-kirigami2
+ - src-openeuler/kf5-kitemmodels
+ - src-openeuler/kf5-kitemviews
+ - src-openeuler/kf5-kjobwidgets
+ - src-openeuler/kf5-knewstuff
+ - src-openeuler/kf5-knotifications
+ - src-openeuler/kf5-kpackage
+ - src-openeuler/kf5-kparts
+ - src-openeuler/kf5-kplotting
+ - src-openeuler/kf5-kpty
+ - src-openeuler/kf5-kservice
+ - src-openeuler/kf5-ktextwidgets
+ - src-openeuler/kf5-kunitconversion
+ - src-openeuler/kf5-kwallet
+ - src-openeuler/kf5-kxmlgui
+ - src-openeuler/kf5-networkmanager-qt
+ - src-openeuler/kf5-plasma
+ - src-openeuler/kf5-sonnet
+ - src-openeuler/kf5-syntax-highlighting
+ - src-openeuler/kf5-kdewebkit
+ - src-openeuler/kdecoration
+ - src-openeuler/kwin
+ - src-openeuler/plasma-breeze
diff --git a/cve-python/tabletask/__init__.py b/cve-python/tabletask/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/cve-python/tabletask/crawltask.py b/cve-python/tabletask/crawltask.py
new file mode 100644
index 0000000..c22fb3e
--- /dev/null
+++ b/cve-python/tabletask/crawltask.py
@@ -0,0 +1,114 @@
+# -*- coding: UTF-8 -*-
+#爬虫封装
+import requests
+from lxml import etree
+from datetime import datetime
+def crawling(url):
+
+ try:
+ content=requests.get(url).content
+ except requests.exceptions.ConnectionError:
+ print('ConnectionError')
+ except requests.exceptions.ChunkedEncodingError:
+ print('ChunkedEncodingError')
+ except:
+ print('Unfortunitely -- An Unknow Error Happened')
+ html=etree.HTML(content)
+ try:
+ if html.xpath('/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[3]/div[2]/div[1]/div[2]/span/span/a/text()') == ["N/A"] or \
+ html.xpath('/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[2]/div[2]/div[1]/div[2]/span/span/a/text()')==["N/A"] or \
+ html.xpath('/html/body/div[2]/div[2]/div[2]/table/tr/td/div/div[1]/div[4]/div[2]/div[1]/div[2]/span/span/a/text()') == ['N/A']:
+ if html.xpath("/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[2]/div[3]/div[1]/div[2]/span/span/a/text()")==["N/A"]or \
+ html.xpath("/html/body/div[2]/div[2]/div/table/tbody/tr/td/div/div[1]/div[2]/div[2]/div[1]/div[2]/span/span/a/text()")==["N/A"]:
+ # /html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[2]/div[2]/div[1]/div[2]/span/span/a
+ nvdScore = cveLevel = cveDesc = repairTime = vectorValue = attackVector = accessVector = attackComplexity = accessComplexity = \
+ privilegeRequired = userInteraction = scope = confidentiality = integrity = availability = authentication = None
+ print("此漏洞链接无数据")
+ else:
+ scoreType="v2.0"
+ element = html.xpath('//*[@id="nistV2MetricHidden"]/@value')
+ cveDesc = str(html.xpath('//*[@id="vulnDetailTableView"]/tr/td/div/div[1]/p[1]/text()')[0])
+ repairTime = str(html.xpath('//*[@id="vulnDetailTableView"]/tr/td/div/div[2]/div/span[1]/text()')[0])
+ # print(repairTime,type(repairTime))
+ repairTime =datetime.strptime(repairTime,'%m/%d/%Y')
+ # print(repairTime)
+ # print(type(repairTime))
+ html1 = etree.HTML(element[0])
+ cveLevel = str(html1.xpath('//*[@data-testid="vuln-cvssv2-base-score-severity"]/text()')[0].strip())
+
+ nvdScore = str(html1.xpath('//*[@data-testid="vuln-cvssv2-base-score"]/text()')[0].strip())
+
+ vectorValue = str(html1.xpath('//*[@data-testid="vuln-cvssv2-vector"]/text()')[0]).replace("(","").replace(")","").strip()
+
+ accessVector = str(html1.xpath('//*[@data-testid="vuln-cvssv2-av"]/text()')[0].strip())
+
+ accessComplexity = str(html1.xpath('//*[@data-testid="vuln-cvssv2-ac"]/text()')[0].strip())
+
+ authentication = str(html1.xpath('//*[@data-testid="vuln-cvssv2-au"]/text()')[0].strip())
+
+ confidentiality = str(html1.xpath('//*[@data-testid="vuln-cvssv3-c"]/text()')[0].strip())
+
+ integrity = str(html1.xpath('//*[@data-testid="vuln-cvssv2-i"]/text()')[0].strip())
+
+ availability = str(html1.xpath('//*[@data-testid="vuln-cvssv2-a"]/text()')[0].strip())
+
+
+
+
+ attackVector=attackComplexity=privilegeRequired=userInteraction=scope=None
+
+
+ elif html.xpath('/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[3]/div[2]/div[1]/div[2]/span/span/a/text()') == []and \
+ html.xpath('/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[2]/div[2]/div[1]/div[2]/span/span/a/text()')==[]:
+ nvdScore=cveLevel=cveDesc=repairTime=vectorValue=attackVector=accessVector=attackComplexity=accessComplexity= \
+ privilegeRequired=userInteraction=scope=confidentiality=integrity=availability=authentication=scoreType=None
+ print("此漏洞链接not found")
+ else:
+ scoreType="v3.0"
+ cveDesc = str(html.xpath('//*[@id="vulnDetailTableView"]/tr/td/div/div[1]/p[1]/text()')[0])
+
+ repairTime = html.xpath('//*[@id="vulnDetailTableView"]/tr/td/div/div[2]/div/span[1]/text()')[0]
+ # print(repairTime,type(repairTime))
+ repairTime =datetime.strptime(repairTime,'%m/%d/%Y')
+ # print(repairTime)
+ # print(type(repairTime))
+ if html.xpath('//*[@id="nistV3MetricHidden"]/@value') != []:
+ element = html.xpath('//*[@id="nistV3MetricHidden"]/@value')
+
+ else:
+ element = html.xpath('//*[@id="cnaV3MetricHidden"]/@value')
+ html1 = etree.HTML(element[0])
+ cveLevel = str(html1.xpath('//*[@data-testid="vuln-cvssv3-base-score-severity"]/text()')[0].strip())
+
+ nvdScore = str(html1.xpath('//*[@data-testid="vuln-cvssv3-base-score"]/text()')[0].strip())
+
+ vectorValue = str(html1.xpath('//*[@data-testid="vuln-cvssv3-vector"]/text()')[0]).replace("(",'').replace(')','').strip()
+
+ attackVector = str(html1.xpath('//*[@data-testid="vuln-cvssv3-av"]/text()')[0].strip())
+
+ attackComplexity = str(html1.xpath('//*[@data-testid="vuln-cvssv3-ac"]/text()')[0].strip())
+
+ privilegeRequired = str(html1.xpath('//*[@data-testid="vuln-cvssv3-pr"]/text()')[0].strip())
+
+ userInteraction = str(html1.xpath('//*[@data-testid="vuln-cvssv3-ui"]/text()')[0].strip())
+
+ scope = str(html1.xpath('//*[@data-testid="vuln-cvssv3-s"]/text()')[0].strip())
+
+ confidentiality = str(html1.xpath('//*[@data-testid="vuln-cvssv3-c"]/text()')[0].strip())
+
+ integrity = str(html1.xpath('//*[@data-testid="vuln-cvssv3-i"]/text()')[0].strip())
+
+ availability = str(html1.xpath('//*[@data-testid="vuln-cvssv3-a"]/text()')[0].strip())
+
+
+
+ accessVector=accessComplexity=authentication=None
+ except IndexError as e:
+ print("下标越界",e)
+ except UnboundLocalError as e:
+ print("未找到标签",e)
+ list = [nvdScore, cveLevel, cveDesc, repairTime, vectorValue, attackVector, accessVector, attackComplexity,accessComplexity,
+ privilegeRequired, userInteraction, scope, confidentiality, integrity, availability, authentication,scoreType]
+
+ return list
+
diff --git a/cve-python/tabletask/exceltask.py b/cve-python/tabletask/exceltask.py
new file mode 100644
index 0000000..2d656ea
--- /dev/null
+++ b/cve-python/tabletask/exceltask.py
@@ -0,0 +1,124 @@
+# -*- coding: UTF-8 -*-
+#读取excel表格内容
+import xlrd
+import os
+import shutil
+
+
+#读取excel
+#CVE评分
+from xlrd import XLRDError
+
+
+# def crawlScore():
+# score=[]
+# try:
+# data = xlrd.open_workbook("./newexcels/a-l.rar.1599118583853.xlsx")
+# table_one = data.sheet_by_name("漏洞报告") # 根据表名查找漏洞报告信息表
+# row_number = table_one.nrows # 获取所有数据的最大行数
+# for i in range(1, row_number):
+# scoreOne =str(table_one.cell(i, 5).value)
+# score.append(scoreOne)
+# except IndexError as e:
+# print("下标越界",e)
+# except XLRDError as e:
+# print("未找到漏洞报告table",e)
+# except Exception as e:
+# print("其他异常:",e)
+# return score
+#CVE地址
+
+def crawlUrls(fileName):
+ urls=[]
+ try:
+ data=xlrd.open_workbook("./newexcels/"+fileName)
+ table_one=data.sheet_by_name("漏洞报告") #根据名称查找漏洞报告信息表
+ row_number=table_one.nrows #获取所有数据的最大行数
+ for i in range(1,row_number):
+ url="https://nvd.nist.gov/vuln/detail/"+str(table_one.cell(i,2).value)
+ urls.append(url)
+ except IndexError as e:
+ print("下标越界", e)
+ except XLRDError as e:
+ print("未找到漏洞报告table",e)
+ except Exception as e:
+ print("其他异常:", e)
+ return urls
+#CVE编号
+def crawlCveNum(fileName):
+ cveNum=[]
+ try:
+ data=xlrd.open_workbook("./newexcels/"+fileName)
+ table_one=data.sheet_by_name("漏洞报告") #根据名称查找漏洞报告信息表
+ row_number=table_one.nrows #获取所有数据的最大行数
+ for i in range(1,row_number):
+ cveNumOne=str(table_one.cell(i,2).value)
+ cveNum.append(cveNumOne)
+ except IndexError as e:
+ print("下标越界", e)
+ except XLRDError as e:
+ print("未找到漏洞报告table",e)
+ except Exception as e:
+ print("其他异常:", e)
+ return cveNum
+#CVE版本
+def crawlCveVersion(fileName):
+ cveVersion=[]
+ try:
+ data=xlrd.open_workbook("./newexcels/"+fileName)
+ table_one=data.sheet_by_name("漏洞报告")
+ row_number=table_one.nrows
+ for i in range(1,row_number):
+ cveVersionOne=table_one.cell(i,1).value
+ cveVersion.append(cveVersionOne)
+ except IndexError as e:
+ print("下标越界",e)
+ except XLRDError as e:
+ print("未找到漏洞报告table", e)
+ except Exception as e:
+ print("其他异常:", e)
+ return cveVersion
+#CVE类型
+def crawlScopeType(fileName):
+ scopeType=[]
+ try:
+ data=xlrd.open_workbook("./newexcels/"+fileName)
+ table_one=data.sheet_by_name("漏洞报告")
+ row_number=table_one.nrows
+ for i in range(1,row_number):
+ scopeTypeOne = 'v' + str(table_one.cell(i, 4).value)
+ scopeType.append(scopeTypeOne)
+ except IndexError as e:
+ print("下标越界",e)
+ except XLRDError as e:
+ print("未找到漏洞报告table",e)
+ except Exception as e:
+ print("error:",e)
+ return scopeType
+#Component
+def crawlPackName(fileName):
+ packName = []
+ try:
+ data = xlrd.open_workbook("./newexcels/"+fileName)
+ table_one = data.sheet_by_name("漏洞报告")
+ row_number = table_one.nrows # 获取所有数据的最大行数
+ for i in range(1, row_number):
+ packNameOne = table_one.cell(i, 0).value
+ packName.append(packNameOne)
+ except IndexError as e:
+ print("下标越界",e)
+ except XLRDError as e:
+ print("未找到漏洞报告table",e)
+ except Exception as e:
+ print("error:",e)
+ return packName
+
+
+#excel解析完成后调用函数移动到oldexcels文件夹备份
+def move_file(fileName):
+ try:
+ f_src=os.path.join("./newexcels/"+fileName)
+ f_dst=os.path.join("./oldexcels/"+fileName)
+ shutil.move(f_src,f_dst)
+ except Exception as e:
+ print("move error",e)
diff --git a/cve-python/tabletask/runtask.py b/cve-python/tabletask/runtask.py
new file mode 100644
index 0000000..d2d65e3
--- /dev/null
+++ b/cve-python/tabletask/runtask.py
@@ -0,0 +1,109 @@
+# -*- coding: UTF-8 -*-
+# CVSS官网数据爬取 数据储存数据库
+
+
+from tabletask import exceltask,crawltask
+from dbConnecttion.MysqlConn import Mysql
+import time
+import os
+
+
+
+def crawlWeb():
+ mysql=Mysql()
+ path="./newexcels"
+ files=os.listdir(path)
+ if files:
+ for fileName in files:
+ cveNumList=exceltask.crawlCveNum(fileName)
+ urls=exceltask.crawlUrls(fileName)
+ cveVersionList=exceltask.crawlCveVersion(fileName)
+ # scopeTypeList=exceltask.crawlScopeType()
+ packNameList=exceltask.crawlPackName(fileName)
+ for i in range(0,len(urls)):
+ cveNum=str(cveNumList[i]).strip()
+ print(cveNum)
+ # 数据库查询结果
+ sql = "select * from cve_origin_excel where cve_num= %s"
+ val = (cveNum,)
+ resultDict = mysql.getOne(sql, val)
+
+ if resultDict: #判断CVE是否存在数据库
+
+ #爬虫网页数据
+ crawlList=crawltask.crawling(urls[i])
+
+ #判断数据库类容是否为最新数据
+ if resultDict["nvd_score"]!=None:
+ if str(resultDict["nvd_score"])==str(crawlList[0])and str(resultDict["vector_value"],encoding="utf-8")==str(crawlList[4]):
+ if resultDict['cve_status'] in [3,4,5]:
+ updateTime = str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
+ try:
+ sql = "update cve_origin_excel set nvd_score=%s,cve_level=%s,cve_desc=%s,repair_time=%s,vector_value=%s,attack_vector=%s,access_vector=%s," \
+ "attack_complexity=%s,access_complexity=%s,privilege_required=%s,user_interaction=%s,scope=%s,confidentiality=%s,integrity=%s" \
+ ",availability=%s,authentication=%s,cve_status=%s,update_time=%s where cve_num=%s"
+ val = (
+ crawlList[0], crawlList[1], crawlList[2], crawlList[3], crawlList[4], crawlList[5],
+ crawlList[6], crawlList[7], crawlList[8], crawlList[9],
+ crawlList[10], crawlList[11], crawlList[12], crawlList[13], crawlList[14],
+ crawlList[15], 1, updateTime, cveNum)
+ mysql.update(sql, val)
+ mysql.dispose()
+ print("更新数据修改状态成功")
+
+ except IndexError as e:
+ print("下标越界", e)
+ else:
+ print("数据库为最新数据")
+ else:
+ print("更新数据")
+ updateTime=str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
+ try:
+ sql="update cve_origin_excel set nvd_score=%s,cve_level=%s,cve_desc=%s,repair_time=%s,vector_value=%s,attack_vector=%s,access_vector=%s," \
+ "attack_complexity=%s,access_complexity=%s,privilege_required=%s,user_interaction=%s,scope=%s,confidentiality=%s,integrity=%s" \
+ ",availability=%s,authentication=%s,cve_status=%s,update_time=%s where cve_num=%s"
+ val=(crawlList[0],crawlList[1],crawlList[2],crawlList[3],crawlList[4],crawlList[5],crawlList[6],crawlList[7],crawlList[8],crawlList[9],
+ crawlList[10],crawlList[11],crawlList[12],crawlList[13],crawlList[14],crawlList[15],1,updateTime,cveNum)
+ mysql.update(sql,val)
+ mysql.dispose()
+ except IndexError as e:
+ print("下标越界",e)
+
+
+
+ else:
+ print("数据库未发现数据,执行插入操作")
+ createTime=updateTime= str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
+ deleteTime=None
+ cveStatus=0 #状态0表示新建,1表示修改
+ try:
+ cveUrl=str(urls[i])
+
+ cveVersion=str(cveVersionList[i])
+
+ packName=str(packNameList[i])
+
+ # scoreType = str(scopeTypeList[i].strip())
+ #爬虫爬取数据列表
+ list=crawltask.crawling(cveUrl)
+
+
+
+ sql="INSERT INTO cve_origin_excel (cve_num,cve_url,cve_version,pack_name,score_type,nvd_score,cve_level,cve_desc,repair_time,vector_value,attack_vector," \
+ "access_vector,attack_complexity,access_complexity,privilege_required,user_interaction,scope,confidentiality,integrity,availability,authentication,cve_status" \
+ ",create_time,update_time,delete_time) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
+ val=(cveNum,cveUrl,cveVersion,packName,list[16],list[0],list[1],list[2],list[3],list[4],list[5],list[6],list[7],list[8],list[9],list[10],list[11],list[12],list[13],
+ list[14],list[15],cveStatus,createTime,updateTime,deleteTime)
+
+ mysql.insertOne(sql,val)
+ mysql.dispose()
+ except IndexError as e:
+ print("下标越界",e)
+ exceltask.move_file(fileName)
+ else:
+ print("newexcels文件夹中无手动添加表")
+ return False
+ mysql.close()
+
+
+
diff --git a/cve-python/tabletask/test.py b/cve-python/tabletask/test.py
new file mode 100644
index 0000000..2ef010b
--- /dev/null
+++ b/cve-python/tabletask/test.py
@@ -0,0 +1,7 @@
+# -*- coding: UTF-8 -*-
+# from tabletask import toexcel
+import os
+from tabletask import exceltask
+fils=os.listdir("../newexcels")
+for i in fils:
+ exceltask.move_file(i)
\ No newline at end of file
diff --git a/cve-python/tabletask/timedtask.py b/cve-python/tabletask/timedtask.py
new file mode 100644
index 0000000..4732209
--- /dev/null
+++ b/cve-python/tabletask/timedtask.py
@@ -0,0 +1,31 @@
+# -*- coding: UTF-8 -*-
+import sys
+sys.path.append(r"D:\Users\Administrator\PycharmProjects\work")
+import os
+import schedule
+import time
+from tabletask import runtask,exceltask,toexcel
+
+def task():
+ #判断newexcels中是否存在xlsx表格
+ # while os.path.exists("../newexcels/b-l.rar.1599118583853.xlsx"):
+ flag=os.path.exists("../newexcels/a-l.rar.1599118583853.xlsx")
+ if flag:
+
+ print("定时任务开始")
+ runtask.crawlWeb()
+ # #移动xlsx文件备份
+ exceltask.move_file()
+ else:
+ print("excel文件不存在,手动加入excel文件")
+ '''
+ 查询数据库cve_status的数据,并生成excel
+ 修改cve_status为3或者4的为5,表示已生成excel待处理
+ '''
+ toexcel.MysqlToExcel().generate_table()
+ toexcel.MysqlToExcel().update_status()
+schedule.every().day.at("10:29").do(task)
+while True:
+ schedule.run_pending() #run_pending:运行所有可以运行的任务
+ time.sleep(1) #睡眠1秒
+
diff --git a/cve-python/tabletask/toexcel.py b/cve-python/tabletask/toexcel.py
new file mode 100644
index 0000000..e860744
--- /dev/null
+++ b/cve-python/tabletask/toexcel.py
@@ -0,0 +1,93 @@
+# -*- coding: UTF-8 -*-
+import os
+import xlwt
+from dbConnecttion.MysqlConn import Mysql
+class MysqlToExcel(object):
+ def __init__(self):
+ self.file_name= './problemexcels/data.xls'
+ def get_results(self):
+ mysql=Mysql()
+ sql="select * from cve_origin_excel where cve_status = 3 or cve_status=4 or cve_status=5 or cve_status=Null"
+ results=mysql.getMany(sql)
+ print(results)
+
+ mysql.dispose()
+ mysql.close()
+ return results
+
+ def generate_table(self):
+ #生成excel表格
+ #文件已存在则删除
+ if os.path.exists(self.file_name):
+ os.remove(self.file_name)
+ results=self.get_results()
+ if not results:
+ print("查询结果为空")
+ return False
+ #创建excel对象
+ f=xlwt.Workbook()
+ sheet1=f.add_sheet('sheet1',cell_overwrite_ok=True)
+ #列字段
+ column_names=['cve_id','cve_num','cve_url','cve_version','pack_name','score_type','nvd_score','cve_level','cve_desc',
+ 'repair_time','vector_value','attack_vector','access_vector','attack_complexity','access_complexity',
+ 'privilege_required','user_interaction','scope','confidentiality','integrity','availability',
+ 'authentication','cve_status','create_time','update_time','delete_time']
+ #写第一行,列名
+ for i in range(0,len(column_names)):
+ sheet1.write(0,i,column_names[i])
+ #写多行
+ num=0
+ for i in results:
+ for key in i:
+ if type(i[key])==bytes:
+ i[key]=i[key].decode("utf-8")
+
+ sheet1.write(num + 1, 0, i["cve_id"])
+ sheet1.write(num + 1, 1, i["cve_num"])
+ sheet1.write(num + 1, 2, i["cve_url"])
+ sheet1.write(num + 1, 3, i["cve_version"])
+ sheet1.write(num + 1, 4, i["pack_name"])
+ sheet1.write(num + 1, 5, i["score_type"])
+ sheet1.write(num + 1, 6, i["nvd_score"])
+ sheet1.write(num + 1, 7, i["cve_level"])
+ sheet1.write(num + 1, 8, i["cve_desc"])
+ sheet1.write(num + 1, 9, i["repair_time"])
+ sheet1.write(num + 1, 10, i["vector_value"])
+ sheet1.write(num + 1, 11, i["attack_vector"])
+ sheet1.write(num + 1, 12, i["access_vector"])
+ sheet1.write(num + 1, 13, i["attack_complexity"])
+ sheet1.write(num + 1, 14, i["access_complexity"])
+ sheet1.write(num + 1, 15, i["privilege_required"])
+ sheet1.write(num + 1, 16, i["user_interaction"])
+ sheet1.write(num + 1, 17, i["scope"])
+ sheet1.write(num + 1, 18, i["confidentiality"])
+ sheet1.write(num + 1, 19, i["integrity"])
+ sheet1.write(num + 1, 20, i["availability"])
+ sheet1.write(num + 1, 21, i["authentication"])
+ sheet1.write(num + 1, 22, i["cve_status"])
+ if i['create_time']!=None:
+ sheet1.write(num + 1, 23, i["create_time"].strftime('%Y-%m-%d %H:%M:%S'))
+ else:
+ sheet1.write(num + 1, 23, i['create_time'])
+ if i["update_time"]!=None:
+ sheet1.write(num + 1, 24, i["update_time"].strftime('%Y-%m-%d %H:%M:%S'))
+ else:
+ sheet1.write(num + 1, 24, i["update_time"])
+ if i["delete_time"] != None:
+ sheet1.write(num + 1, 25, i["delete_time"].strftime('%Y-%m-%d %H:%M:%S'))
+ else:
+ sheet1.write(num + 1, 25, i["delete_time"])
+ num+=1
+ #保存文件
+ f.save(self.file_name)
+ #判断文件是否存在
+ if not os.path.exists(self.file_name):
+ print("生成excel失败")
+ else:
+ print("生成excel成功")
+ #修改状态为3,4的为5表示已保存在excel中
+ def update_status(self):
+ mysql=Mysql()
+ sql="update cve_origin_excel set cve_status=5 where cve_status=3 or cve_status=4"
+ mysql.update(sql)
+ mysql.dispose()
diff --git a/cve-python/templates/index.html b/cve-python/templates/index.html
new file mode 100644
index 0000000..1cbce03
--- /dev/null
+++ b/cve-python/templates/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+ Title
+
+
+hello world111
+
+
\ No newline at end of file
--
Gitee
From ba5939064d0bdb82ed27f5cf4333cf15992d6c62 Mon Sep 17 00:00:00 2001
From: zhangjianjun_code <7844966+zhangjianjun_code@user.noreply.gitee.com>
Date: Wed, 14 Oct 2020 17:04:02 +0800
Subject: [PATCH 5/5] 1. New python code; 2. Analysis of main functions to
manually generate excel files and store them in the database for future use;
3. Feedback on wrong excel file emails
---
Dockerfile | 6 +-
controllers/packages.go | 2 +
cve-python/.gitignore | 4 -
cve-python/Dockerfile | 10 -
cve-python/README.md | 37 -
cve-python/controller/__init__.py | 0
cve-python/controller/gitwebcontroller.py | 8 -
cve-python/controller/tablecontroller.py | 16 -
cve-python/dbConnecttion/Config.py | 10 -
cve-python/dbConnecttion/MysqlConn.py | 135 -
cve-python/dbConnecttion/__init__.py | 0
cve-python/dbConnecttion/test.py | 9 -
cve-python/emailtask/__init__.py | 0
cve-python/emailtask/sendemail.py | 20 -
cve-python/gitwebtask/__init__.py | 0
cve-python/gitwebtask/genegroup.py | 86 -
cve-python/gitwebtask/yamltask.py | 47 -
cve-python/main.py | 29 -
cve-python/problemexcels/data.xls | Bin 5632 -> 0 bytes
cve-python/requirements.txt | 60 -
cve-python/sigs.yaml | 7232 ---------------------
cve-python/tabletask/__init__.py | 0
cve-python/tabletask/crawltask.py | 114 -
cve-python/tabletask/exceltask.py | 124 -
cve-python/tabletask/runtask.py | 109 -
cve-python/tabletask/test.py | 7 -
cve-python/tabletask/timedtask.py | 31 -
cve-python/tabletask/toexcel.py | 93 -
cve-python/templates/index.html | 10 -
doc/sql/db_data.sql | 74 +
doc/sql/db_struct.sql | 27 +-
models/modeldb.go | 16 +-
models/ymal.go | 8 +
taskhandler/common.go | 9 +-
taskhandler/yaml.go | 6 +
35 files changed, 142 insertions(+), 8197 deletions(-)
delete mode 100644 cve-python/.gitignore
delete mode 100644 cve-python/Dockerfile
delete mode 100644 cve-python/README.md
delete mode 100644 cve-python/controller/__init__.py
delete mode 100644 cve-python/controller/gitwebcontroller.py
delete mode 100644 cve-python/controller/tablecontroller.py
delete mode 100644 cve-python/dbConnecttion/Config.py
delete mode 100644 cve-python/dbConnecttion/MysqlConn.py
delete mode 100644 cve-python/dbConnecttion/__init__.py
delete mode 100644 cve-python/dbConnecttion/test.py
delete mode 100644 cve-python/emailtask/__init__.py
delete mode 100644 cve-python/emailtask/sendemail.py
delete mode 100644 cve-python/gitwebtask/__init__.py
delete mode 100644 cve-python/gitwebtask/genegroup.py
delete mode 100644 cve-python/gitwebtask/yamltask.py
delete mode 100644 cve-python/main.py
delete mode 100644 cve-python/problemexcels/data.xls
delete mode 100644 cve-python/requirements.txt
delete mode 100644 cve-python/sigs.yaml
delete mode 100644 cve-python/tabletask/__init__.py
delete mode 100644 cve-python/tabletask/crawltask.py
delete mode 100644 cve-python/tabletask/exceltask.py
delete mode 100644 cve-python/tabletask/runtask.py
delete mode 100644 cve-python/tabletask/test.py
delete mode 100644 cve-python/tabletask/timedtask.py
delete mode 100644 cve-python/tabletask/toexcel.py
delete mode 100644 cve-python/templates/index.html
create mode 100644 doc/sql/db_data.sql
diff --git a/Dockerfile b/Dockerfile
index b66da06..a242adb 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,6 @@
-FROM centos
+FROM centos:latest
+
+MAINTAINER TommyLike
FROM library/golang
@@ -16,7 +18,7 @@ ENTRYPOINT (cd $APP_DIR && ./\src\cve-manager)
ADD . $APP_DIR
# Compile the binary and statically link
-RUN cd $APP_DIR && CGO_ENABLED=0 godep go build -ldflags '-d -w -s'
+#RUN cd $APP_DIR && CGO_ENABLED=0 godep go build -ldflags '-d -w -s'
EXPOSE 80
diff --git a/controllers/packages.go b/controllers/packages.go
index a6f619f..444fff0 100644
--- a/controllers/packages.go
+++ b/controllers/packages.go
@@ -33,6 +33,7 @@ type PackageData struct {
Version string `json:"version"`
Release string `json:"release"`
OriginUrl string `json:"url"`
+ CpeName string `json:"cpeName"`
ReleaseTime string `json:"releaseTime"`
LatestVersion string `json:"latestVersion"`
LatestVersionTime string `json:"latestVersionTime"`
@@ -152,6 +153,7 @@ func (u *PackagesController) Get() {
pg.Id = g.GitId
pg.Release = g.Release
pg.Version = g.Version
+ pg.CpeName = g.CpePackName
pg.LatestVersion = g.LatestVersion
pg.LatestVersionTime = g.LatestVersionTime
pg.Name = g.PackageName
diff --git a/cve-python/.gitignore b/cve-python/.gitignore
deleted file mode 100644
index 729dfe8..0000000
--- a/cve-python/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.idea
-__pycache__
-.gitee
-venv
\ No newline at end of file
diff --git a/cve-python/Dockerfile b/cve-python/Dockerfile
deleted file mode 100644
index 3ef97ae..0000000
--- a/cve-python/Dockerfile
+++ /dev/null
@@ -1,10 +0,0 @@
-FROM ubuntu:latest
-
-MAINTAINER TommyLike
-RUN set -ex && apt-get update -y && apt-get install -y python-pip python3.5-dev build-essential libpq-dev && mkdir -p /opt/app/
-#RUN apt-get update && apt-get install -y python-pip && mkdir -p /opt/app/
-RUN set -ex && ln -s /usr/bin/python3 /usr/bin/python && ln -s /usr/bin/pip3 /usr/bin/pip
-COPY ./cve-python /opt/app
-
-WORKDIR /opt/app/cve-python
-ENTRYPOINT ["python", "/opt/app/cve-python/main.py"]
\ No newline at end of file
diff --git a/cve-python/README.md b/cve-python/README.md
deleted file mode 100644
index cc0c6e4..0000000
--- a/cve-python/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# cve-python
-
-#### 介绍
-处理人工cve数据
-
-#### 软件架构
-软件架构说明
-
-
-#### 安装教程
-
-1. xxxx
-2. xxxx
-3. xxxx
-
-#### 使用说明
-
-1. xxxx
-2. xxxx
-3. xxxx
-
-#### 参与贡献
-
-1. Fork 本仓库
-2. 新建 Feat_xxx 分支
-3. 提交代码
-4. 新建 Pull Request
-
-
-#### 特技
-
-1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
-2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
-3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
-4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
-5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
-6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/cve-python/controller/__init__.py b/cve-python/controller/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/cve-python/controller/gitwebcontroller.py b/cve-python/controller/gitwebcontroller.py
deleted file mode 100644
index ab8795b..0000000
--- a/cve-python/controller/gitwebcontroller.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- coding: UTF-8 -*-
-from gitwebtask import genegroup,yamltask
-
-def gwcontroller():
- print("查询数据库生成excel任务开始")
- genegroup.Command().handle()
- yamltask.task().download()
- yamltask.task().read()
\ No newline at end of file
diff --git a/cve-python/controller/tablecontroller.py b/cve-python/controller/tablecontroller.py
deleted file mode 100644
index ecc6380..0000000
--- a/cve-python/controller/tablecontroller.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: UTF-8 -*-
-import sys
-import os
-from tabletask import runtask,exceltask,toexcel
-
-def toExcelController():
-
- '''
- 查询数据库cve_status状态为3或4的数据,生成excel
- 修改cve_status状态为3或4的状态为5,表示已加入excel待处理
- '''
- toexcel.MysqlToExcel().generate_table()
- toexcel.MysqlToExcel().update_status()
-def runTaskController():
- # 执行解析表格 爬取CVE官网数据 存入数据库
- runtask.crawlWeb()
diff --git a/cve-python/dbConnecttion/Config.py b/cve-python/dbConnecttion/Config.py
deleted file mode 100644
index 460fccf..0000000
--- a/cve-python/dbConnecttion/Config.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#coding:utf-8
-'''
-@author:xjh
-'''
-DBHOST="localhost"
-DBPORT=3306
-DBUSER="root"
-DBPWD="work123"
-DBNAME="a_l"
-DBCHAR="utf8"
\ No newline at end of file
diff --git a/cve-python/dbConnecttion/MysqlConn.py b/cve-python/dbConnecttion/MysqlConn.py
deleted file mode 100644
index d40595a..0000000
--- a/cve-python/dbConnecttion/MysqlConn.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# -*- coding: UTF-8 -*-
-"""
-Created on 2016年5月7日
-
-@author: xjh
-1、执行带参数的SQL时,请先用sql语句指定需要输入的条件列表,然后再用tuple/list进行条件批配
-2、在格式SQL中不需要使用引号指定数据类型,系统会根据输入参数自动识别
-3、在输入的值中不需要使用转意函数,系统会自动处理
-"""
-import MySQLdb
-from MySQLdb.cursors import DictCursor
-from DBUtils.PooledDB import PooledDB
-from dbConnecttion import Config
-
-class Mysql(object):
- #连接池对象
- __pool=None
- def __init__(self):
- self.__conn=Mysql.__getConn()
- self.__cursor=self.__conn.cursor()
-
- @staticmethod
- def __getConn():
- """
- @summary:静态方法,从连接池中取出连接
- @return MySQLdb.connection
- """
- if Mysql.__pool is None:
- __pool=PooledDB(creator=MySQLdb,mincached=1,maxcached=20,host=Config.DBHOST,port=Config.DBPORT,user=Config.DBUSER,
- passwd=Config.DBPWD,db=Config.DBNAME,use_unicode=False,charset=Config.DBCHAR,cursorclass=DictCursor)
- return __pool.connection()
- def getOne(self,sql,param=None):
- """
- @summary: 执行查询,并取出第一条
- @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
- @param param: 可选参数,条件列表值(元组/列表)
- @return: result list/boolean 查询到的结果集
- """
- if param is None:
- count=self.__cursor.execute(sql)
- else:
- count=self.__cursor.execute(sql,param)
- if count>0:
- result=self.__cursor.fetchone()
- else:
- result=False
- return result
-
- def getMany(self, sql, param=None):
- """
- @summary: 执行查询,并取出num条结果
- @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
-
- @param param: 可选参数,条件列表值(元组/列表)
- @return: result list/boolean 查询到的结果集
- """
- if param is None:
- count = self.__cursor.execute(sql)
- else:
- count = self.__cursor.execute(sql, param)
- if count > 0:
- result = self.__cursor.fetchall()
- else:
- result = False
- return result
- def insertOne(self,sql,value):
- """
- @summary: 向数据表插入一条记录
- @param sql:要插入的SQL格式
- @param value:要插入的记录数据tuple/list
- @return: insertId 受影响的行数
- """
- self.__cursor.execute(sql, value)
- return self.__getInsertId()
-
- def __getInsertId(self):
- """
- 获取当前连接最后一次插入操作生成的id,如果没有则为0
- """
- self.__cursor.execute("SELECT @@IDENTITY AS id")
- result = self.__cursor.fetchall()
- return result[0]['id']
- def __query(self,sql,param=None):
- if param is None:
- count=self.__cursor.execute(sql)
- else:
- count=self.__cursor.execute(sql,param)
- return count
- def update(self, sql, param=None):
- """
- @summary: 更新数据表记录
- @param sql: SQL格式及条件,使用(%s,%s)
- @param param: 要更新的 值 tuple/list
- @return: count 受影响的行数
- """
- return self.__query(sql, param)
-
- def delete(self, sql, param=None):
- """
- @summary: 删除数据表记录
- @param sql: SQL格式及条件,使用(%s,%s)
- @param param: 要删除的条件 值 tuple/list
- @return: count 受影响的行数
- """
- return self.__query(sql, param)
-
- def begin(self):
- """
- @summary: 开启事务
- """
- self.__conn.autocommit(0)
-
- def end(self, option='commit'):
- """
- @summary: 结束事务
- """
- if option == 'commit':
- self.__conn.commit()
- else:
- self.__conn.rollback()
-
- def dispose(self, isEnd=1):
- """
- @summary: 提交事务
- """
- if isEnd == 1:
- self.end('commit')
- else:
- self.end('rollback')
- def close(self):
- """
- @summary: 关闭连接
- """
- self.__cursor.close()
- self.__conn.close()
\ No newline at end of file
diff --git a/cve-python/dbConnecttion/__init__.py b/cve-python/dbConnecttion/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/cve-python/dbConnecttion/test.py b/cve-python/dbConnecttion/test.py
deleted file mode 100644
index 08e9418..0000000
--- a/cve-python/dbConnecttion/test.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: UTF-8 -*-
-from dbConnecttion.MysqlConn import Mysql
-from _sqlite3 import Row
-
-mysql=Mysql()
-sql="select * from sites where name =%s"
-val=("ss",)
-result=mysql.getOne(sql,val)
-print(str(result['name'],encoding="utf-8"))
\ No newline at end of file
diff --git a/cve-python/emailtask/__init__.py b/cve-python/emailtask/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/cve-python/emailtask/sendemail.py b/cve-python/emailtask/sendemail.py
deleted file mode 100644
index bb3f978..0000000
--- a/cve-python/emailtask/sendemail.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import smtplib
-from email.mime.text import MIMEText
-from email.mime.multipart import MIMEMultipart
-from email.header import Header
-
-def send():
- sender="jhxiaoh@isoftstone.com"
- receivers=["283750495@qq.com"]
- #创建一个带附件的实例
- message=MIMEMultipart()
- message['From']=Header('xjh','utf-8')
- message['To']=Header("接收者",'utf-8')
- subject='解析出错的excel数据提醒'
- message['Subject']=Header(subject,'utf-8')
-
- #邮件正文类容
- message.attach(MIMEText("excel中录入的cve漏洞解析失败失败数据反馈,检查内容和格式,重新提交",'plain','utf-8'))
-
- #构造
-
diff --git a/cve-python/gitwebtask/__init__.py b/cve-python/gitwebtask/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/cve-python/gitwebtask/genegroup.py b/cve-python/gitwebtask/genegroup.py
deleted file mode 100644
index f1eed44..0000000
--- a/cve-python/gitwebtask/genegroup.py
+++ /dev/null
@@ -1,86 +0,0 @@
-# -*- coding: UTF-8 -*-
-import requests
-import lxml
-import logging
-from lxml.etree import HTML
-from dbConnecttion.MysqlConn import Mysql
-import time
-
-
-class Command():
- logger = logging.getLogger('log')
-
- def handle(self):
- mysql = Mysql()
- url = 'https://gitee.com/openeuler/community/tree/master/sig'
- try:
- r = requests.get(url)
- except requests.exceptions.ConnectionError:
- print('ConnectionError')
- except requests.exceptions.ChunkedEncodingError:
- print('ChunkedEncodingError')
- except:
- print('Unfortunitely -- An Unknow Error Happened')
- html = HTML(r.content)
- assert isinstance(html, lxml.etree._Element)
- sigs_list = []
- i = 3
- while True:
- sig_name = html.xpath("//div[@id='tree-slider']/div[{}]/div[1]/a/@title".format(i))[0]
- if sig_name == 'sigs.yaml':
- break
- sql="select * from cve_git_repo_groups where group_name = %s"
- val=(sig_name,)
- flag=mysql.getOne(sql,val)
- if flag==False:
- print("数据库无此条数据,执行插入操作")
- sql="insert into cve_git_repo_groups (group_name) values (%s)"
- val=(sig_name,)
- mysql.insertOne(sql,val)
- mysql.dispose()
-
- sig_page = html.xpath("//div[@id='tree-slider']/div[{}]/div[1]/a/@href".format(i))[0]
- etherpad = 'https://etherpad.openeuler.org/p/{}-meetings'.format(sig_name)
- # 获取所有sig的名称、首页和etherpad
- sigs_list.append([sig_name, 'https://gitee.com' + sig_page, etherpad])
- i += 2
- sigs_list = sorted(sigs_list)
- print(sigs_list)
- for sig in sigs_list:
- #获取group_id
- sql="select group_id from cve_git_repo_groups where group_name = %s"
- val=(sig[0],)
- groupId=mysql.getOne(sql,val)["group_id"]
- #删除cve_gite_repo_member里面的数据
- #根据groupId
- sql1="delete from cve_gite_repo_member where group_id = %s"
- val1=(groupId,)
- mysql.delete(sql1,val1)
- mysql.dispose()
- # 获取owners
- url = 'https://gitee.com/openeuler/community/blob/master/sig/{}/OWNERS'.format(sig[0])
- r = requests.get(url)
- html = HTML(r.text)
- assert isinstance(html, lxml.etree._Element)
- res = html.xpath('//div[@class="line"]/text()')
- owners = []
- for i in res[1:]:
- maintainer = i.strip().split('-')[-1].strip()
- createTime = str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
- sql="insert into cve_gite_repo_member (group_id,member_name,member_type,create_time) values (%s,%s,%s,%s)"
- val=(groupId,maintainer,"Maintainer",createTime)
- mysql.insertOne(sql,val)
- mysql.dispose()
-
- owners.append(maintainer)
- print(owners)
- # owners = ','.join(owners)
- # sig.append(owners)
- # group_name = sig[0]
- # home_page = sig[1]
- # etherpad = sig[2]
- # maillist = sig[3]
- # irc = sig[4]
- # owners = sig[5]
-
- mysql.close()
diff --git a/cve-python/gitwebtask/yamltask.py b/cve-python/gitwebtask/yamltask.py
deleted file mode 100644
index 7caa004..0000000
--- a/cve-python/gitwebtask/yamltask.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# -*- coding: UTF-8 -*-
-import yaml
-import requests
-from dbConnecttion.MysqlConn import Mysql
-import time
-import os
-import logging
-
-class task():
- logger = logging.getLogger('log')
- def download(self):
- url="https://gitee.com/openeuler/community/raw/master/sig/sigs.yaml"
- try:
- r=requests.get(url)
- except requests.exceptions.ConnectionError:
- print('ConnectionError')
- except requests.exceptions.ChunkedEncodingError:
- print('ChunkedEncodingError')
- except:
- print('Unfortunitely -- An Unknow Error Happened')
- with open ("sigs.yaml","wb") as code:
- code.write(r.content)
- def read(self):
- mysql=Mysql()
- if os.path.exists("sigs.yaml"):
- with open("sigs.yaml","r") as f:
- data=yaml.load(f)
- print(data)
- for sig in data['sigs']:
- sql="select group_id from cve_git_repo_groups where group_name=%s"
- val=(sig['name'],)
- groupId=mysql.getOne(sql,val)['group_id']
- #根据group_id删除数据避免重复
- sql1="delete from cve_gite_repo where group_id = %s"
- val1=(groupId,)
- mysql.delete(sql1,val1)
- mysql.dispose()
- # print(groupId)
- for p in sig["repositories"]:
- orgPath=p[0:p.rfind("/")]
- path=p[p.rfind("/"):][1:]
- createTime = str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
- sql="insert into cve_gite_repo (group_id,org_path,path,status,create_time) values (%s,%s,%s,%s,%s)"
- val=(groupId,orgPath,path,0,createTime)
- mysql.insertOne(sql,val)
- mysql.dispose()
- mysql.close()
diff --git a/cve-python/main.py b/cve-python/main.py
deleted file mode 100644
index 0ba014d..0000000
--- a/cve-python/main.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# This is a sample Python script.
-
-# Press Shift+F10 to execute it or replace it with your code.
-# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
-from controller import tablecontroller,gitwebcontroller
-import schedule
-import time
-
-def print_hi(name):
- # Use a breakpoint in the code line below to debug your script.
- print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
-
-
-# Press the green button in the gutter to run the script.
-def run():
- tablecontroller.toExcelController()
- # gitwebcontroller.gwcontroller()
-def run1():
- tablecontroller.runTaskController()
-if __name__ == '__main__':
-
-# schedule.every(2).seconds.do(run)
-# schedule.every().day.at("17:09").do(run)
- schedule.every().day.at("17:48").do(run1)
- while True:
- schedule.run_pending() #run_pending:运行所有可以运行的任务
- time.sleep(1)
-
-# See PyCharm help at https://www.jetbrains.com/help/pycharm/
diff --git a/cve-python/problemexcels/data.xls b/cve-python/problemexcels/data.xls
deleted file mode 100644
index a32c7d78bdf6a1063adfa3a0f1355b8713efd245..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5632
zcmeI0OKjXk7{@=mNt(2IZJP8EpbUk+lYOPFnw8oll+qTZQ3#}<3TbidN#bVLUTp7%
z^gv4=Mt?>35BA`mZS8qd!E
zn}=t9-{%?EpI=K{zw%D^4O)^8(;E71p@|x5>>A2Vi@Kdqzp%h^@wX9Wm{!w&h(J>#
z9NAD$AGUn9mVL?ozCk*@UH1ucqVI4$LnUe=Su
zmMqAq4&xj-b+k8|&K&H`^zYx7O%Y88LCMdhQlOZ0Y(Gd&xs_C_g#<;g_Tbe^>gFY3P$jA2~68a-L|&5w`D_rIqx}hSmb#)bKEhf4QEPPs6B2^
zO{*Jb)4dt|WktF_*O$qq57b)wMCL#)o6V*BZ+BFtuYZM(LXUGbZkUD}CZu%4q+53G
z;)bFuy51bqn_==`n=cxLf(xc%79l81DEM;HbBl0=nJ+st`6(Hc46o>`9{!c)Hewo|@Eoqo;8EoxKcggOJ;sgZ8J`O_CCCq@VI
z%5okSPJAS8=PipC=tb^<&VY{u&mwi>+M{~xRrv*OL-(k1x5_(lp5jE`G1?Us9=)jA
zTvD|=aGySvz8u(DQ{IL0=;_1KNGomamexI)|TK5F3}{O=<5Xg%6%
zuX6feVDVSO`OohV->N)(d#HVHXwlu>d*VLKoOyHPF6GU(1YL-F
z@^cGPv0~mmv8v^*Bi5_Db;Np=w~km((CY|l=Aa|itGso@dV+f6F`0KVR?Hi_c+`)1
zr=gg)9`n`_=T+YPe}j;>ju@|U(-GrU-n@<~ZyhmS+p?Coju@}<))C_&ZyoVnjd5M^
z&crii-mJozGVjBB2ffR1X^^uhh5O5*TK!!m@J|uoy_dt2&o4f;_^jd+iq9qfu5$|)
z|E{M0CxJ11z;W>zN6=Ax*x`>lbMX8hPaCOTTO`A=bf+{pfBMqkm9MnL?}gmtE53j2`d50hW!nF#`~MC#|5ncc
diff --git a/cve-python/requirements.txt b/cve-python/requirements.txt
deleted file mode 100644
index 633fae4..0000000
--- a/cve-python/requirements.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-Automat==20.2.0
-DBUtils==1.3
-Flask==1.1.2
-Jinja2==2.11.2
-MarkupSafe==1.1.1
-Protego==0.1.16
-PyDispatcher==2.0.5
-PyHamcrest==2.0.2
-PyMySQL==0.10.0
-PyYAML==5.3.1
-Werkzeug==1.0.1
-aiocoap==0.3
-aiohttp==3.6.2
-async-timeout==3.0.1
-attrs==20.1.0
-beautifulsoup4==4.9.1
-certifi==2020.6.20
-cffi==1.14.2
-chardet==3.0.4
-click==7.1.2
-config==0.5.0.post0
-constantly==15.1.0
-cryptography==3.1
-cssselect==1.1.0
-hyperlink==20.0.1
-idna==2.10
-incremental==17.5.0
-itemadapter==0.1.0
-itemloaders==1.0.2
-itsdangerous==1.1.0
-jmespath==0.10.0
-lxml==4.5.2
-multidict==4.7.6
-mysql==0.0.2
-mysql-connector-python==8.0.21
-mysqlclient==2.0.1
-parsel==1.6.0
-pip==20.2.2
-protobuf==3.13.0
-psutil==5.7.2
-pyOpenSSL==19.1.0
-pyasn1==0.4.8
-pyasn1-modules==0.2.8
-pycparser==2.20
-queuelib==1.5.0
-requests==2.24.0
-resolver==0.2.1
-schedule==0.6.0
-selector==0.10.1
-service-identity==18.1.0
-setuptools==50.1.0
-sites==0.0.1
-six==1.15.0
-soupsieve==2.0.1
-urllib3==1.25.10
-w3lib==1.22.0
-xlrd==1.2.0
-xlwt==1.3.0
-yarl==1.5.1
-zope.interface==5.1.0
diff --git a/cve-python/sigs.yaml b/cve-python/sigs.yaml
deleted file mode 100644
index 1784086..0000000
--- a/cve-python/sigs.yaml
+++ /dev/null
@@ -1,7232 +0,0 @@
-sigs:
-- name: Infrastructure
- repositories:
- - openeuler/infrastructure
- - openeuler/blog
- - openeuler/website
- - openeuler/go-gitee
- - openeuler/gitbook-theme-hugo
- - openeuler/tool-collections
- - openeuler/cve-manager
-- name: TC
- repositories:
- - openeuler/community
-- name: doc
- repositories:
- - openeuler/docs
-- name: sig-CICD
- repositories:
- - openeuler/compass-ci
-- name: Application
- repositories:
- - openeuler/custom_build_tool
- - src-openeuler/abrt
- - src-openeuler/abrt-java-connector
- - src-openeuler/alsa-utils
- - src-openeuler/amanda
- - src-openeuler/antlr-maven-plugin
- - src-openeuler/antlr32
- - src-openeuler/apache-commons-collections
- - src-openeuler/apache-commons-csv
- - src-openeuler/apache-commons-daemon
- - src-openeuler/apache-commons-dbcp
- - src-openeuler/apache-commons-logging
- - src-openeuler/apache-commons-pool
- - src-openeuler/apache-commons-validator
- - src-openeuler/apache-logging-parent
- - src-openeuler/apache-mime4j
- - src-openeuler/apache-mod_jk
- - src-openeuler/apache-rat
- - src-openeuler/apache-rpm-macros
- - src-openeuler/aries-blueprint-core
- - src-openeuler/aries-blueprint-parser
- - src-openeuler/aries-proxy-api
- - src-openeuler/aspell
- - src-openeuler/aspell-en
- - src-openeuler/avro
- - src-openeuler/boilerpipe
- - src-openeuler/brasero
- - src-openeuler/bwa
- - src-openeuler/cdrdao
- - src-openeuler/cjose
- - src-openeuler/cli-parser
- - src-openeuler/codegen
- - src-openeuler/coffee-script
- - src-openeuler/compface
- - src-openeuler/compress-lzf
- - src-openeuler/console-setup
- - src-openeuler/convmv
- - src-openeuler/cookxml
- - src-openeuler/culmus-fonts
- - src-openeuler/custom_build_tool
- - src-openeuler/dblatex
- - src-openeuler/dcraw
- - src-openeuler/decentxml
- - src-openeuler/discount
- - src-openeuler/dleyna-server
- - src-openeuler/dlm
- - src-openeuler/dnssec-trigger
- - src-openeuler/docbook-style-dsssl
- - src-openeuler/docbook-utils
- - src-openeuler/docbook2X
- - src-openeuler/docbook5-style-xsl
- - src-openeuler/dovecot
- - src-openeuler/doxygen
- - src-openeuler/dump
- - src-openeuler/elinks
- - src-openeuler/elixir
- - src-openeuler/enscript
- - src-openeuler/eog
- - src-openeuler/erlang-protobuffs
- - src-openeuler/erlang-rebar
- - src-openeuler/esc
- - src-openeuler/evince
- - src-openeuler/faust
- - src-openeuler/fdupes
- - src-openeuler/felix-gogo-runtime
- - src-openeuler/felix-gogo-shell
- - src-openeuler/felix-scr-annotations
- - src-openeuler/felix-scr-generator
- - src-openeuler/fetchmail
- - src-openeuler/file-roller
- - src-openeuler/fio
- - src-openeuler/firefox
- - src-openeuler/fmpp
- - src-openeuler/fontforge
- - src-openeuler/fonts-tweak-tool
- - src-openeuler/forbidden-apis
- - src-openeuler/forge-parent
- - src-openeuler/freerdp
- - src-openeuler/genwqe-tools
- - src-openeuler/geronimo-parent-poms
- - src-openeuler/gfbgraph
- - src-openeuler/gl-manpages
- - src-openeuler/glog
- - src-openeuler/gmetric4j
- - src-openeuler/gnome-calculator
- - src-openeuler/gnome-desktop
- - src-openeuler/gnome-online-miners
- - src-openeuler/gnupg
- - src-openeuler/gnuplot
- - src-openeuler/google-crosextra-carlito-fonts
- - src-openeuler/grafana
- - src-openeuler/GraphicsMagick
- - src-openeuler/grilo-plugins
- - src-openeuler/gromacs
- - src-openeuler/gshhg-gmt-nc4
- - src-openeuler/gstreamer
- - src-openeuler/gstreamer-plugins-base
- - src-openeuler/gstreamer-plugins-good
- - src-openeuler/gyp
- - src-openeuler/hazelcast
- - src-openeuler/HdrHistogram
- - src-openeuler/hspell
- - src-openeuler/hsqldb1
- - src-openeuler/httpcomponents-asyncclient
- - src-openeuler/hunspell-ak
- - src-openeuler/hunspell-am
- - src-openeuler/hunspell-ar
- - src-openeuler/hunspell-as
- - src-openeuler/hunspell-ast
- - src-openeuler/hunspell-az
- - src-openeuler/hunspell-be
- - src-openeuler/hunspell-ber
- - src-openeuler/hunspell-bg
- - src-openeuler/hunspell-bn
- - src-openeuler/hunspell-br
- - src-openeuler/hunspell-ca
- - src-openeuler/hunspell-cop
- - src-openeuler/hunspell-csb
- - src-openeuler/hunspell-cv
- - src-openeuler/hunspell-cy
- - src-openeuler/hunspell-da
- - src-openeuler/hunspell-de
- - src-openeuler/hunspell-dsb
- - src-openeuler/hunspell-el
- - src-openeuler/hunspell-eo
- - src-openeuler/hunspell-es
- - src-openeuler/hunspell-et
- - src-openeuler/hunspell-eu
- - src-openeuler/hunspell-fa
- - src-openeuler/hunspell-fj
- - src-openeuler/hunspell-fo
- - src-openeuler/hunspell-fr
- - src-openeuler/hunspell-fur
- - src-openeuler/hunspell-fy
- - src-openeuler/hunspell-ga
- - src-openeuler/hunspell-gd
- - src-openeuler/hunspell-gl
- - src-openeuler/hunspell-grc
- - src-openeuler/hunspell-gu
- - src-openeuler/hunspell-gv
- - src-openeuler/hunspell-haw
- - src-openeuler/hunspell-hil
- - src-openeuler/hunspell-hr
- - src-openeuler/hunspell-hsb
- - src-openeuler/hunspell-ht
- - src-openeuler/hunspell-hu
- - src-openeuler/hunspell-hy
- - src-openeuler/hunspell-ia
- - src-openeuler/hunspell-id
- - src-openeuler/hunspell-is
- - src-openeuler/hunspell-it
- - src-openeuler/hunspell-kk
- - src-openeuler/hunspell-km
- - src-openeuler/hunspell-kn
- - src-openeuler/hunspell-ko
- - src-openeuler/hunspell-ku
- - src-openeuler/hunspell-ky
- - src-openeuler/hunspell-la
- - src-openeuler/hunspell-lb
- - src-openeuler/hunspell-ln
- - src-openeuler/hunspell-lt
- - src-openeuler/hunspell-mai
- - src-openeuler/hunspell-mg
- - src-openeuler/hunspell-mi
- - src-openeuler/hunspell-mk
- - src-openeuler/hunspell-ml
- - src-openeuler/hunspell-mn
- - src-openeuler/hunspell-mos
- - src-openeuler/hunspell-mr
- - src-openeuler/hunspell-ms
- - src-openeuler/hunspell-mt
- - src-openeuler/hunspell-nds
- - src-openeuler/hunspell-ne
- - src-openeuler/hunspell-nl
- - src-openeuler/hunspell-no
- - src-openeuler/hunspell-nr
- - src-openeuler/hunspell-nso
- - src-openeuler/hunspell-ny
- - src-openeuler/hunspell-oc
- - src-openeuler/hunspell-om
- - src-openeuler/hunspell-or
- - src-openeuler/hunspell-pa
- - src-openeuler/hunspell-pl
- - src-openeuler/hunspell-pt
- - src-openeuler/hunspell-qu
- - src-openeuler/hunspell-ro
- - src-openeuler/hunspell-ru
- - src-openeuler/hunspell-rw
- - src-openeuler/hunspell-sc
- - src-openeuler/hunspell-se
- - src-openeuler/hunspell-si
- - src-openeuler/hunspell-sk
- - src-openeuler/hunspell-sl
- - src-openeuler/hunspell-smj
- - src-openeuler/hunspell-so
- - src-openeuler/hunspell-sq
- - src-openeuler/hunspell-sr
- - src-openeuler/hunspell-ss
- - src-openeuler/hunspell-st
- - src-openeuler/hunspell-sv
- - src-openeuler/hunspell-sw
- - src-openeuler/hunspell-ta
- - src-openeuler/hunspell-te
- - src-openeuler/hunspell-tet
- - src-openeuler/hunspell-th
- - src-openeuler/hunspell-ti
- - src-openeuler/hunspell-tl
- - src-openeuler/hunspell-tn
- - src-openeuler/hunspell-tpi
- - src-openeuler/hunspell-ts
- - src-openeuler/hunspell-uk
- - src-openeuler/hunspell-ur
- - src-openeuler/hunspell-uz
- - src-openeuler/hunspell-ve
- - src-openeuler/hunspell-vi
- - src-openeuler/hunspell-wa
- - src-openeuler/hunspell-xh
- - src-openeuler/hunspell-yi
- - src-openeuler/hunspell-zu
- - src-openeuler/hwloc
- - src-openeuler/hyphen
- - src-openeuler/hyphen-as
- - src-openeuler/hyphen-bg
- - src-openeuler/hyphen-bn
- - src-openeuler/hyphen-ca
- - src-openeuler/hyphen-cy
- - src-openeuler/hyphen-da
- - src-openeuler/hyphen-de
- - src-openeuler/hyphen-el
- - src-openeuler/hyphen-es
- - src-openeuler/hyphen-eu
- - src-openeuler/hyphen-fa
- - src-openeuler/hyphen-fo
- - src-openeuler/hyphen-fr
- - src-openeuler/hyphen-ga
- - src-openeuler/hyphen-gl
- - src-openeuler/hyphen-gu
- - src-openeuler/hyphen-hi
- - src-openeuler/hyphen-hsb
- - src-openeuler/hyphen-ia
- - src-openeuler/hyphen-id
- - src-openeuler/hyphen-is
- - src-openeuler/hyphen-it
- - src-openeuler/hyphen-kn
- - src-openeuler/hyphen-ku
- - src-openeuler/hyphen-lt
- - src-openeuler/hyphen-ml
- - src-openeuler/hyphen-mn
- - src-openeuler/hyphen-mr
- - src-openeuler/hyphen-nl
- - src-openeuler/hyphen-or
- - src-openeuler/hyphen-pa
- - src-openeuler/hyphen-pl
- - src-openeuler/hyphen-pt
- - src-openeuler/hyphen-ro
- - src-openeuler/hyphen-ru
- - src-openeuler/hyphen-sa
- - src-openeuler/hyphen-sk
- - src-openeuler/hyphen-sl
- - src-openeuler/hyphen-sv
- - src-openeuler/hyphen-ta
- - src-openeuler/hyphen-te
- - src-openeuler/hyphen-tk
- - src-openeuler/hyphen-uk
- - src-openeuler/ibus-table-chinese
- - src-openeuler/icc-profiles-openicc
- - src-openeuler/idm-console-framework
- - src-openeuler/iio-sensor-proxy
- - src-openeuler/indent
- - src-openeuler/infiniband-diags
- - src-openeuler/iperf2
- - src-openeuler/iperf3
- - src-openeuler/irssi
- - src-openeuler/java-atk-wrapper
- - src-openeuler/javamail
- - src-openeuler/jboss-jms-2.0-api
- - src-openeuler/jdepend
- - src-openeuler/jedis
- - src-openeuler/jpegoptim
- - src-openeuler/jsch
- - src-openeuler/json_simple
- - src-openeuler/jsonp
- - src-openeuler/jss
- - src-openeuler/jzlib
- - src-openeuler/kim-api
- - src-openeuler/kohsuke-pom
- - src-openeuler/libabigail
- - src-openeuler/libaec
- - src-openeuler/libapr1
- - src-openeuler/libdmapsharing
- - src-openeuler/libdvdnav
- - src-openeuler/libdvdread
- - src-openeuler/libeasyfc
- - src-openeuler/libgadu
- - src-openeuler/liblockfile
- - src-openeuler/liblouis
- - src-openeuler/libmicrohttpd
- - src-openeuler/libmikmod
- - src-openeuler/libmpeg2
- - src-openeuler/libmtp
- - src-openeuler/libmusicbrainz5
- - src-openeuler/libtcnative
- - src-openeuler/libvpx
- - src-openeuler/libwbxml
- - src-openeuler/libyami
- - src-openeuler/linkchecker
- - src-openeuler/linuxconsoletools
- - src-openeuler/linuxdoc-tools
- - src-openeuler/linuxptp
- - src-openeuler/lksctp-tools
- - src-openeuler/lmfit
- - src-openeuler/log4j12
- - src-openeuler/lohit-assamese-fonts
- - src-openeuler/lohit-bengali-fonts
- - src-openeuler/lohit-devanagari-fonts
- - src-openeuler/lohit-gujarati-fonts
- - src-openeuler/lohit-kannada-fonts
- - src-openeuler/lohit-malayalam-fonts
- - src-openeuler/lohit-marathi-fonts
- - src-openeuler/lohit-nepali-fonts
- - src-openeuler/lohit-tamil-fonts
- - src-openeuler/lohit-telugu-fonts
- - src-openeuler/lpg
- - src-openeuler/lrzsz
- - src-openeuler/lsyncd
- - src-openeuler/lynx
- - src-openeuler/mailman
- - src-openeuler/mc
- - src-openeuler/media-player-info
- - src-openeuler/memcached
- - src-openeuler/metadata-extractor2
- - src-openeuler/mikmod
- - src-openeuler/mina-ftpserver
- - src-openeuler/mod_intercept_form_submit
- - src-openeuler/mod_lookup_identity
- - src-openeuler/mousetweaks
- - src-openeuler/mrtg
- - src-openeuler/msv
- - src-openeuler/munge
- - src-openeuler/mutt
- - src-openeuler/mythes
- - src-openeuler/nano
- - src-openeuler/netpbm
- - src-openeuler/nss-altfiles
- - src-openeuler/nss-mdns
- - src-openeuler/nss_wrapper
- - src-openeuler/ntfs-3g
- - src-openeuler/objectweb-asm
- - src-openeuler/oldstandard-sfd-fonts
- - src-openeuler/openal-soft
- - src-openeuler/openjade
- - src-openeuler/openmpi
- - src-openeuler/opennlp
- - src-openeuler/openoffice-lv
- - src-openeuler/openoffice.org-dict-cs_CZ
- - src-openeuler/opensm
- - src-openeuler/opensp
- - src-openeuler/opentest4j
- - src-openeuler/openvpn
- - src-openeuler/pam_krb5
- - src-openeuler/paps
- - src-openeuler/patchutils
- - src-openeuler/pavucontrol
- - src-openeuler/pax
- - src-openeuler/pbzip2
- - src-openeuler/pcp
- - src-openeuler/perftest
- - src-openeuler/perl-B-Lint
- - src-openeuler/perl-Pod-LaTeX
- - src-openeuler/pesign
- - src-openeuler/pidgin
- - src-openeuler/pki-core
- - src-openeuler/pngquant
- - src-openeuler/pnm2ppa
- - src-openeuler/po4a
- - src-openeuler/pptp
- - src-openeuler/prelink
- - src-openeuler/psacct
- - src-openeuler/psutils
- - src-openeuler/pylint
- - src-openeuler/qperf
- - src-openeuler/R-language
- - src-openeuler/rabbitmq-server
- - src-openeuler/rasqal
- - src-openeuler/rdate
- - src-openeuler/redis-protocol
- - src-openeuler/regexp
- - src-openeuler/rhythmbox
- - src-openeuler/rngom
- - src-openeuler/rpcsvc-proto
- - src-openeuler/rrdtool
- - src-openeuler/rubygem-kramdown
- - src-openeuler/sane-frontends
- - src-openeuler/scrub
- - src-openeuler/skkdic
- - src-openeuler/slapi-nis
- - src-openeuler/snapd-glib
- - src-openeuler/socat
- - src-openeuler/soundtouch
- - src-openeuler/spamassassin
- - src-openeuler/spec-version-maven-plugin
- - src-openeuler/strongswan
- - src-openeuler/stunnel
- - src-openeuler/t-digest
- - src-openeuler/targetcli
- - src-openeuler/tboot
- - src-openeuler/testng
- - src-openeuler/tex-fonts-hebrew
- - src-openeuler/texi2html
- - src-openeuler/texlive
- - src-openeuler/texlive-base
- - src-openeuler/three-eight-nine-ds-base
- - src-openeuler/tomcat
- - src-openeuler/tomcat-taglibs-standard
- - src-openeuler/torque
- - src-openeuler/tpm-quote-tools
- - src-openeuler/tpm-tools
- - src-openeuler/transfig
- - src-openeuler/tre
- - src-openeuler/ttmkfdir
- - src-openeuler/uid_wrapper
- - src-openeuler/units
- - src-openeuler/unrtf
- - src-openeuler/usb_modeswitch-data
- - src-openeuler/usbguard
- - src-openeuler/uwsgi
- - src-openeuler/vinagre
- - src-openeuler/vorbis-tools
- - src-openeuler/voroplusplus
- - src-openeuler/vte
- - src-openeuler/wavpack
- - src-openeuler/wayland-protocols
- - src-openeuler/web-assets
- - src-openeuler/weechat
- - src-openeuler/weston
- - src-openeuler/wireshark
- - src-openeuler/wmctrl
- - src-openeuler/xapps
- - src-openeuler/xdg-dbus-proxy
- - src-openeuler/xdg-desktop-portal-gtk
- - src-openeuler/xml-commons-apis
- - src-openeuler/XmlSchema
- - src-openeuler/xmlstreambuffer
- - src-openeuler/xmltoman
- - src-openeuler/xmltool
- - src-openeuler/xmms
- - src-openeuler/xsane
- - src-openeuler/xz-java
- - src-openeuler/yelp-tools
-- name: Programming-language
- repositories:
- - src-openeuler/assertj-core
- - src-openeuler/cinnamon-translations
- - src-openeuler/gmavenplus-plugin
- - src-openeuler/jboss-el
- - src-openeuler/spock
- - src-openeuler/mockito
- - src-openeuler/keepalived
- - src-openeuler/ndisc6
- - src-openeuler/perl-Module-Install-ReadmeFromPod
- - src-openeuler/perl-Module-Install-ReadmeMarkdownFromPod
- - src-openeuler/perl-Module-Install-Repository
- - src-openeuler/perl-Module-Manifest-Skip
- - src-openeuler/perl-Module-Package
- - src-openeuler/perl-Module-Package-Au
- - src-openeuler/perl-Module-ScanDeps
- - src-openeuler/perl-Moo
- - src-openeuler/perl-Path-Class
- - src-openeuler/perl-Role-Tiny
- - src-openeuler/perl-strictures
- - src-openeuler/libimagequant
- - src-openeuler/perl-Crypt-OpenSSL-Random
- - src-openeuler/python-psutil
- - src-openeuler/perl-NTLM
- - src-openeuler/python-entrypoints
- - src-openeuler/gnu-efi
- - src-openeuler/libzip
- - src-openeuler/libdwarf
- - src-openeuler/ltrace
- - src-openeuler/python-which
- - src-openeuler/perl-Software-License
- - src-openeuler/xcb-util-keysyms
- - src-openeuler/xcb-util-cursor
- - src-openeuler/autoconf213
- - src-openeuler/perl-Pod-Markdown
- - src-openeuler/gperf
- - src-openeuler/xdelta
- - src-openeuler/python-iso8601
- - src-openeuler/python-sphinx-theme-alabaster
- - src-openeuler/perl-Sub-Install
- - src-openeuler/enchant2
- - src-openeuler/perl-Capture-Tiny
- - src-openeuler/gssdp
- - src-openeuler/uuid
- - src-openeuler/mpich
- - src-openeuler/python-attrs
- - src-openeuler/perl-SGMLSpm
- - src-openeuler/librelp
- - src-openeuler/python-imagesize
- - src-openeuler/perl-Path-Tiny
- - src-openeuler/python-paramiko
- - src-openeuler/python-sphinx
- - src-openeuler/nvml
- - src-openeuler/python-virtualenv
- - src-openeuler/python-configparser
- - src-openeuler/perl-Config-AutoConf
- - src-openeuler/xorg-x11-proto-devel
- - src-openeuler/qt5-qtwebsockets
- - src-openeuler/perl-WWW-RobotRules
- - src-openeuler/python-pluggy
- - src-openeuler/qt5-qtsensors
- - src-openeuler/python-funcsigs
- - src-openeuler/pywbem
- - src-openeuler/qt5-qtquickcontrols
- - src-openeuler/libuv
- - src-openeuler/qt5-qtx11extras
- - src-openeuler/perl-Data-UUID
- - src-openeuler/python-traceback2
- - src-openeuler/perl-Text-Unidecode
- - src-openeuler/dotconf
- - src-openeuler/python-scons
- - src-openeuler/perl-YAML-Tiny
- - src-openeuler/mallard-rng
- - src-openeuler/itstool
- - src-openeuler/crash-gcore-command
- - src-openeuler/intel-cmt-cat
- - src-openeuler/qt5-qtdeclarative
- - src-openeuler/qt5-qtquickcontrols2
- - src-openeuler/byacc
- - src-openeuler/numpy
- - src-openeuler/python-enchant
- - src-openeuler/rpmlint
- - src-openeuler/perl-HTTP-Message
- - src-openeuler/libindicator
- - src-openeuler/libappstream-glib
- - src-openeuler/iowatcher
- - src-openeuler/python-wheel
- - src-openeuler/perl-NetAddr-IP
- - src-openeuler/cppunit
- - src-openeuler/perl-Authen-SASL
- - src-openeuler/libpfm
- - src-openeuler/python-pyasn1
- - src-openeuler/perl-LWP-MediaTypes
- - src-openeuler/perl-Try-Tiny
- - src-openeuler/perl-gettext
- - src-openeuler/perl-Date-Calc
- - src-openeuler/python-unittest2
- - src-openeuler/check
- - src-openeuler/tix
- - src-openeuler/python-dns
- - src-openeuler/python-atomicwrites
- - src-openeuler/perl-IO-Socket-INET6
- - src-openeuler/cmocka
- - src-openeuler/qt5-qtxmlpatterns
- - src-openeuler/perl-IO-HTML
- - src-openeuler/ninja-build
- - src-openeuler/socket_wrapper
- - src-openeuler/perl-Module-Build
- - src-openeuler/pygobject2
- - src-openeuler/lua-posix
- - src-openeuler/python-snowballstemmer
- - src-openeuler/lua-lunit
- - src-openeuler/qt5-qtconnectivity
- - src-openeuler/qt5-qtsvg
- - src-openeuler/vte291
- - src-openeuler/python-cryptography-vectors
- - src-openeuler/python-lit
- - src-openeuler/xcb-util-renderutil
- - src-openeuler/jimtcl
- - src-openeuler/perl-MailTools
- - src-openeuler/python-pygments
- - src-openeuler/perl-JSON
- - src-openeuler/python-itsdangerous
- - src-openeuler/cscope
- - src-openeuler/perl-LWP-Protocol-https
- - src-openeuler/ilmbase
- - src-openeuler/perl-Crypt-OpenSSL-RSA
- - src-openeuler/libstemmer
- - src-openeuler/perl-File-Listing
- - src-openeuler/ocaml
- - src-openeuler/pygtk2
- - src-openeuler/python-urwid
- - src-openeuler/python-linecache2
- - src-openeuler/gupnp
- - src-openeuler/python-docutils
- - src-openeuler/perl-inc-latest
- - src-openeuler/fakeroot
- - src-openeuler/qt5-qtdoc
- - src-openeuler/perl-MRO-Compat
- - src-openeuler/perl-String-ShellQuote
- - src-openeuler/python-extras
- - src-openeuler/python-mimeparse
- - src-openeuler/perl-TimeDate
- - src-openeuler/rhnlib
- - src-openeuler/perl-XML-Simple
- - src-openeuler/perl-XML-LibXML
- - src-openeuler/subunit
- - src-openeuler/scipy
- - src-openeuler/SDL
- - src-openeuler/perl-generators
- - src-openeuler/perl-Test-Pod
- - src-openeuler/neon
- - src-openeuler/python-fonttools
- - src-openeuler/lapack
- - src-openeuler/libdbusmenu
- - src-openeuler/python-netaddr
- - src-openeuler/perl-Bit-Vector
- - src-openeuler/gflags
- - src-openeuler/perl-libxml-perl
- - src-openeuler/intltool
- - src-openeuler/python-sphinxcontrib-websupport
- - src-openeuler/perl-Params-Util
- - src-openeuler/qt5-qttools
- - src-openeuler/autoconf-archive
- - src-openeuler/python-cups
- - src-openeuler/gupnp-igd
- - src-openeuler/perl-IO-String
- - src-openeuler/perl-Net-HTTP
- - src-openeuler/python-click
- - src-openeuler/python-sure
- - src-openeuler/python-backports_abc
- - src-openeuler/perl-HTTP-Date
- - src-openeuler/python-fixtures
- - src-openeuler/obs-env
- - src-openeuler/libspectre
- - src-openeuler/perl-HTTP-Negotiate
- - src-openeuler/vala
- - src-openeuler/eglexternalplatform
- - src-openeuler/python-genshi
- - src-openeuler/gstreamer1-plugins-bad-free
- - src-openeuler/python-blinker
- - src-openeuler/xcb-util-wm
- - src-openeuler/qt5-qttranslations
- - src-openeuler/PyYAML
- - src-openeuler/python-keyring
- - src-openeuler/go-compilers
- - src-openeuler/python-futures
- - src-openeuler/perl-Test-Deep
- - src-openeuler/perl-Text-CharWidth
- - src-openeuler/perl-Devel-CheckLib
- - src-openeuler/python-whoosh
- - src-openeuler/qt5-qtwayland
- - src-openeuler/perl-Module-Runtime
- - src-openeuler/mvapich2
- - src-openeuler/python-more-itertools
- - src-openeuler/perl-Data-OptList
- - src-openeuler/crash-trace-command
- - src-openeuler/perl-File-Slurp
- - src-openeuler/python-py
- - src-openeuler/perl-Test-Warnings
- - src-openeuler/perl-Date-Manip
- - src-openeuler/libdv
- - src-openeuler/python-sqlalchemy
- - src-openeuler/qt5-qtmultimedia
- - src-openeuler/gnome-user-docs
- - src-openeuler/meanwhile
- - src-openeuler/qt5-qtcanvas3d
- - src-openeuler/perl-XML-SAX
- - src-openeuler/python-singledispatch
- - src-openeuler/pyxdg
- - src-openeuler/perl-Unicode-UTF8
- - src-openeuler/perl-XML-SAX-Base
- - src-openeuler/python-pretend
- - src-openeuler/libXScrnSaver
- - src-openeuler/perl-Archive-Zip
- - src-openeuler/perl-Text-WrapI18N
- - src-openeuler/pytest
- - src-openeuler/swig
- - src-openeuler/lua-filesystem
- - src-openeuler/perl-XML-XPath
- - src-openeuler/pyflakes
- - src-openeuler/dejagnu
- - src-openeuler/python-testtools
- - src-openeuler/jsoncpp
- - src-openeuler/qt5-qtimageformats
- - src-openeuler/perl-libwww-perl
- - src-openeuler/qt5-qtserialport
- - src-openeuler/python-distro
- - src-openeuler/meson
- - src-openeuler/perl-Data-Section
- - src-openeuler/perl-ExtUtils-CBuilder
- - src-openeuler/perl-Test-FailWarnings
- - src-openeuler/qt5-qtbase
- - src-openeuler/Cython
- - src-openeuler/qpdf
- - src-openeuler/python-pbr
- - src-openeuler/cmake
- - src-openeuler/papi
- - src-openeuler/perl-Digest-HMAC
- - src-openeuler/python-freezegun
- - src-openeuler/nasm
- - src-openeuler/perl-HTML-Tagset
- - src-openeuler/python-hypothesis
- - src-openeuler/openscap
- - src-openeuler/gnome-common
- - src-openeuler/python-packaging
- - src-openeuler/qt5-qt3d
- - src-openeuler/gspell
- - src-openeuler/xcb-util-image
- - src-openeuler/python-SecretStorage
- - src-openeuler/python-bottle
- - src-openeuler/perl-libintl-perl
- - src-openeuler/python-greenlet
- - src-openeuler/perl-Fedora-VSP
- - src-openeuler/perl-Test-Needs
- - src-openeuler/tinyxml2
- - src-openeuler/python2-typing
- - src-openeuler/libfabric
- - src-openeuler/xorg-x11-util-macros
- - src-openeuler/perl-Text-Tabs-Wrap
- - src-openeuler/pangomm
- - src-openeuler/perl-Font-TTF
- - src-openeuler/LibRaw
- - src-openeuler/perl-Socket6
- - src-openeuler/perl-Test-NoWarnings
- - src-openeuler/perl-Parse-Yapp
- - src-openeuler/xcb-proto
- - src-openeuler/flatpak
- - src-openeuler/libell
- - src-openeuler/perl-Carp-Clan
- - src-openeuler/python-flit
- - src-openeuler/qt5-qtlocation
- - src-openeuler/libXp
- - src-openeuler/python-configshell
- - src-openeuler/python-werkzeug
- - src-openeuler/python-mock
- - src-openeuler/librdkafka
- - src-openeuler/python-setuptools_scm
- - src-openeuler/perl-HTML-Parser
- - src-openeuler/python-pytoml
- - src-openeuler/libsrtp
- - src-openeuler/qt5-qtscript
- - src-openeuler/python-gevent
- - src-openeuler/libmemcached
- - src-openeuler/trace-cmd
- - src-openeuler/python-urlgrabber
- - src-openeuler/python-markdown
- - src-openeuler/python-nose
- - src-openeuler/perl-HTTP-Cookies
- - src-openeuler/perl-XML-NamespaceSupport
- - src-openeuler/python-sphinx_rtd_theme
- - src-openeuler/tbb
- - src-openeuler/python-flask
- - src-openeuler/qt5-qtwebchannel
- - src-openeuler/gtest
- - src-openeuler/cppcheck
- - src-openeuler/nototools
- - src-openeuler/qt5-qtserialbus
- - src-openeuler/valgrind
- - src-openeuler/qt5-qtgraphicaleffects
- - src-openeuler/qt5-qtspeech
- - src-openeuler/qt5-qtvirtualkeyboard
- - src-openeuler/qt5dxcb-plugin
- - src-openeuler/perl-Text-Template
- - src-openeuler/perl-Mail-DKIM
- - src-openeuler/cvs
- - src-openeuler/perl-Net-DNS
- - src-openeuler/python-construct
- - src-openeuler/openblas
- - src-openeuler/spice-protocol
- - src-openeuler/libgnome-keyring
- - src-openeuler/pyelftools
- - src-openeuler/python-tornado
- - src-openeuler/python-httpretty
- - src-openeuler/egl-wayland
- - src-openeuler/python-testscenarios
- - src-openeuler/python-augeas
- - src-openeuler/glib
- - src-openeuler/perl-Data-Dump
- - src-openeuler/help2man
- - src-openeuler/python-pymongo
- - src-openeuler/perl-YAML
- - src-openeuler/sblim-cmpi-devel
- - src-openeuler/gtk-vnc
- - src-openeuler/perl-Sub-Name
- - src-openeuler/perl-Sub-Quote
- - src-openeuler/perl-Test-Fatal
- - src-openeuler/perl-Test-InDistDir
- - src-openeuler/perl-Test-Pod-Coverage
- - src-openeuler/perl-Test-Requires
- - src-openeuler/perl-Text-Glob
- - src-openeuler/nim
- - src-openeuler/erlang
- - src-openeuler/erlang-getopt
- - src-openeuler/erlang-neotoma
- - src-openeuler/erlang-eflame
- - src-openeuler/erlang-erlsyslog
- - src-openeuler/erlang-mustache
- - src-openeuler/erlang-lfe
- - src-openeuler/erlang-rpm-macros
- - src-openeuler/erlang-proper
- - src-openeuler/erlang-hamcrest
- - src-openeuler/erlang-gettext
- - src-openeuler/erlang-erlydtl
- - src-openeuler/erlang-sd_notify
- - src-openeuler/erlang-meck
-- name: Runtime
- repositories:
- - src-openeuler/ibus-libpinyin
- - src-openeuler/mesa-demos
- - src-openeuler/tinycdb
- - src-openeuler/freeglut
- - src-openeuler/libmpcdec
- - src-openeuler/mesa-libGLw
- - src-openeuler/alsa-plugins
- - src-openeuler/pkcs11-helper
- - src-openeuler/rhash
- - src-openeuler/libpeas
- - src-openeuler/libnice
- - src-openeuler/python-httplib2
- - src-openeuler/vdo
- - src-openeuler/protobuf-c
- - src-openeuler/fftw
- - src-openeuler/ibus-sayura
- - src-openeuler/hdf5
- - src-openeuler/libvdpau
- - src-openeuler/ibus-m17n
- - src-openeuler/xorg-x11-xtrans-devel
- - src-openeuler/redland
- - src-openeuler/libshout
- - src-openeuler/ibus-typing-booster
- - src-openeuler/librabbitmq
- - src-openeuler/celt051
- - src-openeuler/libva
- - src-openeuler/libvoikko
- - src-openeuler/jemalloc
- - src-openeuler/libpng12
- - src-openeuler/gsl
- - src-openeuler/clutter-gst2
- - src-openeuler/libiec61883
- - src-openeuler/atlas
- - src-openeuler/atkmm
- - src-openeuler/freetds
- - src-openeuler/kmod-kvdo
- - src-openeuler/libao
- - src-openeuler/glew
- - src-openeuler/libstoragemgmt
- - src-openeuler/qt
- - src-openeuler/OpenEXR
- - src-openeuler/motif
- - src-openeuler/m2crypto
- - src-openeuler/libsmi
- - src-openeuler/usbmuxd
- - src-openeuler/libavc1394
- - src-openeuler/libieee1284
-- name: Networking
- repositories:
- - src-openeuler/apache-commons-net
- - src-openeuler/glassfish-jax-rs-api
- - src-openeuler/kronosnet
- - src-openeuler/initscripts
- - src-openeuler/http-parser
- - src-openeuler/openvswitch
- - src-openeuler/ldns
- - src-openeuler/ipvsadm
- - src-openeuler/unbound
- - src-openeuler/ntp
- - src-openeuler/neethi
- - src-openeuler/openssh
- - src-openeuler/NetworkManager
- - src-openeuler/libserf
- - src-openeuler/tipcutils
- - src-openeuler/libmbim
- - src-openeuler/libqmi
- - src-openeuler/libnetfilter_queue
- - src-openeuler/iptables
- - src-openeuler/python-idna
- - src-openeuler/GeoIP
- - src-openeuler/xinetd
- - src-openeuler/libssh2
- - src-openeuler/nftables
- - src-openeuler/bridge-utils
- - src-openeuler/telnet
- - src-openeuler/libassuan
- - src-openeuler/iw
- - src-openeuler/GeoIP-GeoLite-data
- - src-openeuler/zd1211-firmware
- - src-openeuler/ipmitool
- - src-openeuler/ipset
- - src-openeuler/iptraf-ng
- - src-openeuler/ppp
- - src-openeuler/tcpdump
- - src-openeuler/traceroute
- - src-openeuler/mtr
- - src-openeuler/firewalld
- - src-openeuler/arpwatch
- - src-openeuler/iputils
- - src-openeuler/iproute
- - src-openeuler/nmap
- - src-openeuler/httpd
- - src-openeuler/network-manager-applet
- - src-openeuler/libdnet
- - src-openeuler/python-requests-ftp
- - src-openeuler/ModemManager
- - src-openeuler/procmail
- - src-openeuler/tcp_wrappers
- - src-openeuler/vconfig
- - src-openeuler/lua-socket
- - src-openeuler/mod_http2
- - src-openeuler/libtirpc
- - src-openeuler/ethtool
- - src-openeuler/net-tools
- - src-openeuler/hostname
- - src-openeuler/openldap
- - src-openeuler/ipcalc
- - src-openeuler/vsftpd
- - src-openeuler/samba
- - src-openeuler/dnsmasq
- - src-openeuler/notification-daemon
- - src-openeuler/chrony
- - src-openeuler/libproxy
- - src-openeuler/ntpstat
- - src-openeuler/libnetfilter_conntrack
- - src-openeuler/postfix
- - src-openeuler/libnl3
- - src-openeuler/arptables
- - src-openeuler/ftp
- - src-openeuler/python-paste
- - src-openeuler/libgcrypt
- - src-openeuler/python-ipaddress
- - src-openeuler/libpcap
- - src-openeuler/xmlrpc-c
- - src-openeuler/libssh
- - src-openeuler/wget
- - src-openeuler/nghttp2
- - src-openeuler/libnfnetlink
- - src-openeuler/curl
- - src-openeuler/python-IPy
- - src-openeuler/lftp
- - src-openeuler/atmel-firmware
- - src-openeuler/netcf
- - src-openeuler/c-ares
- - src-openeuler/python-backports-ssl_match_hostname
- - src-openeuler/python-ntplib
- - src-openeuler/libesmtp
- - src-openeuler/geolite2
- - src-openeuler/ebtables
- - src-openeuler/dropwatch
- - src-openeuler/bind
- - src-openeuler/OpenIPMI
- - src-openeuler/grpc
- - src-openeuler/bind-dyndb-ldap
- - src-openeuler/dhcp
- - src-openeuler/glib-networking
- - src-openeuler/net-snmp
- - src-openeuler/icfg
- - src-openeuler/python-requests
- - src-openeuler/rpcbind
- - src-openeuler/python-urllib3
- - src-openeuler/iptstate
- - src-openeuler/radvd
- - src-openeuler/squid
- - src-openeuler/python-html5lib
- - src-openeuler/libnet
- - src-openeuler/tftp
- - src-openeuler/lldpad
- - src-openeuler/b43-openfwwf
- - src-openeuler/libndp
- - src-openeuler/openslp
- - src-openeuler/mobile-broadband-provider-info
- - src-openeuler/xdp-cpumap-tc
- - src-openeuler/appweb
-- name: Virt
- repositories:
- - src-openeuler/virt-viewer
- - src-openeuler/virglrenderer
- - src-openeuler/python-beautifulsoup4
- - src-openeuler/libvirt-python
- - src-openeuler/libvirt-glib
- - src-openeuler/virt-manager
- - src-openeuler/qemu
- - src-openeuler/libvirt
- - src-openeuler/edk2
- - src-openeuler/perl-Sys-Virt
- - src-openeuler/vmtop
- - src-openeuler/stratovirt
- - openeuler/qemu
- - openeuler/libvirt
- - openeuler/vmtop
- - openeuler/stratovirt
-- name: Kernel
- repositories:
- - openeuler/kernel
- - src-openeuler/kabi-dw
- - src-openeuler/kernel
-- name: Others
- repositories:
- - src-openeuler/libopenraw
- - src-openeuler/libzapojit
- - src-openeuler/glassfish-jaxb-api
- - src-openeuler/farstream02
- - src-openeuler/fabtests
- - src-openeuler/perl-Sub-Uplevel
- - src-openeuler/python-pynacl
- - src-openeuler/autotune
- - src-openeuler/perl-Devel-Symdump
- - src-openeuler/perl-Net-SMTP-SSL
- - src-openeuler/gegl04
- - src-openeuler/perl-GSSAPI
- - src-openeuler/pyorbit
- - src-openeuler/u2f-hidraw-policy
- - src-openeuler/python-kitchen
- - src-openeuler/python-hwdata
- - src-openeuler/nilfs-utils
- - src-openeuler/keyrings-filesystem
- - src-openeuler/zerofree
- - src-openeuler/hfsplus-tools
- - src-openeuler/ImageMagick
- - src-openeuler/gnome-disk-utility
- - src-openeuler/twolame
- - src-openeuler/perl-Mail-Sender
- - src-openeuler/gnome-getting-started-docs
- - src-openeuler/folks
- - src-openeuler/perl-Encode-Detect
- - src-openeuler/libsigcpp20
- - src-openeuler/raptor2
- - src-openeuler/clamav
- - src-openeuler/opencc
- - src-openeuler/python-joblib
- - src-openeuler/python-threadpoolctl
- - src-openeuler/perl-Class-Inspector
- - src-openeuler/gavl
- - src-openeuler/python-qt5
- - src-openeuler/sox
- - src-openeuler/perl-Crypt-OpenSSL-Bignum
- - src-openeuler/qt-mobility
- - src-openeuler/frei0r-plugins
- - src-openeuler/xhtml1-dtds
- - src-openeuler/perl-File-ShareDir-Install
- - src-openeuler/capstone
- - src-openeuler/osc
- - src-openeuler/python-bcrypt
- - src-openeuler/mpg123
- - src-openeuler/libgovirt
- - src-openeuler/PyQt4
- - src-openeuler/perl-IO-Multiplex
- - src-openeuler/libgnomeui
- - src-openeuler/perl-Sys-MemInfo
- - src-openeuler/python-cycler
- - src-openeuler/libgdither
- - src-openeuler/emacs-auctex
- - src-openeuler/gtk
- - src-openeuler/gtk4
- - src-openeuler/gnome-font-viewer
- - src-openeuler/perl-Net-CIDR-Lite
- - src-openeuler/python-pandas
- - src-openeuler/gnome-icon-theme-symbolic
- - src-openeuler/sblim-sfcCommon
- - src-openeuler/perl-Net-Server
- - src-openeuler/jfsutils
- - src-openeuler/python-reportlab
- - src-openeuler/python-argcomplete
- - src-openeuler/gnome-color-manager
- - src-openeuler/python-xgboost
- - src-openeuler/gnome-video-effects
- - src-openeuler/nbdkit
- - src-openeuler/perl-Pod-Coverage
- - src-openeuler/gsound
- - src-openeuler/libfprint
- - src-openeuler/gtksourceview3
- - src-openeuler/clucene
- - src-openeuler/python-flask-restful
- - src-openeuler/perl-Sys-CPU
- - src-openeuler/marisa
- - src-openeuler/festival-freebsoft-utils
- - src-openeuler/python-dict2xml
- - src-openeuler/hexedit
- - src-openeuler/perl-File-ShareDir
- - src-openeuler/gtkmm30
- - src-openeuler/suitesparse
- - src-openeuler/anthy
- - src-openeuler/python-pillow
- - src-openeuler/pcaudiolib
- - src-openeuler/obs-build
- - src-openeuler/urlview
- - src-openeuler/perl-Sub-Exporter
- - src-openeuler/qt5-qtenginio
- - src-openeuler/flite
- - src-openeuler/opusfile
- - src-openeuler/breeze-icon-theme
- - src-openeuler/dvdplusrw-tools
- - src-openeuler/latex2html
- - src-openeuler/dkms
- - src-openeuler/glibmm24
- - src-openeuler/python-aniso8601
- - src-openeuler/libmad
- - src-openeuler/python-parse
- - src-openeuler/gimp
- - src-openeuler/container-exception-logger
- - src-openeuler/perl-Sub-Exporter-Progressive
- - src-openeuler/qt5-qtwebkit
- - src-openeuler/espeak-ng
- - src-openeuler/irrlicht
- - src-openeuler/proj
- - src-openeuler/ucs-miscfixed-fonts
- - src-openeuler/libwmf
- - src-openeuler/qt5-qtwebengine
- - src-openeuler/perl-String-CRC32
- - src-openeuler/phonon
- - src-openeuler/python-kiwisolver
- - src-openeuler/kyotocabinet
- - src-openeuler/python-humanize
- - src-openeuler/gstreamer1-plugins-good
- - src-openeuler/qt5-doc
- - src-openeuler/xapian-core
- - src-openeuler/babl
- - src-openeuler/sip
- - src-openeuler/lame
- - src-openeuler/python-olefile
- - src-openeuler/libburn
- - src-openeuler/openEuler-latest-release
- - src-openeuler/perl-SNMP_Session
- - src-openeuler/gnome-packagekit
- - src-openeuler/phodav
- - src-openeuler/perl-Package-Generator
- - src-openeuler/re2
- - src-openeuler/gnome-python2
- - src-openeuler/mt-st
- - src-openeuler/cldr-emoji-annotation
- - src-openeuler/qtwebkit
- - src-openeuler/festival
- - src-openeuler/gcab
- - src-openeuler/gnome-icon-theme-extras
- - src-openeuler/libmypaint
- - src-openeuler/perl-Unicode-EastAsianWidth
- - src-openeuler/perl-Tk
- - src-openeuler/djvulibre
- - src-openeuler/perl-BSD-Resource
- - src-openeuler/conmon
- - src-openeuler/nagios
- - src-openeuler/libid3tag
- - src-openeuler/libxmlb
- - src-openeuler/libisofs
- - src-openeuler/SDL2
- - src-openeuler/mac-robber
- - src-openeuler/libspiro
- - src-openeuler/python-scikit-learn
- - src-openeuler/python-scikit-optimize
- - src-openeuler/assimp
- - src-openeuler/poly2tri
- - src-openeuler/libaesgm
- - src-openeuler/aalib
- - src-openeuler/afflib
- - src-openeuler/apache2-mod_xforward
- - src-openeuler/biosdevname
- - src-openeuler/cloud-utils
- - src-openeuler/debootstrap
- - src-openeuler/dogtail
- - src-openeuler/dpkg
- - src-openeuler/fonts-rpm-macros
- - src-openeuler/fuse-python
- - src-openeuler/galera
- - src-openeuler/gcc_secure
- - src-openeuler/icoutils
- - src-openeuler/libewf
- - src-openeuler/libhbaapi
- - src-openeuler/libhbalinux
- - src-openeuler/libisoburn
- - src-openeuler/libpinyin
- - src-openeuler/libsodium
- - src-openeuler/mcelog
- - src-openeuler/mongo-c-driver
- - src-openeuler/mypaint-brushes
- - src-openeuler/mysql
- - src-openeuler/py3c
- - src-openeuler/beakerlib
- - src-openeuler/oniguruma
- - src-openeuler/perl-BSSolv
- - src-openeuler/perl-Canary-Stability
- - src-openeuler/perl-Business-ISBN
- - src-openeuler/perl-Business-ISBN-Data
- - src-openeuler/perl-Class-Method-Modifiers
- - src-openeuler/perl-Class-XSAccessor
- - src-openeuler/perl-Compress-Bzip2
- - src-openeuler/perl-Config-General
- - src-openeuler/perl-common-sense
- - src-openeuler/perl-CPAN
- - src-openeuler/perl-Crypt-DES
- - src-openeuler/perl-Crypt-PasswdMD5
- - src-openeuler/perl-Devel-GlobalDestruction
- - src-openeuler/perl-Devel-Size
- - src-openeuler/perl-Digest-SHA1
- - src-openeuler/perl-Digest-SHA3
- - src-openeuler/perl-Email-Date-Format
- - src-openeuler/perl-ExtUtils-Config
- - src-openeuler/perl-ExtUtils-Helpers
- - src-openeuler/perl-ExtUtils-InstallPaths
- - src-openeuler/perl-Module-Build-Tiny
- - src-openeuler/perl-Readonly
- - src-openeuler/perl-Test-LeakTrace
- - src-openeuler/perl-File-Sync
- - src-openeuler/perl-File-BaseDir
- - src-openeuler/perl-File-Copy-Recursive
- - src-openeuler/perl-File-DesktopEntry
- - src-openeuler/perl-File-MimeInfo
- - src-openeuler/perl-File-ReadBackwards
- - src-openeuler/perl-File-pushd
- - src-openeuler/perl-File-Remove
- - src-openeuler/perl-GD
- - src-openeuler/perl-GD-Barcode
- - src-openeuler/perl-HTTP-Daemon
- - src-openeuler/perl-Import-Into
- - src-openeuler/perl-IO-All
- - src-openeuler/perl-IO-stringy
- - src-openeuler/perl-JSON-XS
- - src-openeuler/perl-local-lib
- - src-openeuler/perl-MIME-Lite
- - src-openeuler/perl-MIME-Types
- - src-openeuler/perl-Module-Install
- - src-openeuler/perl-Module-Install-AuthorRequires
- - src-openeuler/perl-Module-Install-AuthorTests
- - src-openeuler/perl-Module-Install-AutoLicense
- - src-openeuler/perl-Module-Install-GithubMeta
- - src-openeuler/perl-Module-Install-ManifestSkip
- - src-openeuler/perl-Net-LibIDN
- - src-openeuler/perl-Net-SNMP
- - src-openeuler/perl-Package-Constants
- - src-openeuler/perl-Socket-MsgHdr
- - src-openeuler/perl-Types-Serialiser
- - src-openeuler/perl-Switch
- - src-openeuler/perl-Test-RequiresInternet
- - src-openeuler/perl-Unicode-LineBreak
- - src-openeuler/perl-XML-Catalog
- - src-openeuler/perl-XML-TokeParser
- - src-openeuler/perl-YAML-LibYAML
- - src-openeuler/php
- - src-openeuler/PyPAM
- - src-openeuler/pv
- - src-openeuler/python-alsa
- - src-openeuler/python-apipkg
- - src-openeuler/python-tqdm
- - src-openeuler/python-backports-unittest_mock
- - src-openeuler/python-cached_property
- - src-openeuler/python-cherrypy
- - src-openeuler/python-constantly
- - src-openeuler/python-contextlib2
- - src-openeuler/python-docker
- - src-openeuler/python-docker-pycreds
- - src-openeuler/python-dockerpty
- - src-openeuler/python-ecdsa
- - src-openeuler/python-evdev
- - src-openeuler/python-execnet
- - src-openeuler/python-filelock
- - src-openeuler/python-gflags
- - src-openeuler/python-hamcrest
- - src-openeuler/python-hyperlink
- - src-openeuler/python-importlib-metadata
- - src-openeuler/python-incremental
- - src-openeuler/python-junitxml
- - src-openeuler/python-keyczar
- - src-openeuler/python-ldap
- - src-openeuler/python-logutils
- - src-openeuler/python-path
- - src-openeuler/python-pecan
- - src-openeuler/python-pytest-shutil
- - src-openeuler/python-semantic_version
- - src-openeuler/python-setuptools_git
- - src-openeuler/python-simplegeneric
- - src-openeuler/python-subprocess32
- - src-openeuler/python-varlink
- - src-openeuler/python-zipp
- - src-openeuler/python-zope-interface
- - src-openeuler/qhull
- - src-openeuler/qt-assistant-adp
- - src-openeuler/rear
- - src-openeuler/redis
- - src-openeuler/reiserfs-utils
- - src-openeuler/resource-agents
- - src-openeuler/rust-packaging
- - src-openeuler/sassc
- - src-openeuler/sleuthkit
- - src-openeuler/sos
- - src-openeuler/sphinx
- - src-openeuler/tidy
- - src-openeuler/tuna
- - src-openeuler/uchardet
- - src-openeuler/umoci
- - src-openeuler/python-toml
- - src-openeuler/python-mysqlclient
- - src-openeuler/python-PyMySQL
- - src-openeuler/python-rsa
- - src-openeuler/python-ruamel-yaml
- - src-openeuler/python-ruamel-yaml-clib
- - src-openeuler/python-suds2
- - src-openeuler/python-texttable
- - src-openeuler/python-waitress
- - src-openeuler/python-websocket-client
- - src-openeuler/python-webtest
- - src-openeuler/python-paste-deploy
- - src-openeuler/python-pyquery
- - src-openeuler/python-WSGIProxy2
- - src-openeuler/python-webob
- - src-openeuler/perl-Config-IniFiles
- - src-openeuler/perl-CGI
- - src-openeuler/boom-boot
- - src-openeuler/python-memcached
- - src-openeuler/python-psycopg2
- - src-openeuler/seabios
- - src-openeuler/procinfo
- - src-openeuler/annobin
- - src-openeuler/python-zope-event
- - src-openeuler/rcs
- - src-openeuler/rootsh
- - src-openeuler/scsi-target-utils
- - src-openeuler/python-cssselect
- - src-openeuler/obs-bundled-gems
- - src-openeuler/obs-server
- - src-openeuler/obs-service-download_files
- - src-openeuler/obs-service-extract_file
- - src-openeuler/obs-service-rust2rpm
- - src-openeuler/obs-service-set_version
- - src-openeuler/passenger
- - src-openeuler/papirus-icon-theme
- - src-openeuler/onboard
-- name: System-tool
- repositories:
- - src-openeuler/argyllcms
- - src-openeuler/watchdog
- - src-openeuler/custodia
- - src-openeuler/criu
- - src-openeuler/liblognorm
- - src-openeuler/mksh
- - src-openeuler/libgphoto2
- - src-openeuler/leveldb
- - src-openeuler/rocksdb
- - src-openeuler/fcoe-utils
- - src-openeuler/ibus-hangul
- - src-openeuler/colord-gtk
- - src-openeuler/gutenprint
- - src-openeuler/kiwi
- - src-openeuler/overpass-fonts
- - src-openeuler/libraw1394
- - src-openeuler/ibus-table
- - src-openeuler/wsmancli
- - src-openeuler/v4l-utils
- - src-openeuler/hplip
- - src-openeuler/crda
- - src-openeuler/tang
- - src-openeuler/libotf
- - src-openeuler/cups-filters
- - src-openeuler/bolt
- - src-openeuler/kde-filesystem
- - src-openeuler/mtx
- - src-openeuler/autofs
- - src-openeuler/varnish
- - src-openeuler/sil-abyssinica-fonts
- - src-openeuler/b43-tools
- - src-openeuler/ibus-table-array30
- - src-openeuler/libreswan
- - src-openeuler/logwatch
- - src-openeuler/NetworkManager-libreswan
- - src-openeuler/system-config-printer
- - src-openeuler/microcode_ctl
- - src-openeuler/openhpi
- - src-openeuler/netlabel_tools
- - src-openeuler/libguestfs
- - src-openeuler/mod_fcgid
- - src-openeuler/unicode-ucd
- - src-openeuler/fakechroot
- - src-openeuler/cim-schema
- - src-openeuler/cgdcbxd
- - src-openeuler/rng-tools
- - src-openeuler/portreserve
- - src-openeuler/mod_auth_gssapi
- - src-openeuler/tog-pegasus
- - src-openeuler/m17n-db
- - src-openeuler/fwupd
- - src-openeuler/libhangul
- - src-openeuler/environment-modules
- - src-openeuler/nvme-cli
- - src-openeuler/sblim-sfcb
- - src-openeuler/sblim-sfcc
- - src-openeuler/bacula
- - src-openeuler/mod_security
- - src-openeuler/open-sans-fonts
- - src-openeuler/liberation-fonts
- - src-openeuler/freeradius
- - src-openeuler/gfs2-utils
- - src-openeuler/sane-backends
- - src-openeuler/dejavu-fonts
- - src-openeuler/speech-dispatcher
- - src-openeuler/smc-fonts
- - src-openeuler/sil-scheherazade-fonts
- - src-openeuler/fontawesome-fonts
- - src-openeuler/freeipmi
- - src-openeuler/m17n-lib
- - src-openeuler/libsmbios
- - src-openeuler/pinfo
- - src-openeuler/openwsman
- - src-openeuler/fprintd
- - src-openeuler/initial-setup
- - src-openeuler/khmeros-fonts
- - src-openeuler/julietaula-montserrat-fonts
- - src-openeuler/usb_modeswitch
- - src-openeuler/sanlock
- - src-openeuler/mstflint
- - src-openeuler/pps-tools
- - src-openeuler/lklug-fonts
- - src-openeuler/nvmetcli
- - src-openeuler/hivex
- - src-openeuler/scap-workbench
- - src-openeuler/minicom
- - src-openeuler/supermin
- - src-openeuler/scap-security-guide
- - src-openeuler/haproxy
- - src-openeuler/entr
- - src-openeuler/rfkill
- - src-openeuler/partclone
-- name: Packaging
- repositories:
- - src-openeuler/pakchois
- - src-openeuler/copy-jdk-configs
- - src-openeuler/rpmdevtools
- - src-openeuler/nginx
- - src-openeuler/multilib-rpm-config
- - src-openeuler/obs_meta
-- name: DB
- repositories:
- - src-openeuler/derby
- - src-openeuler/gupnp-dlna
- - src-openeuler/h2
- - src-openeuler/postgresql-odbc
- - src-openeuler/foomatic
- - src-openeuler/foomatic-db
- - src-openeuler/postgresql
- - src-openeuler/unixODBC
- - src-openeuler/firebird
- - src-openeuler/mysql5
- - src-openeuler/glassfish-legal
- - src-openeuler/geolatte-geom
-- name: Base-service
- repositories:
- - openeuler/openEuler-rpm-config
- - src-openeuler/acl
- - src-openeuler/acpica-tools
- - src-openeuler/adcli
- - src-openeuler/aide
- - src-openeuler/airline
- - src-openeuler/ant-antunit
- - src-openeuler/apache-commons-chain
- - src-openeuler/apache-commons-el
- - src-openeuler/apache-commons-javaflow
- - src-openeuler/apache-commons-jci
- - src-openeuler/apache-mina
- - src-openeuler/apr
- - src-openeuler/apr-util
- - src-openeuler/argon2
- - src-openeuler/aries-blueprint-annotation-api
- - src-openeuler/aries-proxy-impl
- - src-openeuler/arm-trusted-firmware
- - src-openeuler/asciidoc
- - src-openeuler/at
- - src-openeuler/atf
- - src-openeuler/audiofile
- - src-openeuler/authd
- - src-openeuler/authselect
- - src-openeuler/autoconf
- - src-openeuler/autogen
- - src-openeuler/automake
- - src-openeuler/axiom
- - src-openeuler/babel
- - src-openeuler/babeltrace
- - src-openeuler/basesystem
- - src-openeuler/bash
- - src-openeuler/bash-completion
- - src-openeuler/bc
- - src-openeuler/binutils
- - src-openeuler/bison
- - src-openeuler/brotli
- - src-openeuler/bubblewrap
- - src-openeuler/bval
- - src-openeuler/byte-buddy
- - src-openeuler/bzip2
- - src-openeuler/ca-certificates
- - src-openeuler/castor
- - src-openeuler/cbi-plugins
- - src-openeuler/chkconfig
- - src-openeuler/chrpath
- - src-openeuler/clevis
- - src-openeuler/cloud-init
- - src-openeuler/conntrack-tools
- - src-openeuler/cookcc
- - src-openeuler/coreutils
- - src-openeuler/cpio
- - src-openeuler/cpp-hocon
- - src-openeuler/crash
- - src-openeuler/createrepo_c
- - src-openeuler/cronie
- - src-openeuler/crontabs
- - src-openeuler/ctags
- - src-openeuler/cxf
- - src-openeuler/CUnit
- - src-openeuler/cyrus-sasl
- - src-openeuler/dbus
- - src-openeuler/dbus-glib
- - src-openeuler/dbus-python
- - src-openeuler/dbxtool
- - src-openeuler/deltarpm
- - src-openeuler/dialog
- - src-openeuler/diffstat
- - src-openeuler/diffutils
- - src-openeuler/ding-libs
- - src-openeuler/disruptor
- - src-openeuler/docbook-dtds
- - src-openeuler/docbook-style-xsl
- - src-openeuler/dos2unix
- - src-openeuler/dracut
- - src-openeuler/drpm
- - src-openeuler/dtc
- - src-openeuler/dwz
- - src-openeuler/ed
- - src-openeuler/edac-utils
- - src-openeuler/elfutils
- - src-openeuler/epydoc
- - src-openeuler/exempi
- - src-openeuler/expat
- - src-openeuler/expect
- - src-openeuler/facter
- - src-openeuler/felix-osgi-compendium
- - src-openeuler/felix-osgi-core
- - src-openeuler/felix-osgi-foundation
- - src-openeuler/felix-osgi-obr
- - src-openeuler/felix-shell
- - src-openeuler/findutils
- - src-openeuler/fipscheck
- - src-openeuler/flex
- - src-openeuler/fpaste
- - src-openeuler/fusesource-pom
- - src-openeuler/future
- - src-openeuler/gamin
- - src-openeuler/gawk
- - src-openeuler/gc
- - src-openeuler/gemini-blueprint
- - src-openeuler/gettext
- - src-openeuler/ghostscript
- - src-openeuler/git
- - src-openeuler/glassfish-fastinfoset
- - src-openeuler/glassfish-master-pom
- - src-openeuler/glassfish-websocket-api
- - src-openeuler/glassfish-ejb-api
- - src-openeuler/gmime30
- - src-openeuler/gnulib
- - src-openeuler/gobject-introspection
- - src-openeuler/gpgme
- - src-openeuler/gphoto2
- - src-openeuler/grep
- - src-openeuler/groff
- - src-openeuler/grubby
- - src-openeuler/gssproxy
- - src-openeuler/gupnp-av
- - src-openeuler/gzip
- - src-openeuler/haveged
- - src-openeuler/hiredis
- - src-openeuler/hppc
- - src-openeuler/htrace
- - src-openeuler/ima-evm-utils
- - src-openeuler/iso-codes
- - src-openeuler/isomd5sum
- - src-openeuler/isorelax
- - src-openeuler/istack-commons
- - src-openeuler/ivtv-firmware
- - src-openeuler/jansson
- - src-openeuler/jdeparser1
- - src-openeuler/jdom
- - src-openeuler/jeromq
- - src-openeuler/jose
- - src-openeuler/jq
- - src-openeuler/json-c
- - src-openeuler/Judy
- - src-openeuler/kdump-anaconda-addon
- - src-openeuler/kexec-tools
- - src-openeuler/kpatch
- - src-openeuler/krb5
- - src-openeuler/ksh
- - src-openeuler/kyua
- - src-openeuler/langtable
- - src-openeuler/lasso
- - src-openeuler/latrace
- - src-openeuler/leatherman
- - src-openeuler/leptonica
- - src-openeuler/less
- - src-openeuler/libbytesize
- - src-openeuler/libcap-ng
- - src-openeuler/libclc
- - src-openeuler/libcomps
- - src-openeuler/libconfig
- - src-openeuler/libcroco
- - src-openeuler/libdaemon
- - src-openeuler/libdatrie
- - src-openeuler/libdb
- - src-openeuler/libdbi
- - src-openeuler/libecap
- - src-openeuler/libedit
- - src-openeuler/libestr
- - src-openeuler/libev
- - src-openeuler/libevent
- - src-openeuler/libfastjson
- - src-openeuler/libffi
- - src-openeuler/libgdiplus
- - src-openeuler/libgexiv2
- - src-openeuler/libgit2
- - src-openeuler/libgit2-glib
- - src-openeuler/libgsf
- - src-openeuler/libIDL
- - src-openeuler/libidn
- - src-openeuler/libidn2
- - src-openeuler/libkcapi
- - src-openeuler/libksba
- - src-openeuler/libmaxminddb
- - src-openeuler/libmetalink
- - src-openeuler/libmnl
- - src-openeuler/libmodulemd
- - src-openeuler/libmspack
- - src-openeuler/libnetfilter_cthelper
- - src-openeuler/libnetfilter_cttimeout
- - src-openeuler/libnfs
- - src-openeuler/libnftnl
- - src-openeuler/libnma
- - src-openeuler/libnsl2
- - src-openeuler/liboauth
- - src-openeuler/libomxil-bellagio
- - src-openeuler/libosinfo
- - src-openeuler/libpaper
- - src-openeuler/libpipeline
- - src-openeuler/libplist
- - src-openeuler/libpsl
- - src-openeuler/libquvi
- - src-openeuler/libquvi-scripts
- - src-openeuler/librepo
- - src-openeuler/libreport
- - src-openeuler/libsass
- - src-openeuler/libseccomp
- - src-openeuler/libsecret
- - src-openeuler/libsigsegv
- - src-openeuler/libtar
- - src-openeuler/libtasn1
- - src-openeuler/libtdb
- - src-openeuler/libteam
- - src-openeuler/libtheora
- - src-openeuler/libtomcrypt
- - src-openeuler/libtommath
- - src-openeuler/libtool
- - src-openeuler/libunistring
- - src-openeuler/libunwind
- - src-openeuler/libuser
- - src-openeuler/libutempter
- - src-openeuler/libverto
- - src-openeuler/libvorbis
- - src-openeuler/libxcrypt
- - src-openeuler/libxml2
- - src-openeuler/libxslt
- - src-openeuler/libyaml
- - src-openeuler/lmdb
- - src-openeuler/logrotate
- - src-openeuler/lshw
- - src-openeuler/lsof
- - src-openeuler/lua
- - src-openeuler/luajit
- - src-openeuler/lua-expat
- - src-openeuler/lua-json
- - src-openeuler/lua-lpeg
- - src-openeuler/lucene4
- - src-openeuler/lutok
- - src-openeuler/lz4
- - src-openeuler/lzo
- - src-openeuler/lzop
- - src-openeuler/m4
- - src-openeuler/mailcap
- - src-openeuler/make
- - src-openeuler/man-db
- - src-openeuler/man-pages
- - src-openeuler/maven-release
- - src-openeuler/maven-replacer
- - src-openeuler/maven-shared
- - src-openeuler/maven-verifier-plugin
- - src-openeuler/mcpp
- - src-openeuler/mecab
- - src-openeuler/mercurial
- - src-openeuler/mlocate
- - src-openeuler/mod_security_crs
- - src-openeuler/mongodb
- - src-openeuler/mongo-java-driver2
- - src-openeuler/mono
- - src-openeuler/morfologik-stemming
- - src-openeuler/mtdev
- - src-openeuler/multithreadedtc
- - src-openeuler/munge-maven-plugin
- - src-openeuler/mvel
- - src-openeuler/mysema-commons-lang
- - src-openeuler/nailgun
- - src-openeuler/ncompress
- - src-openeuler/nettle
- - src-openeuler/nss_nis
- - src-openeuler/nss-pam-ldapd
- - src-openeuler/ocl-icd
- - src-openeuler/oddjob
- - src-openeuler/openEuler-indexhtml
- - src-openeuler/openEuler-logos
- - src-openeuler/openEuler-release
- - src-openeuler/openEuler-repos
- - src-openeuler/openEuler-rpm-config
- - src-openeuler/opensc
- - src-openeuler/orc
- - src-openeuler/osinfo-db
- - src-openeuler/osinfo-db-tools
- - src-openeuler/os-prober
- - src-openeuler/ostree
- - src-openeuler/p11-kit
- - src-openeuler/paranamer
- - src-openeuler/passwd
- - src-openeuler/patch
- - src-openeuler/pcre
- - src-openeuler/pcre2
- - src-openeuler/perl
- - src-openeuler/perl-Digest
- - src-openeuler/perl-ExtUtils-MakeMaker
- - src-openeuler/perl-Mozilla-CA
- - src-openeuler/perl-Storable
- - src-openeuler/pigz
- - src-openeuler/pkgconf
- - src-openeuler/plexus-component-factories-pom
- - src-openeuler/polkit
- - src-openeuler/polkit-gnome
- - src-openeuler/polkit-pkla-compat
- - src-openeuler/popt
- - src-openeuler/powermock
- - src-openeuler/powertop
- - src-openeuler/publicsuffix-list
- - src-openeuler/pygobject3
- - src-openeuler/pykickstart
- - src-openeuler/pyliblzma
- - src-openeuler/pyparsing
- - src-openeuler/pyparted
- - src-openeuler/pyserial
- - src-openeuler/python3
- - src-openeuler/python3-mallard-ducktype
- - src-openeuler/python-asn1crypto
- - src-openeuler/python-backports
- - src-openeuler/python-beaker
- - src-openeuler/python-cffi
- - src-openeuler/python-chardet
- - src-openeuler/python-cheetah
- - src-openeuler/python-commonmark
- - src-openeuler/python-cpio
- - src-openeuler/python-crypto
- - src-openeuler/python-cryptography
- - src-openeuler/python-dateutil
- - src-openeuler/python-decorator
- - src-openeuler/python-docopt
- - src-openeuler/python-enum34
- - src-openeuler/python-google-apputils
- - src-openeuler/python-gssapi
- - src-openeuler/python-iniparse
- - src-openeuler/python-inotify
- - src-openeuler/python-jinja2
- - src-openeuler/python-jsonpatch
- - src-openeuler/python-jsonpointer
- - src-openeuler/python-jsonschema
- - src-openeuler/python-jwt
- - src-openeuler/python-kmod
- - src-openeuler/python-lhsmdu
- - src-openeuler/python-linux-procfs
- - src-openeuler/python-lxml
- - src-openeuler/python-mako
- - src-openeuler/python-markupsafe
- - src-openeuler/python-meh
- - src-openeuler/python-mox
- - src-openeuler/python-oauthlib
- - src-openeuler/python-ordered-set
- - src-openeuler/python-pid
- - src-openeuler/python-pip
- - src-openeuler/python-ply
- - src-openeuler/python-pocketlint
- - src-openeuler/python-polib
- - src-openeuler/python-prettytable
- - src-openeuler/python-productmd
- - src-openeuler/python-pyaml
- - src-openeuler/python-pycparser
- - src-openeuler/python-pycurl
- - src-openeuler/python-pydbus
- - src-openeuler/python-pysocks
- - src-openeuler/python-pytest-cov
- - src-openeuler/python-pytest-expect
- - src-openeuler/python-pytest-fixture-config
- - src-openeuler/python-pytest-mock
- - src-openeuler/python-pytest-virtualenv
- - src-openeuler/python-pyudev
- - src-openeuler/python-qrcode
- - src-openeuler/python-recommonmark
- - src-openeuler/python-redis
- - src-openeuler/python-repoze-lru
- - src-openeuler/python-requests-file
- - src-openeuler/python-rpm-generators
- - src-openeuler/python-schedutils
- - src-openeuler/python-setuptools
- - src-openeuler/python-simpleline
- - src-openeuler/python-six
- - src-openeuler/python-slip
- - src-openeuler/python-sphinxcontrib-spelling
- - src-openeuler/python-systemd
- - src-openeuler/python-tempita
- - src-openeuler/python-u-msgpack-python
- - src-openeuler/python-webencodings
- - src-openeuler/pyxattr
- - src-openeuler/qdox
- - src-openeuler/qpid-proton
- - src-openeuler/randomizedtesting
- - src-openeuler/rapidjson
- - src-openeuler/rarian
- - src-openeuler/rasdaemon
- - src-openeuler/readline
- - src-openeuler/realmd
- - src-openeuler/recode
- - src-openeuler/replacer
- - src-openeuler/rmic-maven-plugin
- - src-openeuler/rootfiles
- - src-openeuler/rpm
- - src-openeuler/rpmrebuild
- - src-openeuler/rsync
- - src-openeuler/rsyslog
- - src-openeuler/screen
- - src-openeuler/sed
- - src-openeuler/setools
- - src-openeuler/setroubleshoot-plugins
- - src-openeuler/setup
- - src-openeuler/sgabios
- - src-openeuler/sgpio
- - src-openeuler/shadow
- - src-openeuler/sharutils
- - src-openeuler/shim
- - src-openeuler/si-units
- - src-openeuler/slang
- - src-openeuler/snakeyaml
- - src-openeuler/snappy
- - src-openeuler/snappy-java
- - src-openeuler/sombok
- - src-openeuler/speex
- - src-openeuler/speexdsp
- - src-openeuler/sscg
- - src-openeuler/sssd
- - src-openeuler/star
- - src-openeuler/startup-notification
- - src-openeuler/stringtemplate4
- - src-openeuler/subversion
- - src-openeuler/sudo
- - src-openeuler/sushi
- - src-openeuler/symlinks
- - src-openeuler/sysstat
- - src-openeuler/systemd
- - src-openeuler/tar
- - src-openeuler/tcl
- - src-openeuler/tcllib
- - src-openeuler/tcsh
- - src-openeuler/TeXamator
- - src-openeuler/thrift
- - src-openeuler/time
- - src-openeuler/timedatex
- - src-openeuler/tmpwatch
- - src-openeuler/tng
- - src-openeuler/tokyocabinet
- - src-openeuler/tomcatjss
- - src-openeuler/totem
- - src-openeuler/totem-pl-parser
- - src-openeuler/tracker
- - src-openeuler/tracker-miners
- - src-openeuler/trousers
- - src-openeuler/tuscany-sdo-java
- - src-openeuler/umockdev
- - src-openeuler/uname-build-checks
- - src-openeuler/unicode-emoji
- - src-openeuler/unique
- - src-openeuler/unit-api
- - src-openeuler/univocity-parsers
- - src-openeuler/unzip
- - src-openeuler/uom-lib
- - src-openeuler/uom-parent
- - src-openeuler/uom-systems
- - src-openeuler/usermode
- - src-openeuler/ustr
- - src-openeuler/utf8proc
- - src-openeuler/uthash
- - src-openeuler/util-linux
- - src-openeuler/vboot-utils
- - src-openeuler/vim
- - src-openeuler/volume_key
- - src-openeuler/vulkan-headers
- - src-openeuler/vulkan-loader
- - src-openeuler/which
- - src-openeuler/words
- - src-openeuler/wpa_supplicant
- - src-openeuler/xalan-j2
- - src-openeuler/xmlsec1
- - src-openeuler/xerces-j2
- - src-openeuler/xmlstarlet
- - src-openeuler/xmlto
- - src-openeuler/xml-commons-resolver
- - src-openeuler/xz
- - src-openeuler/yajl
- - src-openeuler/yaml-cpp
- - src-openeuler/yaml-cpp03
- - src-openeuler/yasm
- - src-openeuler/zip
- - src-openeuler/zlib
- - src-openeuler/zopfli
- - src-openeuler/zsh
- - src-openeuler/zstd
- - src-openeuler/zziplib
-- name: Container
- repositories:
- - openeuler/kata_integration
- - src-openeuler/kata-micro-kernel
- - src-openeuler/jboss-parent
- - src-openeuler/clibcni
- - src-openeuler/docker-client-java
- - src-openeuler/runc
- - src-openeuler/virt-what
- - src-openeuler/containerd
- - src-openeuler/iSulad-img
- - src-openeuler/lcr
- - src-openeuler/protobuf
- - src-openeuler/iSulad
- - src-openeuler/podman
- - src-openeuler/skopeo
- - src-openeuler/kata-shim
- - src-openeuler/kata_integration
- - src-openeuler/busybox
- - src-openeuler/container-selinux
- - src-openeuler/lxc
- - src-openeuler/docker
- - src-openeuler/kata-runtime
- - src-openeuler/libevhtp
- - src-openeuler/kata-proxy
- - src-openeuler/lxcfs
- - src-openeuler/containernetworking-plugins
- - src-openeuler/libcgroup
- - src-openeuler/kata-agent
- - src-openeuler/libnetwork
- - src-openeuler/kubernetes
- - src-openeuler/docker-compose
-- name: Compiler
- repositories:
- - src-openeuler/gcc
- - src-openeuler/llvm
- - src-openeuler/clang
- - src-openeuler/compiler-rt
- - src-openeuler/jtreg
- - src-openeuler/openjdk-1.8.0
- - src-openeuler/openjdk-11
- - src-openeuler/openjdk-latest
- - src-openeuler/openjfx8
- - src-openeuler/openjfx11
- - src-openeuler/icedtea-web
- - src-openeuler/rust
- - openeuler/bishengjdk-8
- - openeuler/bishengjdk-11
-- name: Storage
- repositories:
- - src-openeuler/system-storage-manager
- - src-openeuler/gom
- - src-openeuler/parted
- - src-openeuler/iprutils
- - src-openeuler/ndctl
- - src-openeuler/fuse
- - src-openeuler/tree
- - src-openeuler/sg3_utils
- - src-openeuler/mdadm
- - src-openeuler/python-configobj
- - src-openeuler/btrfs-progs
- - src-openeuler/python-rtslib
- - src-openeuler/ccid
- - src-openeuler/attr
- - src-openeuler/smartmontools
- - src-openeuler/luksmeta
- - src-openeuler/nfs4-acl-tools
- - src-openeuler/cryptsetup
- - src-openeuler/udisks2
- - src-openeuler/mtools
- - src-openeuler/libblockdev
- - src-openeuler/libldm
- - src-openeuler/sdparm
- - src-openeuler/perl-DBD-SQLite
- - src-openeuler/libpciaccess
- - src-openeuler/iotop
- - src-openeuler/xfsdump
- - src-openeuler/open-iscsi
- - src-openeuler/libaio
- - src-openeuler/libusbmuxd
- - src-openeuler/file
- - src-openeuler/e2fsprogs
- - src-openeuler/gdbm
- - src-openeuler/thin-provisioning-tools
- - src-openeuler/dosfstools
- - src-openeuler/libusbx
- - src-openeuler/mariadb
- - src-openeuler/pciutils
- - src-openeuler/blktrace
- - src-openeuler/usbredir
- - src-openeuler/lvm2
- - src-openeuler/dmraid
- - src-openeuler/libtalloc
- - src-openeuler/perl-DBD-MySQL
- - src-openeuler/quota
- - src-openeuler/mariadb-connector-c
- - src-openeuler/xfsprogs
- - src-openeuler/nfs-utils
- - src-openeuler/libtevent
- - src-openeuler/gdisk
- - src-openeuler/glusterfs
- - src-openeuler/multipath-tools
- - src-openeuler/sysfsutils
- - src-openeuler/sqlite
- - src-openeuler/smp_utils
- - src-openeuler/squashfs-tools
- - src-openeuler/libiscsi
- - src-openeuler/fxload
- - src-openeuler/libusb
- - src-openeuler/hdparm
- - src-openeuler/pcsc-lite
- - src-openeuler/filesystem
- - src-openeuler/cifs-utils
- - src-openeuler/cachefilesd
- - src-openeuler/usbutils
- - src-openeuler/lsscsi
- - src-openeuler/open-isns
- - openeuler/memory-scan
- - src-openeuler/fastdfs
- - src-openeuler/libfastcommon
- - src-openeuler/DCache
- - src-openeuler/s3fs-fuse
-- name: Desktop
- repositories:
- - src-openeuler/abattis-cantarell-fonts
- - src-openeuler/accountsservice
- - src-openeuler/adobe-mappings-cmap
- - src-openeuler/adobe-mappings-pdf
- - src-openeuler/adwaita-icon-theme
- - src-openeuler/adwaita-qt
- - src-openeuler/at-spi2-atk
- - src-openeuler/at-spi2-core
- - src-openeuler/atk
- - src-openeuler/augeas
- - src-openeuler/avahi
- - src-openeuler/bluez
- - src-openeuler/bpg-fonts
- - src-openeuler/brltty
- - src-openeuler/cairo
- - src-openeuler/cairomm
- - src-openeuler/cdparanoia
- - src-openeuler/CharLS
- - src-openeuler/cheese
- - src-openeuler/cjkuni-ukai-fonts
- - src-openeuler/clutter
- - src-openeuler/clutter-gst3
- - src-openeuler/clutter-gtk
- - src-openeuler/cockpit
- - src-openeuler/cogl
- - src-openeuler/color-filesystem
- - src-openeuler/colord
- - src-openeuler/comps-extras
- - src-openeuler/cups
- - src-openeuler/cups-pk-helper
- - src-openeuler/dconf
- - src-openeuler/dconf-editor
- - src-openeuler/desktop-file-utils
- - src-openeuler/disomaster
- - src-openeuler/emacs
- - src-openeuler/enchant
- - src-openeuler/epiphany
- - src-openeuler/evolution-data-server
- - src-openeuler/exiv2
- - src-openeuler/fltk
- - src-openeuler/fontconfig
- - src-openeuler/fontpackages
- - src-openeuler/freetype
- - src-openeuler/fribidi
- - src-openeuler/fros
- - src-openeuler/GConf2
- - src-openeuler/gcr
- - src-openeuler/gd
- - src-openeuler/gdk-pixbuf2
- - src-openeuler/gdm
- - src-openeuler/geoclue2
- - src-openeuler/geocode-glib
- - src-openeuler/giflib
- - src-openeuler/gio-qt
- - src-openeuler/gjs
- - src-openeuler/glade
- - src-openeuler/glib2
- - src-openeuler/gnome-abrt
- - src-openeuler/gnome-bluetooth
- - src-openeuler/gnome-boxes
- - src-openeuler/gnome-clocks
- - src-openeuler/gnome-contacts
- - src-openeuler/gnome-dictionary
- - src-openeuler/gnome-doc-utils
- - src-openeuler/gnome-icon-theme
- - src-openeuler/gnome-initial-setup
- - src-openeuler/gnome-keyring
- - src-openeuler/gnome-menus
- - src-openeuler/gnome-screenshot
- - src-openeuler/gnome-session
- - src-openeuler/gnome-settings-daemon
- - src-openeuler/gnome-shell
- - src-openeuler/gnome-shell-extensions
- - src-openeuler/gnome-software
- - src-openeuler/gnome-system-monitor
- - src-openeuler/gnome-terminal
- - src-openeuler/gnu-free-fonts
- - src-openeuler/google-croscore-fonts
- - src-openeuler/google-droid-fonts
- - src-openeuler/google-noto-cjk-fonts
- - src-openeuler/google-noto-emoji-fonts
- - src-openeuler/gpm
- - src-openeuler/graphite2
- - src-openeuler/graphviz
- - src-openeuler/grilo
- - src-openeuler/gsettings-desktop-schemas
- - src-openeuler/gsm
- - src-openeuler/gstreamer1
- - src-openeuler/gstreamer1-plugins-base
- - src-openeuler/gtk2
- - src-openeuler/gtk3
- - src-openeuler/gubbi-fonts
- - src-openeuler/guile
- - src-openeuler/gv
- - src-openeuler/gvfs
- - src-openeuler/harfbuzz
- - src-openeuler/hicolor-icon-theme
- - src-openeuler/hunspell
- - src-openeuler/hunspell-en
- - src-openeuler/hyperscan
- - src-openeuler/ibus
- - src-openeuler/ibus-libzhuyin
- - src-openeuler/icu
- - src-openeuler/imake
- - src-openeuler/jbig2dec
- - src-openeuler/jbigkit
- - src-openeuler/jomolhari-fonts
- - src-openeuler/json-glib
- - src-openeuler/jxrlib
- - src-openeuler/kacst-fonts
- - src-openeuler/kbd
- - src-openeuler/kde-settings
- - src-openeuler/keybinder3
- - src-openeuler/kurdit-unikurd-web-fonts
- - src-openeuler/lato-fonts
- - src-openeuler/lcms2
- - src-openeuler/libappindicator
- - src-openeuler/libarchive
- - src-openeuler/libart_lgpl
- - src-openeuler/libasyncns
- - src-openeuler/libatasmart
- - src-openeuler/libbluray
- - src-openeuler/libbonobo
- - src-openeuler/libbonoboui
- - src-openeuler/libcacard
- - src-openeuler/libcanberra
- - src-openeuler/libcdio
- - src-openeuler/libcdio-paranoia
- - src-openeuler/libdazzle
- - src-openeuler/libdmx
- - src-openeuler/libdrm
- - src-openeuler/libepoxy
- - src-openeuler/libexif
- - src-openeuler/libfontenc
- - src-openeuler/libgdata
- - src-openeuler/libgee
- - src-openeuler/libglade2
- - src-openeuler/libglvnd
- - src-openeuler/libgpg-error
- - src-openeuler/libgtop2
- - src-openeuler/libgudev
- - src-openeuler/libgusb
- - src-openeuler/libgweather
- - src-openeuler/libgxps
- - src-openeuler/libical
- - src-openeuler/libICE
- - src-openeuler/libimobiledevice
- - src-openeuler/libiptcdata
- - src-openeuler/libisal
- - src-openeuler/libjpeg-turbo
- - src-openeuler/libldb
- - src-openeuler/libmatchbox
- - src-openeuler/libmediaart
- - src-openeuler/libmediainfo
- - src-openeuler/libmng
- - src-openeuler/libnotify
- - src-openeuler/libpng
- - src-openeuler/librsvg2
- - src-openeuler/libsexy
- - src-openeuler/libSM
- - src-openeuler/libsoup
- - src-openeuler/libtiff
- - src-openeuler/libtimezonemap
- - src-openeuler/libwebp
- - src-openeuler/libwnck3
- - src-openeuler/libX11
- - src-openeuler/libx86emu
- - src-openeuler/libXau
- - src-openeuler/libXaw
- - src-openeuler/libxcb
- - src-openeuler/libXcomposite
- - src-openeuler/libXcursor
- - src-openeuler/libXdamage
- - src-openeuler/libXdmcp
- - src-openeuler/libXext
- - src-openeuler/libXfixes
- - src-openeuler/libXfont2
- - src-openeuler/libXft
- - src-openeuler/libXi
- - src-openeuler/libXinerama
- - src-openeuler/libxkbcommon
- - src-openeuler/libxkbfile
- - src-openeuler/libxklavier
- - src-openeuler/libXmu
- - src-openeuler/libXpm
- - src-openeuler/libXrandr
- - src-openeuler/libXrender
- - src-openeuler/libXres
- - src-openeuler/libxshmfence
- - src-openeuler/libXt
- - src-openeuler/libXtst
- - src-openeuler/libXv
- - src-openeuler/libXvMC
- - src-openeuler/libXxf86dga
- - src-openeuler/libXxf86misc
- - src-openeuler/libXxf86vm
- - src-openeuler/libzen
- - src-openeuler/lxsession
- - src-openeuler/madan-fonts
- - src-openeuler/mailx
- - src-openeuler/mesa
- - src-openeuler/mesa-libGLU
- - src-openeuler/metacity
- - src-openeuler/mozilla-filesystem
- - src-openeuler/mozjs52
- - src-openeuler/mozjs60
- - src-openeuler/mozjs68
- - src-openeuler/nafees-web-naskh-fonts
- - src-openeuler/navilu-fonts
- - src-openeuler/ncurses
- - src-openeuler/newt
- - src-openeuler/openbox
- - src-openeuler/openjpeg
- - src-openeuler/openjpeg2
- - src-openeuler/orca
- - src-openeuler/PackageKit
- - src-openeuler/PackageKit-Qt
- - src-openeuler/paktype-naqsh-fonts
- - src-openeuler/paktype-naskh-basic-fonts
- - src-openeuler/paktype-tehreer-fonts
- - src-openeuler/pango
- - src-openeuler/paratype-pt-sans-fonts
- - src-openeuler/pinentry
- - src-openeuler/pipewire
- - src-openeuler/pixman
- - src-openeuler/plymouth
- - src-openeuler/poppler
- - src-openeuler/poppler-data
- - src-openeuler/pyatspi
- - src-openeuler/pycairo
- - src-openeuler/python-coverage
- - src-openeuler/python-dmidecode
- - src-openeuler/python-ethtool
- - src-openeuler/pytz
- - src-openeuler/qrencode
- - src-openeuler/qt-settings
- - src-openeuler/qt5
- - src-openeuler/rest
- - src-openeuler/rtkit
- - src-openeuler/saab-fonts
- - src-openeuler/samyak-fonts
- - src-openeuler/satyr
- - src-openeuler/sbc
- - src-openeuler/seahorse
- - src-openeuler/sendmail
- - src-openeuler/setserial
- - src-openeuler/sgml-common
- - src-openeuler/shared-mime-info
- - src-openeuler/sil-nuosu-fonts
- - src-openeuler/sil-padauk-fonts
- - src-openeuler/sound-theme-freedesktop
- - src-openeuler/source-highlight
- - src-openeuler/spice
- - src-openeuler/spice-gtk
- - src-openeuler/spice-vdagent
- - src-openeuler/stix-fonts
- - src-openeuler/switcheroo-control
- - src-openeuler/sysprof
- - src-openeuler/taglib
- - src-openeuler/telepathy-filesystem
- - src-openeuler/telepathy-glib
- - src-openeuler/telepathy-logger
- - src-openeuler/texinfo
- - src-openeuler/thai-scalable-fonts
- - src-openeuler/tibetan-machine-uni-fonts
- - src-openeuler/tigervnc
- - src-openeuler/tk
- - src-openeuler/tmux
- - src-openeuler/urw-base35-fonts
- - src-openeuler/vino
- - src-openeuler/wayland
- - src-openeuler/webkit2gtk3
- - src-openeuler/webrtc-audio-processing
- - src-openeuler/woff2
- - src-openeuler/wqy-microhei-fonts
- - src-openeuler/wqy-zenhei-fonts
- - src-openeuler/wxGTK3
- - src-openeuler/x265
- - src-openeuler/x3270
- - src-openeuler/Xaw3d
- - src-openeuler/xcb-util
- - src-openeuler/xdg-desktop-portal
- - src-openeuler/xdg-user-dirs
- - src-openeuler/xdg-user-dirs-gtk
- - src-openeuler/xdg-utils
- - src-openeuler/xkeyboard-config
- - src-openeuler/xorg-x11-apps
- - src-openeuler/xorg-x11-drivers
- - src-openeuler/xorg-x11-drv-ati
- - src-openeuler/xorg-x11-drv-dummy
- - src-openeuler/xorg-x11-drv-evdev
- - src-openeuler/xorg-x11-drv-fbdev
- - src-openeuler/xorg-x11-drv-intel
- - src-openeuler/xorg-x11-drv-libinput
- - src-openeuler/xorg-x11-drv-nouveau
- - src-openeuler/xorg-x11-drv-qxl
- - src-openeuler/xorg-x11-drv-v4l
- - src-openeuler/xorg-x11-drv-vesa
- - src-openeuler/xorg-x11-drv-vmware
- - src-openeuler/xorg-x11-drv-wacom
- - src-openeuler/xorg-x11-font-utils
- - src-openeuler/xorg-x11-fonts
- - src-openeuler/xorg-x11-server
- - src-openeuler/xorg-x11-server-utils
- - src-openeuler/xorg-x11-utils
- - src-openeuler/xorg-x11-xauth
- - src-openeuler/xorg-x11-xbitmaps
- - src-openeuler/xorg-x11-xinit
- - src-openeuler/xorg-x11-xkb-utils
- - src-openeuler/xrestop
- - src-openeuler/xterm
- - src-openeuler/xvattr
- - src-openeuler/yelp
- - src-openeuler/yelp-xsl
- - src-openeuler/yp-tools
- - src-openeuler/ypbind
- - src-openeuler/ypserv
- - src-openeuler/zenity
-- name: Computing
- repositories:
- - src-openeuler/jamm
- - src-openeuler/double-conversion
- - src-openeuler/ps_mem
- - src-openeuler/libqb
- - src-openeuler/memkind
- - src-openeuler/dyninst
- - src-openeuler/libevdev
- - src-openeuler/nspr
- - src-openeuler/libatomic_ops
- - src-openeuler/lm_sensors
- - src-openeuler/lttng-ust
- - src-openeuler/hwdata
- - src-openeuler/irqbalance
- - src-openeuler/procps-ng
- - src-openeuler/userspace-rcu
- - src-openeuler/linux-firmware
- - src-openeuler/mpfr
- - src-openeuler/libinput
- - src-openeuler/boost
- - src-openeuler/psmisc
- - src-openeuler/numad
- - src-openeuler/libthai
- - src-openeuler/kmod
- - src-openeuler/lockdev
- - src-openeuler/hwinfo
- - src-openeuler/gdb
- - src-openeuler/libipt
- - src-openeuler/libsamplerate
- - src-openeuler/gperftools
- - src-openeuler/libogg
- - src-openeuler/pulseaudio
- - src-openeuler/libsndfile
- - src-openeuler/tzdata
- - src-openeuler/flac
- - src-openeuler/upower
- - src-openeuler/alsa-lib
- - src-openeuler/gmp
- - src-openeuler/alsa-firmware
- - src-openeuler/numactl
- - src-openeuler/glibc
- - src-openeuler/libijs
- - src-openeuler/libmpc
- - src-openeuler/npth
- - src-openeuler/acpid
- - src-openeuler/ORBit2
- - src-openeuler/libwacom
- - src-openeuler/i2c-tools
- - src-openeuler/strace
- - src-openeuler/shapelib
- - src-openeuler/tuned
- - src-openeuler/systemtap
- - src-openeuler/alsa-tools
- - src-openeuler/libvisual
- - src-openeuler/dmidecode
- - src-openeuler/opus
- - src-openeuler/libhugetlbfs
-- name: sig-Community
- repositories:
- - openeuler/community
- - openeuler/blog
-- name: A-Tune
- repositories:
- - openeuler/A-Tune
- - openeuler/prefetch_tuning
- - src-openeuler/A-Tune
- - src-openeuler/prefetch_tuning
- - openeuler/wisdom-advisor
- - src-openeuler/wisdom-advisor
-- name: kae
- repositories:
- - openeuler/kae_driver
- - openeuler/libkae
- - openeuler/libwd
- - src-openeuler/kae_driver
- - src-openeuler/libkae
- - src-openeuler/libwd
-- name: iSulad
- repositories:
- - openeuler/iSulad
- - openeuler/lcr
- - openeuler/clibcni
- - openeuler/iSulad-img
- - openeuler/authz
- - openeuler/syscontainer-tools
- - openeuler/lxcfs-tools
- - openeuler/async-libfuse
- - openeuler/isula-build
- - openeuler/isula-transform
- - src-openeuler/authz
- - src-openeuler/syscontainer-tools
- - src-openeuler/lxcfs-tools
- - src-openeuler/isula-build
- - src-openeuler/isula-transform
- - src-openeuler/libwebsockets
-- name: sig-Java
- repositories:
- - openeuler/Java-Packages
- - src-openeuler/aesh
- - src-openeuler/android-json-org-java
- - src-openeuler/annotation-indexer
- - src-openeuler/ant
- - src-openeuler/ant-contrib
- - src-openeuler/antlr3
- - src-openeuler/aopalliance
- - src-openeuler/apache-commons-cli
- - src-openeuler/apache-commons-compress
- - src-openeuler/apache-commons-configuration
- - src-openeuler/apache-commons-discovery
- - src-openeuler/apache-commons-exec
- - src-openeuler/apache-commons-io
- - src-openeuler/apache-commons-jxpath
- - src-openeuler/apache-commons-lang3
- - src-openeuler/apache-commons-ognl
- - src-openeuler/apache-commons-parent
- - src-openeuler/apache-ivy
- - src-openeuler/apache-parent
- - src-openeuler/apache-resource-bundles
- - src-openeuler/apacheds
- - src-openeuler/apiguardian
- - src-openeuler/aqute-bnd
- - src-openeuler/arquillian-core
- - src-openeuler/artemis
- - src-openeuler/aspectjweaver
- - src-openeuler/atinject
- - src-openeuler/avalon-framework
- - src-openeuler/avalon-logkit
- - src-openeuler/BareBonesBrowserLaunch
- - src-openeuler/bean-validation-api
- - src-openeuler/bsh
- - src-openeuler/buildnumber-maven-plugin
- - src-openeuler/byaccj
- - src-openeuler/byteman
- - src-openeuler/c3p0
- - src-openeuler/cassandra-java-driver
- - src-openeuler/cdi-api
- - src-openeuler/classmate
- - src-openeuler/codehaus-parent
- - src-openeuler/codemodel
- - src-openeuler/cpptasks
- - src-openeuler/cxf-build-utils
- - src-openeuler/cxf-xjc-utils
- - src-openeuler/dain-snappy
- - src-openeuler/datanucleus-api-jdo
- - src-openeuler/datanucleus-core
- - src-openeuler/datanucleus-maven-parent
- - src-openeuler/datanucleus-rdbms
- - src-openeuler/dnsjava
- - src-openeuler/dom4j
- - src-openeuler/easymock
- - src-openeuler/eclipse-cdt
- - src-openeuler/eclipse-ecf
- - src-openeuler/eclipse-egit
- - src-openeuler/eclipse-emf
- - src-openeuler/eclipse-gef
- - src-openeuler/eclipse-launchbar
- - src-openeuler/eclipse-license
- - src-openeuler/eclipse-linuxtools
- - src-openeuler/eclipse-m2e-workspace
- - src-openeuler/eclipse-mylyn
- - src-openeuler/eclipse-photran
- - src-openeuler/eclipse-ptp
- - src-openeuler/eclipse-remote
- - src-openeuler/eclipse-subclipse
- - src-openeuler/eclipse-swtbot
- - src-openeuler/eclipse-tm-terminal
- - src-openeuler/eclipselink
- - src-openeuler/ed25519-java
- - src-openeuler/ehcache-core
- - src-openeuler/ehcache-sizeof-agent
- - src-openeuler/evo-inflector
- - src-openeuler/exec-maven-plugin
- - src-openeuler/extra166y
- - src-openeuler/felix-bundlerepository
- - src-openeuler/felix-framework
- - src-openeuler/felix-gogo-command
- - src-openeuler/felix-gogo-parent
- - src-openeuler/felix-main
- - src-openeuler/felix-osgi-obr-resolver
- - src-openeuler/felix-scr
- - src-openeuler/felix-utils
- - src-openeuler/findbugs
- - src-openeuler/findbugs-bcel
- - src-openeuler/fop
- - src-openeuler/geronimo-annotation
- - src-openeuler/geronimo-commonj
- - src-openeuler/geronimo-jaxrpc
- - src-openeuler/geronimo-jms
- - src-openeuler/geronimo-jta
- - src-openeuler/geronimo-saaj
- - src-openeuler/glassfish-el
- - src-openeuler/glassfish-gmbal
- - src-openeuler/glassfish-hk2
- - src-openeuler/glassfish-jaxrpc-api
- - src-openeuler/glassfish-jsp-api
- - src-openeuler/glassfish-management-api
- - src-openeuler/glassfish-pfl
- - src-openeuler/glassfish-servlet-api
- - src-openeuler/glassfish-toplink-essentials
- - src-openeuler/glassfish-transaction-api
- - src-openeuler/gnu-getopt
- - src-openeuler/google-guice
- - src-openeuler/gpars
- - src-openeuler/grizzly-npn
- - src-openeuler/groovy
- - src-openeuler/groovy18
- - src-openeuler/gsbase
- - src-openeuler/guava20
- - src-openeuler/hawtbuf
- - src-openeuler/hawtjni
- - src-openeuler/hessian
- - src-openeuler/hibernate
- - src-openeuler/hibernate-commons-annotations
- - src-openeuler/hibernate-jpa-2.0-api
- - src-openeuler/hibernate-jpa-2.1-api
- - src-openeuler/hibernate-search
- - src-openeuler/hibernate-validator
- - src-openeuler/hibernate3
- - src-openeuler/hibernate4
- - src-openeuler/HikariCP
- - src-openeuler/hsqldb
- - src-openeuler/httpcomponents-client
- - src-openeuler/httpcomponents-core
- - src-openeuler/httpunit
- - src-openeuler/icu4j
- - src-openeuler/idlj-maven-plugin
- - src-openeuler/infinispan
- - src-openeuler/invokebinder
- - src-openeuler/irclib
- - src-openeuler/ironjacamar
- - src-openeuler/itext
- - src-openeuler/jackcess
- - src-openeuler/jackcess-encrypt
- - src-openeuler/jackson
- - src-openeuler/jackson-databind
- - src-openeuler/jackson-dataformat-xml
- - src-openeuler/jackson-dataformats-text
- - src-openeuler/jackson-datatype-joda
- - src-openeuler/jackson-datatypes-collections
- - src-openeuler/jackson-jaxrs-providers
- - src-openeuler/jackson-modules-base
- - src-openeuler/jacoco
- - src-openeuler/jacorb
- - src-openeuler/jaf
- - src-openeuler/jakarta-commons-httpclient
- - src-openeuler/jamonapi
- - src-openeuler/jandex
- - src-openeuler/jandex-maven-plugin
- - src-openeuler/janino
- - src-openeuler/jansi
- - src-openeuler/jansi-native
- - src-openeuler/jasperreports
- - src-openeuler/jastow
- - src-openeuler/jasypt
- - src-openeuler/java-libpst
- - src-openeuler/java-oauth
- - src-openeuler/java-service-wrapper
- - src-openeuler/java-xmlbuilder
- - src-openeuler/javacc
- - src-openeuler/javapackages-tools
- - src-openeuler/javapoet
- - src-openeuler/javassist
- - src-openeuler/jaxb2-common-basics
- - src-openeuler/jaxb2-maven-plugin
- - src-openeuler/jaxen
- - src-openeuler/jberet
- - src-openeuler/jboss-batch-1.0-api
- - src-openeuler/jboss-classfilewriter
- - src-openeuler/jboss-common-beans
- - src-openeuler/jboss-concurrency-1.0-api
- - src-openeuler/jboss-connector-1.7-api
- - src-openeuler/jboss-dmr
- - src-openeuler/jboss-ejb-3.1-api
- - src-openeuler/jboss-ejb-3.2-api
- - src-openeuler/jboss-ejb-client
- - src-openeuler/jboss-ejb3-ext-api
- - src-openeuler/jboss-el-2.2-api
- - src-openeuler/jboss-el-3.0-api
- - src-openeuler/jboss-iiop-client
- - src-openeuler/jboss-integration
- - src-openeuler/jboss-interceptors-1.1-api
- - src-openeuler/jboss-interceptors-1.2-api
- - src-openeuler/jboss-invocation
- - src-openeuler/jboss-jacc-1.4-api
- - src-openeuler/jboss-jacc-1.5-api
- - src-openeuler/jboss-jaspi-1.0-api
- - src-openeuler/jboss-jaspi-1.1-api
- - src-openeuler/jboss-jaxb-2.2-api
- - src-openeuler/jboss-jaxrpc-1.1-api
- - src-openeuler/jboss-jaxws-2.2-api
- - src-openeuler/jboss-jms-1.1-api
- - src-openeuler/jboss-jsf-2.2-api
- - src-openeuler/jboss-jsp-2.2-api
- - src-openeuler/jboss-logging
- - src-openeuler/jboss-logging-tools
- - src-openeuler/jboss-logging-tools1
- - src-openeuler/jboss-logmanager
- - src-openeuler/jboss-marshalling
- - src-openeuler/jboss-metadata
- - src-openeuler/jboss-modules
- - src-openeuler/jboss-msc
- - src-openeuler/jboss-negotiation
- - src-openeuler/jboss-remote-naming
- - src-openeuler/jboss-remoting-jmx
- - src-openeuler/jboss-rmi-1.0-api
- - src-openeuler/jboss-sasl
- - src-openeuler/jboss-servlet-2.5-api
- - src-openeuler/jboss-servlet-3.0-api
- - src-openeuler/jboss-specs-parent
- - src-openeuler/jboss-threads
- - src-openeuler/jboss-transaction-1.1-api
- - src-openeuler/jboss-transaction-1.2-api
- - src-openeuler/jboss-transaction-spi
- - src-openeuler/jboss-vfs
- - src-openeuler/jboss-websocket-1.1-api
- - src-openeuler/jbossws-api
- - src-openeuler/jbossws-parent
- - src-openeuler/jcifs
- - src-openeuler/jcip-annotations
- - src-openeuler/jcommon
- - src-openeuler/jcsp
- - src-openeuler/jdbi
- - src-openeuler/jdependency
- - src-openeuler/jdiff
- - src-openeuler/jdo-api
- - src-openeuler/jdo2-api
- - src-openeuler/jdom2
- - src-openeuler/je
- - src-openeuler/jenkins-executable-war
- - src-openeuler/jenkins-xstream
- - src-openeuler/jersey
- - src-openeuler/jersey1
- - src-openeuler/jets3t
- - src-openeuler/jetty-alpn
- - src-openeuler/jetty-alpn-api
- - src-openeuler/jetty-artifact-remote-resources
- - src-openeuler/jetty-assembly-descriptors
- - src-openeuler/jetty-build-support
- - src-openeuler/jetty-distribution-remote-resources
- - src-openeuler/jetty-test-helper
- - src-openeuler/jetty-test-policy
- - src-openeuler/jetty-toolchain
- - src-openeuler/jetty-version-maven-plugin
- - src-openeuler/jetty8
- - src-openeuler/jflex
- - src-openeuler/jFormatString
- - src-openeuler/jfreechart
- - src-openeuler/jgit
- - src-openeuler/jgroups
- - src-openeuler/jibx
- - src-openeuler/jline
- - src-openeuler/jline1
- - src-openeuler/jmatio
- - src-openeuler/jmh
- - src-openeuler/jmock
- - src-openeuler/jna
- - src-openeuler/jnr-x86asm
- - src-openeuler/joda-time
- - src-openeuler/johnzon
- - src-openeuler/json-path
- - src-openeuler/json-smart
- - src-openeuler/jsonic
- - src-openeuler/jsoup
- - src-openeuler/jspc
- - src-openeuler/jsr-305
- - src-openeuler/jsr-311
- - src-openeuler/jtidy
- - src-openeuler/jtoaster
- - src-openeuler/jts
- - src-openeuler/jul-to-slf4j-stub
- - src-openeuler/junit-addons
- - src-openeuler/junitperf
- - src-openeuler/juniversalchardet
- - src-openeuler/jvnet-parent
- - src-openeuler/jwnl
- - src-openeuler/jython
- - src-openeuler/kxml
- - src-openeuler/language-detector
- - src-openeuler/ldaptive
- - src-openeuler/lettuce
- - src-openeuler/leveldb-java
- - src-openeuler/leveldbjni
- - src-openeuler/lightcouch
- - src-openeuler/log4j
- - src-openeuler/log4j-jboss-logmanager
- - src-openeuler/lucene3
- - src-openeuler/lz4-java
- - src-openeuler/lzma-java
- - src-openeuler/maven
- - src-openeuler/maven-antrun-plugin
- - src-openeuler/maven-archiver
- - src-openeuler/maven-artifact-resolver
- - src-openeuler/maven-artifact-transfer
- - src-openeuler/maven-assembly-plugin
- - src-openeuler/maven-checkstyle-plugin
- - src-openeuler/maven-common-artifact-filters
- - src-openeuler/maven-compiler-plugin
- - src-openeuler/maven-dependency-analyzer
- - src-openeuler/maven-dependency-plugin
- - src-openeuler/maven-dependency-tree
- - src-openeuler/maven-doxia
- - src-openeuler/maven-doxia-sitetools
- - src-openeuler/maven-eclipse-plugin
- - src-openeuler/maven-enforcer
- - src-openeuler/maven-file-management
- - src-openeuler/maven-filtering
- - src-openeuler/maven-gpg-plugin
- - src-openeuler/maven-idea-plugin
- - src-openeuler/maven-injection-plugin
- - src-openeuler/maven-invoker
- - src-openeuler/maven-invoker-plugin
- - src-openeuler/maven-jar-plugin
- - src-openeuler/maven-jarsigner-plugin
- - src-openeuler/maven-javadoc-plugin
- - src-openeuler/maven-jaxb2-plugin
- - src-openeuler/maven-license-plugin
- - src-openeuler/maven-local
- - src-openeuler/maven-mapping
- - src-openeuler/maven-native
- - src-openeuler/maven-parent
- - src-openeuler/maven-plugin-build-helper
- - src-openeuler/maven-plugin-bundle
- - src-openeuler/maven-plugin-testing
- - src-openeuler/maven-plugin-tools
- - src-openeuler/maven-processor-plugin
- - src-openeuler/maven-remote-resources-plugin
- - src-openeuler/maven-reporting-api
- - src-openeuler/maven-reporting-exec
- - src-openeuler/maven-reporting-impl
- - src-openeuler/maven-resolver
- - src-openeuler/maven-resources-plugin
- - src-openeuler/maven-script-interpreter
- - src-openeuler/maven-shade-plugin
- - src-openeuler/maven-shared-incremental
- - src-openeuler/maven-shared-io
- - src-openeuler/maven-shared-jar
- - src-openeuler/maven-shared-jarsigner
- - src-openeuler/maven-shared-utils
- - src-openeuler/maven-site-plugin
- - src-openeuler/maven-source-plugin
- - src-openeuler/maven-surefire
- - src-openeuler/maven-verifier
- - src-openeuler/maven-wagon
- - src-openeuler/maven-war-plugin
- - src-openeuler/maven2
- - src-openeuler/mavibot
- - src-openeuler/mchange-commons
- - src-openeuler/memoryfilesystem
- - src-openeuler/metainf-services
- - src-openeuler/metrics
- - src-openeuler/mimepull
- - src-openeuler/mojarra
- - src-openeuler/mongo-java-driver
- - src-openeuler/multiverse
- - src-openeuler/mustache-java
- - src-openeuler/mx4j
- - src-openeuler/narayana
- - src-openeuler/native-platform
- - src-openeuler/netty-tcnative
- - src-openeuler/netty3
- - src-openeuler/noggit
- - src-openeuler/objectweb-pom
- - src-openeuler/objenesis
- - src-openeuler/ohc
- - src-openeuler/openjpa
- - src-openeuler/openwebbeans
- - src-openeuler/os-maven-plugin
- - src-openeuler/parboiled
- - src-openeuler/pdf-renderer
- - src-openeuler/pdfbox
- - src-openeuler/pegdown
- - src-openeuler/picketbox
- - src-openeuler/picketbox-commons
- - src-openeuler/picketbox-xacml
- - src-openeuler/plexus-archiver
- - src-openeuler/plexus-build-api
- - src-openeuler/plexus-cipher
- - src-openeuler/plexus-classworlds
- - src-openeuler/plexus-cli
- - src-openeuler/plexus-compiler
- - src-openeuler/plexus-component-api
- - src-openeuler/plexus-components-pom
- - src-openeuler/plexus-containers
- - src-openeuler/plexus-i18n
- - src-openeuler/plexus-interactivity
- - src-openeuler/plexus-interpolation
- - src-openeuler/plexus-io
- - src-openeuler/plexus-languages
- - src-openeuler/plexus-pom
- - src-openeuler/plexus-resources
- - src-openeuler/plexus-sec-dispatcher
- - src-openeuler/plexus-utils
- - src-openeuler/plexus-velocity
- - src-openeuler/postgresql-jdbc
- - src-openeuler/proguard
- - src-openeuler/protostream
- - src-openeuler/proxool
- - src-openeuler/proxytoys
- - src-openeuler/qpid-proton-java
- - src-openeuler/quartz
- - src-openeuler/querydsl3
- - src-openeuler/rabbitmq-java-client
- - src-openeuler/reflections
- - src-openeuler/remotetea
- - src-openeuler/resteasy
- - src-openeuler/rhino
- - src-openeuler/rhq-plugin-annotations
- - src-openeuler/robust-http-client
- - src-openeuler/rome
- - src-openeuler/rxjava
- - src-openeuler/rxtx
- - src-openeuler/sac
- - src-openeuler/sat4j
- - src-openeuler/saxpath
- - src-openeuler/scala
- - src-openeuler/scannotation
- - src-openeuler/sequence-library
- - src-openeuler/serp
- - src-openeuler/sezpoz
- - src-openeuler/shibboleth-java-parent-v3
- - src-openeuler/shibboleth-java-support
- - src-openeuler/shrinkwrap
- - src-openeuler/shrinkwrap-descriptors
- - src-openeuler/shrinkwrap-resolver
- - src-openeuler/sigar
- - src-openeuler/signpost-core
- - src-openeuler/simple
- - src-openeuler/simple-xml
- - src-openeuler/sisu
- - src-openeuler/sisu-mojos
- - src-openeuler/slf4j-jboss-logmanager
- - src-openeuler/snowball-java
- - src-openeuler/sonatype-oss-parent
- - src-openeuler/sonatype-plugins-parent
- - src-openeuler/spatial4j
- - src-openeuler/spring-ldap
- - src-openeuler/springframework
- - src-openeuler/springframework-amqp
- - src-openeuler/springframework-batch
- - src-openeuler/springframework-data-commons
- - src-openeuler/springframework-data-mongodb
- - src-openeuler/springframework-data-redis
- - src-openeuler/springframework-hateoas
- - src-openeuler/springframework-plugin
- - src-openeuler/springframework-retry
- - src-openeuler/spymemcached
- - src-openeuler/sqljet
- - src-openeuler/sslext
- - src-openeuler/stapler
- - src-openeuler/stapler-adjunct-timeline
- - src-openeuler/staxmapper
- - src-openeuler/stream-lib
- - src-openeuler/struts
- - src-openeuler/svnkit
- - src-openeuler/swagger-core
- - src-openeuler/swt-chart
- - src-openeuler/tagsoup
- - src-openeuler/takari-archiver
- - src-openeuler/takari-incrementalbuild
- - src-openeuler/takari-lifecycle
- - src-openeuler/takari-plugin-testing
- - src-openeuler/takari-pom
- - src-openeuler/tascalate-asmx
- - src-openeuler/tascalate-javaflow
- - src-openeuler/test-interface
- - src-openeuler/thredds
- - src-openeuler/tika
- - src-openeuler/tiles
- - src-openeuler/time-api
- - src-openeuler/tomcat-taglibs-parent
- - src-openeuler/treelayout
- - src-openeuler/trilead-putty-extension
- - src-openeuler/trilead-ssh2
- - src-openeuler/txw2
- - src-openeuler/tycho
- - src-openeuler/tycho-extras
- - src-openeuler/typesafe-config
- - src-openeuler/uima-addons
- - src-openeuler/uima-parent-pom
- - src-openeuler/uimaj
- - src-openeuler/undertow
- - src-openeuler/velocity
- - src-openeuler/velocity-tools
- - src-openeuler/vorbis-java
- - src-openeuler/weld-api
- - src-openeuler/weld-core
- - src-openeuler/weld-parent
- - src-openeuler/wildfly-build-tools
- - src-openeuler/wildfly-core
- - src-openeuler/wildfly-elytron
- - src-openeuler/wildfly-security-manager
- - src-openeuler/ws-jaxme
- - src-openeuler/ws-xmlschema
- - src-openeuler/wsdl4j
- - src-openeuler/wss4j
- - src-openeuler/xapool
- - src-openeuler/xbean
- - src-openeuler/xml-maven-plugin
- - src-openeuler/xml-security
- - src-openeuler/xmlbeans
- - src-openeuler/xmlbeans-maven-plugin
- - src-openeuler/xmlenc
- - src-openeuler/xmlrpc
- - src-openeuler/xmlunit
- - src-openeuler/xmpcore
- - src-openeuler/xmvn
- - src-openeuler/xnio
- - src-openeuler/xpp3
- - src-openeuler/xsom
- - src-openeuler/xstream
- - src-openeuler/yecht
- - src-openeuler/znerd-oss-parent
- - src-openeuler/zxing
-- name: sig-ruby
- repositories:
- - src-openeuler/jruby
- - src-openeuler/ruby
- - src-openeuler/ruby-augeas
- - src-openeuler/ruby-common
- - src-openeuler/rubygem-abrt
- - src-openeuler/rubygem-actioncable
- - src-openeuler/rubygem-actionmailer
- - src-openeuler/rubygem-actionpack
- - src-openeuler/rubygem-actionview
- - src-openeuler/rubygem-activejob
- - src-openeuler/rubygem-activemodel
- - src-openeuler/rubygem-activemodel-serializers-xml
- - src-openeuler/rubygem-activerecord
- - src-openeuler/rubygem-activeresource
- - src-openeuler/rubygem-activestorage
- - src-openeuler/rubygem-activesupport
- - src-openeuler/rubygem-addressable
- - src-openeuler/rubygem-afm
- - src-openeuler/rubygem-ansi
- - src-openeuler/rubygem-arel
- - src-openeuler/rubygem-aruba
- - src-openeuler/rubygem-Ascii85
- - src-openeuler/rubygem-asciidoctor
- - src-openeuler/rubygem-atomic
- - src-openeuler/rubygem-backports
- - src-openeuler/rubygem-bacon
- - src-openeuler/rubygem-bcrypt
- - src-openeuler/rubygem-bindex
- - src-openeuler/rubygem-bootsnap
- - src-openeuler/rubygem-builder
- - src-openeuler/rubygem-bundler
- - src-openeuler/rubygem-byebug
- - src-openeuler/rubygem-capybara
- - src-openeuler/rubygem-childprocess
- - src-openeuler/rubygem-chronic
- - src-openeuler/rubygem-coderay
- - src-openeuler/rubygem-coffee-script
- - src-openeuler/rubygem-coffee-script-source
- - src-openeuler/rubygem-concurrent-ruby
- - src-openeuler/rubygem-connection_pool
- - src-openeuler/rubygem-contracts
- - src-openeuler/rubygem-crack
- - src-openeuler/rubygem-crass
- - src-openeuler/rubygem-creole
- - src-openeuler/rubygem-cucumber
- - src-openeuler/rubygem-cucumber-core
- - src-openeuler/rubygem-cucumber-expressions
- - src-openeuler/rubygem-cucumber-tag_expressions
- - src-openeuler/rubygem-cucumber-wire
- - src-openeuler/rubygem-curb
- - src-openeuler/rubygem-daemons
- - src-openeuler/rubygem-dalli
- - src-openeuler/rubygem-delorean
- - src-openeuler/rubygem-diff-lcs
- - src-openeuler/rubygem-docile
- - src-openeuler/rubygem-domain_name
- - src-openeuler/rubygem-ejs
- - src-openeuler/rubygem-erubi
- - src-openeuler/rubygem-erubis
- - src-openeuler/rubygem-ethon
- - src-openeuler/rubygem-eventmachine
- - src-openeuler/rubygem-excon
- - src-openeuler/rubygem-execjs
- - src-openeuler/rubygem-expression_parser
- - src-openeuler/rubygem-fakefs
- - src-openeuler/rubygem-faraday
- - src-openeuler/rubygem-fattr
- - src-openeuler/rubygem-ffi
- - src-openeuler/rubygem-flexmock
- - src-openeuler/rubygem-formatador
- - src-openeuler/rubygem-gem2rpm
- - src-openeuler/rubygem-gherkin
- - src-openeuler/rubygem-globalid
- - src-openeuler/rubygem-haml
- - src-openeuler/rubygem-hashdiff
- - src-openeuler/rubygem-hashery
- - src-openeuler/rubygem-http-cookie
- - src-openeuler/rubygem-httpclient
- - src-openeuler/rubygem-i18n
- - src-openeuler/rubygem-idn
- - src-openeuler/rubygem-introspection
- - src-openeuler/rubygem-jbuilder
- - src-openeuler/rubygem-jquery-rails
- - src-openeuler/rubygem-json_pure
- - src-openeuler/rubygem-launchy
- - src-openeuler/rubygem-liquid
- - src-openeuler/rubygem-listen
- - src-openeuler/rubygem-loofah
- - src-openeuler/rubygem-mail
- - src-openeuler/rubygem-marcel
- - src-openeuler/rubygem-maruku
- - src-openeuler/rubygem-memcache-client
- - src-openeuler/rubygem-metaclass
- - src-openeuler/rubygem-method_source
- - src-openeuler/rubygem-mime-types
- - src-openeuler/rubygem-mime-types-data
- - src-openeuler/rubygem-mimemagic
- - src-openeuler/rubygem-mini_magick
- - src-openeuler/rubygem-mini_mime
- - src-openeuler/rubygem-minitest
- - src-openeuler/rubygem-minitest-reporters
- - src-openeuler/rubygem-minitest4
- - src-openeuler/rubygem-mocha
- - src-openeuler/rubygem-msgpack
- - src-openeuler/rubygem-multi_json
- - src-openeuler/rubygem-multi_test
- - src-openeuler/rubygem-multipart-post
- - src-openeuler/rubygem-mustermann
- - src-openeuler/rubygem-nio4r
- - src-openeuler/rubygem-nokogiri
- - src-openeuler/rubygem-open4
- - src-openeuler/rubygem-pathspec
- - src-openeuler/rubygem-pdf-core
- - src-openeuler/rubygem-pdf-inspector
- - src-openeuler/rubygem-pdf-reader
- - src-openeuler/rubygem-pkg-config
- - src-openeuler/rubygem-power_assert
- - src-openeuler/rubygem-prawn
- - src-openeuler/rubygem-prawn-table
- - src-openeuler/rubygem-pry
- - src-openeuler/rubygem-pry-nav
- - src-openeuler/rubygem-public_suffix
- - src-openeuler/rubygem-puma
- - src-openeuler/rubygem-rack
- - src-openeuler/rubygem-rack-cache
- - src-openeuler/rubygem-rack-protection
- - src-openeuler/rubygem-rack-test
- - src-openeuler/rubygem-rails
- - src-openeuler/rubygem-rails-controller-testing
- - src-openeuler/rubygem-rails-dom-testing
- - src-openeuler/rubygem-rails-html-sanitizer
- - src-openeuler/rubygem-railties
- - src-openeuler/rubygem-rake-compiler
- - src-openeuler/rubygem-rb-inotify
- - src-openeuler/rubygem-rdiscount
- - src-openeuler/rubygem-redcarpet
- - src-openeuler/rubygem-RedCloth
- - src-openeuler/rubygem-redis
- - src-openeuler/rubygem-rgen
- - src-openeuler/rubygem-rouge
- - src-openeuler/rubygem-rspec
- - src-openeuler/rubygem-rspec-core
- - src-openeuler/rubygem-rspec-expectations
- - src-openeuler/rubygem-rspec-its
- - src-openeuler/rubygem-rspec-mocks
- - src-openeuler/rubygem-rspec-rails
- - src-openeuler/rubygem-rspec-support
- - src-openeuler/rubygem-rspec2
- - src-openeuler/rubygem-rspec2-core
- - src-openeuler/rubygem-rspec2-expectations
- - src-openeuler/rubygem-rspec2-mocks
- - src-openeuler/rubygem-ruby-progressbar
- - src-openeuler/rubygem-ruby-rc4
- - src-openeuler/rubygem-ruby-shadow
- - src-openeuler/rubygem-rubyzip
- - src-openeuler/rubygem-safe_yaml
- - src-openeuler/rubygem-sass
- - src-openeuler/rubygem-sass-rails
- - src-openeuler/rubygem-sdoc
- - src-openeuler/rubygem-selenium-webdriver
- - src-openeuler/rubygem-session
- - src-openeuler/rubygem-shindo
- - src-openeuler/rubygem-shoulda
- - src-openeuler/rubygem-shoulda-context
- - src-openeuler/rubygem-shoulda-matchers
- - src-openeuler/rubygem-simplecov
- - src-openeuler/rubygem-simplecov-html
- - src-openeuler/rubygem-sinatra
- - src-openeuler/rubygem-slop
- - src-openeuler/rubygem-spring
- - src-openeuler/rubygem-sprockets
- - src-openeuler/rubygem-sprockets-rails
- - src-openeuler/rubygem-sqlite3
- - src-openeuler/rubygem-temple
- - src-openeuler/rubygem-test_declarative
- - src-openeuler/rubygem-thin
- - src-openeuler/rubygem-thor
- - src-openeuler/rubygem-thread_order
- - src-openeuler/rubygem-thread_safe
- - src-openeuler/rubygem-tilt
- - src-openeuler/rubygem-timecop
- - src-openeuler/rubygem-ttfunk
- - src-openeuler/rubygem-turbolinks
- - src-openeuler/rubygem-turbolinks-source
- - src-openeuler/rubygem-typhoeus
- - src-openeuler/rubygem-tzinfo
- - src-openeuler/rubygem-uglifier
- - src-openeuler/rubygem-unf
- - src-openeuler/rubygem-unf_ext
- - src-openeuler/rubygem-webmock
- - src-openeuler/rubygem-websocket
- - src-openeuler/rubygem-websocket-driver
- - src-openeuler/rubygem-websocket-extensions
- - src-openeuler/rubygem-wikicloth
- - src-openeuler/rubygem-xpath
- - src-openeuler/rubygem-yard
- - src-openeuler/rubygem-ZenTest
- - src-openeuler/rubygems-ronn
-- name: sig-nodejs
- repositories:
- - src-openeuler/closure-compiler
- - src-openeuler/expresso
- - src-openeuler/js-jquery2
- - src-openeuler/js-sizzle
- - src-openeuler/lodash
- - src-openeuler/node-gyp
- - src-openeuler/nodejs
- - src-openeuler/nodejs-abbrev
- - src-openeuler/nodejs-acorn
- - src-openeuler/nodejs-ansi
- - src-openeuler/nodejs-ansi-font
- - src-openeuler/nodejs-ansi-regex
- - src-openeuler/nodejs-ansi-styles
- - src-openeuler/nodejs-are-we-there-yet
- - src-openeuler/nodejs-argparse
- - src-openeuler/nodejs-array-differ
- - src-openeuler/nodejs-array-index
- - src-openeuler/nodejs-array-union
- - src-openeuler/nodejs-array-uniq
- - src-openeuler/nodejs-arrify
- - src-openeuler/nodejs-asap
- - src-openeuler/nodejs-asn1
- - src-openeuler/nodejs-assert-plus
- - src-openeuler/nodejs-assertion-error
- - src-openeuler/nodejs-async
- - src-openeuler/nodejs-aws-sign2
- - src-openeuler/nodejs-balanced-match
- - src-openeuler/nodejs-better-assert
- - src-openeuler/nodejs-bindings
- - src-openeuler/nodejs-bl
- - src-openeuler/nodejs-block-stream
- - src-openeuler/nodejs-bluebird
- - src-openeuler/nodejs-boom
- - src-openeuler/nodejs-brace-expansion
- - src-openeuler/nodejs-buffer-equal
- - src-openeuler/nodejs-builtin-modules
- - src-openeuler/nodejs-bunker
- - src-openeuler/nodejs-burrito
- - src-openeuler/nodejs-bytes
- - src-openeuler/nodejs-caller-callsite
- - src-openeuler/nodejs-caller-path
- - src-openeuler/nodejs-callsite
- - src-openeuler/nodejs-callsites
- - src-openeuler/nodejs-caseless
- - src-openeuler/nodejs-chai
- - src-openeuler/nodejs-chalk
- - src-openeuler/nodejs-character-parser
- - src-openeuler/nodejs-charm
- - src-openeuler/nodejs-cjson
- - src-openeuler/nodejs-clean-css
- - src-openeuler/nodejs-cli-color
- - src-openeuler/nodejs-clone
- - src-openeuler/nodejs-closure-compiler
- - src-openeuler/nodejs-colors
- - src-openeuler/nodejs-combined-stream
- - src-openeuler/nodejs-commander
- - src-openeuler/nodejs-commonmark
- - src-openeuler/nodejs-concat-map
- - src-openeuler/nodejs-concat-stream
- - src-openeuler/nodejs-console-dot-log
- - src-openeuler/nodejs-constantinople
- - src-openeuler/nodejs-core-util-is
- - src-openeuler/nodejs-cryptiles
- - src-openeuler/nodejs-css
- - src-openeuler/nodejs-css-parse
- - src-openeuler/nodejs-css-stringify
- - src-openeuler/nodejs-ctype
- - src-openeuler/nodejs-d
- - src-openeuler/nodejs-dateformat
- - src-openeuler/nodejs-debug
- - src-openeuler/nodejs-deep-eql
- - src-openeuler/nodejs-deep-equal
- - src-openeuler/nodejs-deep-is
- - src-openeuler/nodejs-defence
- - src-openeuler/nodejs-defence-cli
- - src-openeuler/nodejs-define-properties
- - src-openeuler/nodejs-defined
- - src-openeuler/nodejs-delayed-stream
- - src-openeuler/nodejs-delegates
- - src-openeuler/nodejs-diff
- - src-openeuler/nodejs-difflet
- - src-openeuler/nodejs-difflib
- - src-openeuler/nodejs-docopt
- - src-openeuler/nodejs-dreamopt
- - src-openeuler/nodejs-duplexer
- - src-openeuler/nodejs-ebnf-parser
- - src-openeuler/nodejs-ejs
- - src-openeuler/nodejs-end-of-stream
- - src-openeuler/nodejs-entities
- - src-openeuler/nodejs-es-abstract
- - src-openeuler/nodejs-es-to-primitive
- - src-openeuler/nodejs-es5-ext
- - src-openeuler/nodejs-es6-iterator
- - src-openeuler/nodejs-es6-symbol
- - src-openeuler/nodejs-es6-weak-map
- - src-openeuler/nodejs-escape-string-regexp
- - src-openeuler/nodejs-escodegen
- - src-openeuler/nodejs-esprima
- - src-openeuler/nodejs-estraverse
- - src-openeuler/nodejs-esutils
- - src-openeuler/nodejs-event-emitter
- - src-openeuler/nodejs-eventemitter2
- - src-openeuler/nodejs-events-to-array
- - src-openeuler/nodejs-exit
- - src-openeuler/nodejs-expect-dot-js
- - src-openeuler/nodejs-extend
- - src-openeuler/nodejs-eyes
- - src-openeuler/nodejs-fast-levenshtein
- - src-openeuler/nodejs-faye-websocket
- - src-openeuler/nodejs-figures
- - src-openeuler/nodejs-fileset
- - src-openeuler/nodejs-fill-keys
- - src-openeuler/nodejs-find-up
- - src-openeuler/nodejs-findup-sync
- - src-openeuler/nodejs-flot
- - src-openeuler/nodejs-for-each
- - src-openeuler/nodejs-foreach
- - src-openeuler/nodejs-forever-agent
- - src-openeuler/nodejs-form-data
- - src-openeuler/nodejs-formatio
- - src-openeuler/nodejs-from
- - src-openeuler/nodejs-fstream
- - src-openeuler/nodejs-function-bind
- - src-openeuler/nodejs-gauge
- - src-openeuler/nodejs-gaze
- - src-openeuler/nodejs-generate-function
- - src-openeuler/nodejs-generate-object-property
- - src-openeuler/nodejs-getobject
- - src-openeuler/nodejs-github-url-from-git
- - src-openeuler/nodejs-glob
- - src-openeuler/nodejs-globule
- - src-openeuler/nodejs-graceful-fs
- - src-openeuler/nodejs-graceful-readlink
- - src-openeuler/nodejs-growl
- - src-openeuler/nodejs-grunt
- - src-openeuler/nodejs-grunt-cli
- - src-openeuler/nodejs-grunt-contrib-clean
- - src-openeuler/nodejs-grunt-contrib-internal
- - src-openeuler/nodejs-grunt-contrib-nodeunit
- - src-openeuler/nodejs-grunt-contrib-uglify
- - src-openeuler/nodejs-grunt-contrib-watch
- - src-openeuler/nodejs-grunt-known-options
- - src-openeuler/nodejs-grunt-legacy-log
- - src-openeuler/nodejs-grunt-legacy-log-utils
- - src-openeuler/nodejs-grunt-legacy-util
- - src-openeuler/nodejs-gzip-size
- - src-openeuler/nodejs-handlebars
- - src-openeuler/nodejs-har-validator
- - src-openeuler/nodejs-has
- - src-openeuler/nodejs-has-ansi
- - src-openeuler/nodejs-has-color
- - src-openeuler/nodejs-has-flag
- - src-openeuler/nodejs-has-symbols
- - src-openeuler/nodejs-has-unicode
- - src-openeuler/nodejs-hash_file
- - src-openeuler/nodejs-hashish
- - src-openeuler/nodejs-hawk
- - src-openeuler/nodejs-heap
- - src-openeuler/nodejs-hoek
- - src-openeuler/nodejs-hooker
- - src-openeuler/nodejs-hosted-git-info
- - src-openeuler/nodejs-http-signature
- - src-openeuler/nodejs-iconv
- - src-openeuler/nodejs-iconv-lite
- - src-openeuler/nodejs-image-size
- - src-openeuler/nodejs-inflight
- - src-openeuler/nodejs-inherits
- - src-openeuler/nodejs-inherits1
- - src-openeuler/nodejs-interpret
- - src-openeuler/nodejs-is
- - src-openeuler/nodejs-is-builtin-module
- - src-openeuler/nodejs-is-callable
- - src-openeuler/nodejs-is-date-object
- - src-openeuler/nodejs-is-function
- - src-openeuler/nodejs-is-my-json-valid
- - src-openeuler/nodejs-is-object
- - src-openeuler/nodejs-is-property
- - src-openeuler/nodejs-is-regex
- - src-openeuler/nodejs-is-symbol
- - src-openeuler/nodejs-is-typedarray
- - src-openeuler/nodejs-isarray
- - src-openeuler/nodejs-isexe
- - src-openeuler/nodejs-isstream
- - src-openeuler/nodejs-istanbul
- - src-openeuler/nodejs-jade
- - src-openeuler/nodejs-jison
- - src-openeuler/nodejs-jison-lex
- - src-openeuler/nodejs-jju
- - src-openeuler/nodejs-js-yaml
- - src-openeuler/nodejs-json-diff
- - src-openeuler/nodejs-json-parse-helpfulerror
- - src-openeuler/nodejs-json-stringify-safe
- - src-openeuler/nodejs-jsonify
- - src-openeuler/nodejs-jsonpointer
- - src-openeuler/nodejs-jsonselect
- - src-openeuler/nodejs-less
- - src-openeuler/nodejs-less-plugin-clean-css
- - src-openeuler/nodejs-levn
- - src-openeuler/nodejs-lex-parser
- - src-openeuler/nodejs-load-grunt-tasks
- - src-openeuler/nodejs-locate-path
- - src-openeuler/nodejs-lolex
- - src-openeuler/nodejs-lru-queue
- - src-openeuler/nodejs-make-arrow-function
- - src-openeuler/nodejs-make-generator-function
- - src-openeuler/nodejs-maxmin
- - src-openeuler/nodejs-mdurl
- - src-openeuler/nodejs-memoizee
- - src-openeuler/nodejs-merge-descriptors
- - src-openeuler/nodejs-mime
- - src-openeuler/nodejs-mime-db
- - src-openeuler/nodejs-mime-types
- - src-openeuler/nodejs-minimatch
- - src-openeuler/nodejs-minimist
- - src-openeuler/nodejs-mkdirp
- - src-openeuler/nodejs-mock-fs
- - src-openeuler/nodejs-module-not-found-error
- - src-openeuler/nodejs-monocle
- - src-openeuler/nodejs-ms
- - src-openeuler/nodejs-multimatch
- - src-openeuler/nodejs-nan
- - src-openeuler/nodejs-nan0
- - src-openeuler/nodejs-nan1
- - src-openeuler/nodejs-next-tick
- - src-openeuler/nodejs-node-uuid
- - src-openeuler/nodejs-nomnom
- - src-openeuler/nodejs-nopt
- - src-openeuler/nodejs-noptify
- - src-openeuler/nodejs-normalize-package-data
- - src-openeuler/nodejs-npmlog
- - src-openeuler/nodejs-oauth-sign
- - src-openeuler/nodejs-object-assign
- - src-openeuler/nodejs-object-dot-assign
- - src-openeuler/nodejs-object-inspect
- - src-openeuler/nodejs-object-is
- - src-openeuler/nodejs-object-keys
- - src-openeuler/nodejs-once
- - src-openeuler/nodejs-optimist
- - src-openeuler/nodejs-optionator
- - src-openeuler/nodejs-os-homedir
- - src-openeuler/nodejs-os-tmpdir
- - src-openeuler/nodejs-osenv
- - src-openeuler/nodejs-p-limit
- - src-openeuler/nodejs-p-locate
- - src-openeuler/nodejs-package
- - src-openeuler/nodejs-packaging
- - src-openeuler/nodejs-paperboy
- - src-openeuler/nodejs-path-array
- - src-openeuler/nodejs-path-exists
- - src-openeuler/nodejs-path-is-absolute
- - src-openeuler/nodejs-path-parse
- - src-openeuler/nodejs-pinkie
- - src-openeuler/nodejs-pinkie-promise
- - src-openeuler/nodejs-pkg-up
- - src-openeuler/nodejs-prelude-ls
- - src-openeuler/nodejs-pretty-bytes
- - src-openeuler/nodejs-process-nextick-args
- - src-openeuler/nodejs-promise
- - src-openeuler/nodejs-promises-aplus-tests
- - src-openeuler/nodejs-proxyquire
- - src-openeuler/nodejs-qs
- - src-openeuler/nodejs-raw-body
- - src-openeuler/nodejs-read-package-json
- - src-openeuler/nodejs-readable-stream
- - src-openeuler/nodejs-readdirp
- - src-openeuler/nodejs-rechoir
- - src-openeuler/nodejs-replace-require-self
- - src-openeuler/nodejs-request
- - src-openeuler/nodejs-require-directory
- - src-openeuler/nodejs-require-inject
- - src-openeuler/nodejs-require-uncached
- - src-openeuler/nodejs-requirejs
- - src-openeuler/nodejs-resolve
- - src-openeuler/nodejs-resolve-from
- - src-openeuler/nodejs-resolve-pkg
- - src-openeuler/nodejs-resumer
- - src-openeuler/nodejs-rimraf
- - src-openeuler/nodejs-rollup
- - src-openeuler/nodejs-runforcover
- - src-openeuler/nodejs-safe-buffer
- - src-openeuler/nodejs-samsam
- - src-openeuler/nodejs-semver
- - src-openeuler/nodejs-set-immediate-shim
- - src-openeuler/nodejs-shelljs
- - src-openeuler/nodejs-should
- - src-openeuler/nodejs-should-equal
- - src-openeuler/nodejs-should-format
- - src-openeuler/nodejs-should-type
- - src-openeuler/nodejs-simple-assert
- - src-openeuler/nodejs-sinon
- - src-openeuler/nodejs-slide
- - src-openeuler/nodejs-sntp
- - src-openeuler/nodejs-source-map
- - src-openeuler/nodejs-source-map-support
- - src-openeuler/nodejs-spdx-correct
- - src-openeuler/nodejs-spdx-exceptions
- - src-openeuler/nodejs-spdx-expression-parse
- - src-openeuler/nodejs-spdx-license-ids
- - src-openeuler/nodejs-sprintf-js
- - src-openeuler/nodejs-stream-replace
- - src-openeuler/nodejs-string
- - src-openeuler/nodejs-string-dot-prototype-dot-repeat
- - src-openeuler/nodejs-string-dot-prototype-dot-trim
- - src-openeuler/nodejs-string_decoder
- - src-openeuler/nodejs-stringstream
- - src-openeuler/nodejs-strip-ansi
- - src-openeuler/nodejs-strip-json-comments
- - src-openeuler/nodejs-supports-color
- - src-openeuler/nodejs-tap
- - src-openeuler/nodejs-tap-parser
- - src-openeuler/nodejs-tape
- - src-openeuler/nodejs-tar
- - src-openeuler/nodejs-temporary
- - src-openeuler/nodejs-test
- - src-openeuler/nodejs-through
- - src-openeuler/nodejs-through2
- - src-openeuler/nodejs-timers-ext
- - src-openeuler/nodejs-tiny-lr-fork
- - src-openeuler/nodejs-tough-cookie
- - src-openeuler/nodejs-transformers
- - src-openeuler/nodejs-traverse
- - src-openeuler/nodejs-tunnel-agent
- - src-openeuler/nodejs-type-check
- - src-openeuler/nodejs-type-detect
- - src-openeuler/nodejs-underscore
- - src-openeuler/nodejs-underscore-dot-string
- - src-openeuler/nodejs-unpipe
- - src-openeuler/nodejs-uri-path
- - src-openeuler/nodejs-util
- - src-openeuler/nodejs-util-deprecate
- - src-openeuler/nodejs-validate-npm-package-license
- - src-openeuler/nodejs-vows
- - src-openeuler/nodejs-websocket-driver
- - src-openeuler/nodejs-which
- - src-openeuler/nodejs-window-size
- - src-openeuler/nodejs-with
- - src-openeuler/nodejs-wordwrap
- - src-openeuler/nodejs-wrappy
- - src-openeuler/nodejs-xtend
- - src-openeuler/nodejs-yamlish
- - src-openeuler/nodejs-yargs
- - src-openeuler/nodeunit
- - src-openeuler/uglify-js
- - src-openeuler/uglify-js1
-- name: Private
- repositories:
- - openeuler/os-autoinst-distri-openEuler
- - openeuler/security
- - src-openeuler/aalto-xml
- - src-openeuler/adobe-source-code-pro-fonts
- - src-openeuler/allegro
- - src-openeuler/amtk
- - src-openeuler/antlr4
- - src-openeuler/apache-commons-beanutils
- - src-openeuler/apache-commons-codec
- - src-openeuler/apache-commons-lang
- - src-openeuler/apache-commons-vfs
- - src-openeuler/appstream
- - src-openeuler/appstream-data
- - src-openeuler/args4j
- - src-openeuler/armadillo
- - src-openeuler/arpack
- - src-openeuler/asio
- - src-openeuler/autotrace
- - src-openeuler/aws-sdk-java
- - src-openeuler/baobab
- - src-openeuler/batik
- - src-openeuler/bcm283x-firmware
- - src-openeuler/blosc
- - src-openeuler/build
- - src-openeuler/bullet
- - src-openeuler/bytelist
- - src-openeuler/cfitsio
- - src-openeuler/checkstyle
- - src-openeuler/chromaprint
- - src-openeuler/ci_check
- - src-openeuler/ci_project
- - src-openeuler/clamav-unofficial-sigs
- - src-openeuler/classloader-leak-test-framework
- - src-openeuler/codenarc
- - src-openeuler/compat-libgfortran
- - src-openeuler/cvsps
- - src-openeuler/cyrus-imapd
- - src-openeuler/debian-keyring
- - src-openeuler/devhelp
- - src-openeuler/DevIL
- - src-openeuler/dict2xml
- - src-openeuler/dietlibc
- - src-openeuler/Done
- - src-openeuler/eclipse
- - src-openeuler/eclipse-jgit
- - src-openeuler/eclipselink-persistence-api
- - src-openeuler/efl
- - src-openeuler/ehcache-parent
- - src-openeuler/extlinux-bootloader
- - src-openeuler/ezmorph
- - src-openeuler/f29-backgrounds
- - src-openeuler/fasterxml-oss-parent
- - src-openeuler/fastutil
- - src-openeuler/fcitx
- - src-openeuler/felix-parent
- - src-openeuler/Flask-RESTful
- - src-openeuler/fluid-soundfont
- - src-openeuler/fluidsynth
- - src-openeuler/folks-telepathy
- - src-openeuler/freexl
- - src-openeuler/fwupdate
- - src-openeuler/game-music-emu
- - src-openeuler/gdal
- - src-openeuler/gedit
- - src-openeuler/geos
- - src-openeuler/geronimo-interceptor
- - src-openeuler/geronimo-validation
- - src-openeuler/glassfish-annotation-api
- - src-openeuler/glyphicons-halflings-fonts
- - src-openeuler/gmetrics
- - src-openeuler/gnome-backgrounds
- - src-openeuler/gnome-characters
- - src-openeuler/gnome-logs
- - src-openeuler/gnome-remote-desktop
- - src-openeuler/gnome-tweaks
- - src-openeuler/google-gson
- - src-openeuler/google-http-java-client
- - src-openeuler/google-oauth-java-client
- - src-openeuler/google-roboto-slab-fonts
- - src-openeuler/gradle
- - src-openeuler/gssntlmssp
- - src-openeuler/gtkspell
- - src-openeuler/gtkspell3
- - src-openeuler/gtkspellmm30
- - src-openeuler/guava
- - src-openeuler/hawtjni-runtime
- - src-openeuler/hibernate-jpa
- - src-openeuler/http-builder
- - src-openeuler/ibus-kkc
- - src-openeuler/icon-naming-utils
- - src-openeuler/imlib2
- - src-openeuler/imsettings
- - src-openeuler/infinipath-psm
- - src-openeuler/inkscape
- - src-openeuler/temporary-integration-test
- - src-openeuler/internal-issue
- - src-openeuler/ipython
- - src-openeuler/irrXML
- - src-openeuler/jackson-core
- - src-openeuler/libburn1
- - src-openeuler/libisofs1
- - src-openeuler/jack-audio-connection-kit
- - src-openeuler/jackson-annotations
- - src-openeuler/jackson-bom
- - src-openeuler/jackson-dataformats-binary
- - src-openeuler/jackson-parent
- - src-openeuler/jai-imageio-core
- - src-openeuler/jarjar
- - src-openeuler/jatl
- - src-openeuler/java
- - src-openeuler/java-base64
- - src-openeuler/java-comment-preprocessor
- - src-openeuler/javacc-maven-plugin
- - src-openeuler/javaewah
- - src-openeuler/jboss-remoting
- - src-openeuler/jboss-transaction
- - src-openeuler/jcodings
- - src-openeuler/jctools
- - src-openeuler/jdeparser
- - src-openeuler/jenkins_project
- - src-openeuler/jetty
- - src-openeuler/jetty-schemas
- - src-openeuler/jhighlight
- - src-openeuler/js-jquery
- - src-openeuler/js-underscore
- - src-openeuler/jsch-agent-proxy
- - src-openeuler/js-jquery1
- - src-openeuler/json-lib
- - src-openeuler/Keras
- - src-openeuler/kiwi-dlimage
- - src-openeuler/kiwi-template-openEuler
- - src-openeuler/kryo
- - src-openeuler/ladspa
- - src-openeuler/ledmon
- - src-openeuler/lensfun
- - src-openeuler/libass
- - src-openeuler/libbs2b
- - src-openeuler/libdap
- - src-openeuler/libEMF
- - src-openeuler/libffado
- - src-openeuler/libgeotiff
- - src-openeuler/libgta
- - src-openeuler/libkate
- - src-openeuler/libkkc
- - src-openeuler/libkkc-data
- - src-openeuler/libkml
- - src-openeuler/libmodplug
- - src-openeuler/libofa
- - src-openeuler/liboggz
- - src-openeuler/liboil
- - src-openeuler/libomp
- - src-openeuler/libpq
- - src-openeuler/libpsm2
- - src-openeuler/librevenge
- - src-openeuler/libsane-hpaio
- - src-openeuler/libspatialite
- - src-openeuler/libuninameslist
- - src-openeuler/libvncserver
- - src-openeuler/libwpd
- - src-openeuler/libwpg
- - src-openeuler/libxmlpp
- - src-openeuler/lldb
- - src-openeuler/logback
- - src-openeuler/lohit-gurmukhi-fonts
- - src-openeuler/lohit-odia-fonts
- - src-openeuler/lucene
- - src-openeuler/lzma
- - src-openeuler/mainline.list
- - src-openeuler/malaga
- - src-openeuler/malaga-suomi-voikko
- - src-openeuler/manifest
- - src-openeuler/maven-clean-plugin
- - src-openeuler/maven-install-plugin
- - src-openeuler/maven-plugins-pom
- - src-openeuler/maven-scm
- - src-openeuler/mingw-crt
- - src-openeuler/mingw-filesystem
- - src-openeuler/mingw-gcc
- - src-openeuler/mingw-srvany
- - src-openeuler/minlog
- - src-openeuler/mkeuleros
- - src-openeuler/modello
- - src-openeuler/mojo-parent
- - src-openeuler/nautilus-sendto
- - src-openeuler/nekohtml
- - src-openeuler/netcdf
- - src-openeuler/netty
- - src-openeuler/new.list
- - src-openeuler/objectweb-asm3
- - src-openeuler/ocaml-calendar
- - src-openeuler/ocaml-camlp4
- - src-openeuler/ocaml-camomile
- - src-openeuler/ocaml-csv
- - src-openeuler/ocaml-curses
- - src-openeuler/ocaml-extlib
- - src-openeuler/ocaml-fileutils
- - src-openeuler/ocaml-findlib
- - src-openeuler/ocaml-gettext
- - src-openeuler/ocaml-libvirt
- - src-openeuler/ocaml-ounit
- - src-openeuler/ocaml-xml-light
- - src-openeuler/ogdi
- - src-openeuler/ongres-scram
- - src-openeuler/opencryptoki
- - src-openeuler/openEuler_chroot
- - src-openeuler/openmotif
- - src-openeuler/openpgm
- - src-openeuler/osgi-annotation
- - src-openeuler/osgi-compendium
- - src-openeuler/osgi-core
- - src-openeuler/passivetex
- - src-openeuler/perl-CPAN-Changes
- - src-openeuler/perl-Crypt-CBC
- - src-openeuler/perl-Crypt-OpenSSL-Guess
- - src-openeuler/perl-Expect
- - src-openeuler/perl-Mojolicious
- - src-openeuler/perl-IO-Tty
- - src-openeuler/perl-Net-DNS-Resolver-Mock
- - src-openeuler/perl-Net-LibIDN2
- - src-openeuler/perl-srpm-macros
- - src-openeuler/perl-Test-CPAN-Meta
- - src-openeuler/perl-Tie-IxHash
- - src-openeuler/perl-Time-Zone
- - src-openeuler/perl-Unix-Syslog
- - src-openeuler/phonon-backend-gstreamer
- - src-openeuler/physfs
- - src-openeuler/pkgconfig
- - src-openeuler/plexus-ant-factory
- - src-openeuler/plexus-bsh-factory
- - src-openeuler/plotutils
- - src-openeuler/pmix
- - src-openeuler/portaudio
- - src-openeuler/potrace
- - src-openeuler/properties-maven-plugin
- - src-openeuler/protoparser
- - src-openeuler/pstoedit
- - src-openeuler/python-appdirs
- - src-openeuler/python-Automat
- - src-openeuler/python-backports-functools_lru_cache
- - src-openeuler/python-backports-shutil_get_terminal_size
- - src-openeuler/python-behave
- - src-openeuler/python-Bottleneck
- - src-openeuler/python-breathe
- - src-openeuler/python-eventlet
- - src-openeuler/python-graphviz
- - src-openeuler/python-h5py
- - src-openeuler/python-hpack
- - src-openeuler/python-httpbin
- - src-openeuler/python-hyperframe
- - src-openeuler/python-jmespath
- - src-openeuler/python-Keras
- - src-openeuler/python-keras-applications
- - src-openeuler/python-Keras_Preprocessing
- - src-openeuler/python-latexcodec
- - src-openeuler/python-m2r
- - src-openeuler/python-matplotlib
- - src-openeuler/python-mistune
- - src-openeuler/python-netifaces
- - src-openeuler/python-networkx
- - src-openeuler/python-numexpr
- - src-openeuler/python-numpydoc
- - src-openeuler/python-orderedset
- - src-openeuler/python-parse_type
- - src-openeuler/python-pasta
- - src-openeuler/python-pathlib
- - src-openeuler/python-pexpect
- - src-openeuler/python-pickleshare
- - src-openeuler/python-pkgconfig
- - src-openeuler/python-priority
- - src-openeuler/python-prompt_toolkit
- - src-openeuler/python-ptyprocess
- - src-openeuler/python-pybtex
- - src-openeuler/python-pybtex-docutils
- - src-openeuler/python-pydotplus
- - src-openeuler/python-pyflakes
- - src-openeuler/python-pyglet
- - src-openeuler/python-pyside
- - src-openeuler/python-pytest-httpbin
- - src-openeuler/python-rpmfluff
- - src-openeuler/python-scour
- - src-openeuler/python-service-identity
- - src-openeuler/python-sphinx-bootstrap-theme
- - src-openeuler/python-sphinxcontrib-bibtex
- - src-openeuler/python-tables
- - src-openeuler/python-twisted
- - src-openeuler/python-wcwidth
- - src-openeuler/python-zmq
- - src-openeuler/python-h2
- - src-openeuler/reflectasm
- - src-openeuler/repo
- - src-openeuler/rpm-mpi-hooks
- - src-openeuler/rsh
- - src-openeuler/rubygem-hpricot
- - src-openeuler/rubygem-mustache
- - src-openeuler/rubygem-ronn
- - src-openeuler/sbinary
- - src-openeuler/sbt
- - src-openeuler/scl-utils
- - src-openeuler/SDL_sound
- - src-openeuler/setuptool
- - src-openeuler/slf4j
- - src-openeuler/sni-qt
- - src-openeuler/sos-collector
- - src-openeuler/spice-parent
- - src-openeuler/sshj
- - src-openeuler/stax2-api
- - src-openeuler/SuperLU
- - src-openeuler/syslinux-tftpboot
- - src-openeuler/system-config-firewall
- - src-openeuler/taglist-enable
- - src-openeuler/tclx
- - src-openeuler/teckit
- - src-openeuler/tesla-polyglot
- - src-openeuler/thx
- - src-openeuler/tinyxml
- - src-openeuler/tomcat-native
- - src-openeuler/tslib
- - src-openeuler/ttembed
- - src-openeuler/ttfautohint
- - src-openeuler/ubu-keyring
- - src-openeuler/uniconvertor
- - src-openeuler/uriparser
- - src-openeuler/virt-top
- - src-openeuler/wildfly-common
- - src-openeuler/wildmidi
- - src-openeuler/wxPython
- - src-openeuler/xerces-c
- - src-openeuler/xhtml2fo-style-xsl
- - src-openeuler/xmlgraphics-commons
- - src-openeuler/xmvn-connector-gradle
- - src-openeuler/xmvn-tools
- - src-openeuler/xorg-sgml-doctools
- - src-openeuler/xorg-x11-docs
- - src-openeuler/xorg-x11-drv-armsoc
- - src-openeuler/zbar
- - src-openeuler/zvbi
- - src-openeuler/pysendfile
- - src-openeuler/python-pycdlib
- - src-openeuler/zeromq
- - src-openeuler/zinc
-- name: oVirt
- repositories:
- - src-openeuler/ioprocess
- - src-openeuler/cockpit-ovirt
- - src-openeuler/engine-db-query
- - src-openeuler/go-ovirt-engine-sdk4
- - src-openeuler/imgbased
- - src-openeuler/java-ovirt-engine-sdk4
- - src-openeuler/mingw-spice-vdagent
- - src-openeuler/mom
- - src-openeuler/nsis-simple-service-plugin
- - src-openeuler/otopi
- - src-openeuler/ovirt-ansible-cluster-upgrade
- - src-openeuler/ovirt-ansible-disaster-recovery
- - src-openeuler/ovirt-ansible-engine-setup
- - src-openeuler/ovirt-ansible-hosted-engine-setup
- - src-openeuler/ovirt-ansible-image-template
- - src-openeuler/ovirt-ansible-infra
- - src-openeuler/ovirt-ansible-manageiq
- - src-openeuler/ovirt-ansible-repositories
- - src-openeuler/ovirt-ansible-roles
- - src-openeuler/ovirt-ansible-shutdown-env
- - src-openeuler/ovirt-ansible-v2v-conversion-host
- - src-openeuler/ovirt-ansible-vm-infra
- - src-openeuler/ovirt-cockpit-sso
- - src-openeuler/ovirt-engine
- - src-openeuler/ovirt-engine-api-explorer
- - src-openeuler/ovirt-engine-appliance
- - src-openeuler/ovirt-engine-cli
- - src-openeuler/ovirt-engine-dwh
- - src-openeuler/ovirt-engine-extension-aaa-ldap
- - src-openeuler/ovirt-engine-extension-aaa-misc
- - src-openeuler/ovirt-engine-metrics
- - src-openeuler/ovirt-engine-nodejs
- - src-openeuler/ovirt-engine-nodejs-modules
- - src-openeuler/ovirt-engine-ui-extensions
- - src-openeuler/ovirt-engine-wildfly
- - src-openeuler/ovirt-engine-wildfly-overlay
- - src-openeuler/ovirt-engine-yarn
- - src-openeuler/ovirt-guest-agent
- - src-openeuler/ovirt-guest-agent-windows
- - src-openeuler/ovirt-guest-tools-iso
- - src-openeuler/ovirt-host
- - src-openeuler/ovirt-host-deploy
- - src-openeuler/ovirt-hosted-engine-ha
- - src-openeuler/ovirt-hosted-engine-setup
- - src-openeuler/ovirt-imageio-common
- - src-openeuler/ovirt-imageio-daemon
- - src-openeuler/ovirt-imageio-proxy
- - src-openeuler/ovirt-iso-uploader
- - src-openeuler/ovirt-lldp-labeler
- - src-openeuler/ovirt-log-collector
- - src-openeuler/ovirt-node-ng
- - src-openeuler/ovirt-node-ng-image-update
- - src-openeuler/ovirt-provider-ovn
- - src-openeuler/ovirt-release43
- - src-openeuler/ovirt-scheduler-proxy
- - src-openeuler/ovirt-setup-lib
- - src-openeuler/ovirt-vmconsole
- - src-openeuler/ovirt-web-ui
- - src-openeuler/python-ovirt-engine-sdk4
- - src-openeuler/rubygem-ovirt-engine-sdk4
- - src-openeuler/v2v-conversion-host
- - src-openeuler/vcredist
- - src-openeuler/vdsm
- - src-openeuler/vdsm-jsonrpc-java
- - src-openeuler/java-client-kubevirt
- - src-openeuler/ovirt-engine-extension-aaa-jdbc
- - src-openeuler/ovirt-engine-extension-logger-log4j
- - src-openeuler/ovirt-engine-extensions-api
- - src-openeuler/ovirt-imageio
- - src-openeuler/ovirt-jboss-modules-maven-plugin
- - src-openeuler/safelease
- - src-openeuler/ovirt-engine-api-model
-- name: sig-REDF
- repositories:
- - openeuler/redf
- - src-openeuler/redf
-- name: Marketing
- repositories:
- - openeuler/marketing
-- name: security-committee
- repositories:
- - openeuler/security-committee
- - openeuler/security
-- name: dev-utils
- repositories:
- - openeuler/abichecker
- - openeuler/auto_py2to3
- - openeuler/nodejsporter
- - openeuler/openEuler-bootstrap
- - openeuler/openEuler-pkginfo
- - openeuler/perlporter
- - openeuler/pkgporter
- - openeuler/pyporter
- - openeuler/rubyporter
- - openeuler/trucker
- - src-openeuler/ansible
- - src-openeuler/antlr
- - src-openeuler/apache-commons-collections4
- - src-openeuler/apache-commons-digester
- - src-openeuler/apache-commons-fileupload
- - src-openeuler/apache-commons-jexl
- - src-openeuler/apache-commons-math
- - src-openeuler/apache-commons-pool2
- - src-openeuler/apache-log4j-extras
- - src-openeuler/apache-poi
- - src-openeuler/apache-sshd
- - src-openeuler/apacheds-ldap-api
- - src-openeuler/apiviz
- - src-openeuler/aries-blueprint-api
- - src-openeuler/aries-quiesce-api
- - src-openeuler/aries-util
- - src-openeuler/asymptote
- - src-openeuler/atop
- - src-openeuler/auto
- - src-openeuler/automoc
- - src-openeuler/bam
- - src-openeuler/base64coder
- - src-openeuler/bcc
- - src-openeuler/bcel
- - src-openeuler/bcftools
- - src-openeuler/bcrypt
- - src-openeuler/bea-stax
- - src-openeuler/beust-jcommander
- - src-openeuler/bouncycastle
- - src-openeuler/bpftrace
- - src-openeuler/bridge-method-injector
- - src-openeuler/brpc
- - src-openeuler/bsf
- - src-openeuler/buildroot
- - src-openeuler/caffeine
- - src-openeuler/cal10n
- - src-openeuler/castor-maven-plugin
- - src-openeuler/catch1
- - src-openeuler/cglib
- - src-openeuler/ck
- - src-openeuler/cloc
- - src-openeuler/colm
- - src-openeuler/colordiff
- - src-openeuler/concurrent-trees
- - src-openeuler/coro-mock
- - src-openeuler/cpp-httplib
- - src-openeuler/cpuid
- - src-openeuler/cryptacular
- - src-openeuler/csmith
- - src-openeuler/ct-ng
- - src-openeuler/curator
- - src-openeuler/curvesapi
- - src-openeuler/dbus-cpp
- - src-openeuler/dbusmenu-qt
- - src-openeuler/delve
- - src-openeuler/dleyna-connector-dbus
- - src-openeuler/dleyna-core
- - src-openeuler/ecj
- - src-openeuler/emma
- - src-openeuler/enca
- - src-openeuler/extra-cmake-modules
- - src-openeuler/f2fs-tools
- - src-openeuler/fcgi
- - src-openeuler/figlet
- - src-openeuler/fping
- - src-openeuler/freeimage
- - src-openeuler/freemarker
- - src-openeuler/GAPP
- - src-openeuler/geronimo-ejb
- - src-openeuler/geronimo-jaspic-spec
- - src-openeuler/geronimo-jcache
- - src-openeuler/geronimo-jcdi-1.0-api
- - src-openeuler/geronimo-jpa
- - src-openeuler/geronimo-osgi-support
- - src-openeuler/git-lfs
- - src-openeuler/git-tools
- - src-openeuler/glassfish-dtd-parser
- - src-openeuler/glassfish-jaxb
- - src-openeuler/glassfish-jsp
- - src-openeuler/grizzly
- - src-openeuler/gtkmm24
- - src-openeuler/hamcrest
- - src-openeuler/hardinfo
- - src-openeuler/hawtdispatch
- - src-openeuler/hello
- - src-openeuler/hping
- - src-openeuler/htop
- - src-openeuler/htslib
- - src-openeuler/http_load
- - src-openeuler/httpcomponents-project
- - src-openeuler/iftop
- - src-openeuler/iniparser
- - src-openeuler/iozone
- - src-openeuler/ipwatchd
- - src-openeuler/jakarta-oro
- - src-openeuler/java_cup
- - src-openeuler/javaparser
- - src-openeuler/jBCrypt
- - src-openeuler/jboss-annotations-1.2-api
- - src-openeuler/jboss-connector-1.6-api
- - src-openeuler/jboss-jaxrs-2.0-api
- - src-openeuler/jboss-jsf-2.1-api
- - src-openeuler/jboss-jsp-2.3-api
- - src-openeuler/jboss-jstl-1.2-api
- - src-openeuler/jboss-servlet-3.1-api
- - src-openeuler/jboss-stdio
- - src-openeuler/jboss-websocket-1.0-api
- - src-openeuler/jetbrains-annotations
- - src-openeuler/jettison
- - src-openeuler/jetty-parent
- - src-openeuler/jexcelapi
- - src-openeuler/jffi
- - src-openeuler/jnr-constants
- - src-openeuler/jnr-enxio
- - src-openeuler/jnr-ffi
- - src-openeuler/jnr-netdb
- - src-openeuler/jnr-posix
- - src-openeuler/jnr-unixsocket
- - src-openeuler/joda-convert
- - src-openeuler/joni
- - src-openeuler/jopt-simple
- - src-openeuler/jredis
- - src-openeuler/js-excanvas
- - src-openeuler/junit
- - src-openeuler/junit5
- - src-openeuler/kelbt
- - src-openeuler/kf5
- - src-openeuler/kscreenlocker
- - src-openeuler/ldapjdk
- - src-openeuler/libecb
- - src-openeuler/libgpod
- - src-openeuler/libgssglue
- - src-openeuler/libhandy
- - src-openeuler/libkeepalive
- - src-openeuler/librpcsecgss
- - src-openeuler/libwpe
- - src-openeuler/libyubikey
- - src-openeuler/lmbench
- - src-openeuler/log4cplus
- - src-openeuler/log4cpp
- - src-openeuler/maven-osgi
- - src-openeuler/memleax
- - src-openeuler/memtester
- - src-openeuler/miniasm
- - src-openeuler/minimap2
- - src-openeuler/mocha
- - src-openeuler/mock
- - src-openeuler/morphia
- - src-openeuler/multitail
- - src-openeuler/mysql-connector-java
- - src-openeuler/ncdu
- - src-openeuler/nethogs
- - src-openeuler/netperf
- - src-openeuler/neXtaw
- - src-openeuler/nmon
- - src-openeuler/openEuler-pkginfo
- - src-openeuler/options
- - src-openeuler/p7zip
- - src-openeuler/parfait
- - src-openeuler/PEGTL
- - src-openeuler/portals-pom
- - src-openeuler/portlet-2.0-api
- - src-openeuler/pyporter
- - src-openeuler/pyusb
- - src-openeuler/R-knitr
- - src-openeuler/ragel
- - src-openeuler/ranger
- - src-openeuler/relaxngcc
- - src-openeuler/relaxngDatatype
- - src-openeuler/rpm-ostree
- - src-openeuler/s-tui
- - src-openeuler/samtools
- - src-openeuler/saxon
- - src-openeuler/slurm
- - src-openeuler/sqlite-jdbc
- - src-openeuler/stax-ex
- - src-openeuler/stress-ng
- - src-openeuler/stringtemplate
- - src-openeuler/sysbench
- - src-openeuler/sysget
- - src-openeuler/systemd-bootchart
- - src-openeuler/the_silver_searcher
- - src-openeuler/tig
- - src-openeuler/tito
- - src-openeuler/unixbench
- - src-openeuler/uom-se
- - src-openeuler/webbench
- - src-openeuler/woodstox-core
- - src-openeuler/wpebackend-fdo
- - src-openeuler/ws-commons-util
- - src-openeuler/xom
- - src-openeuler/ykpers
-- name: sig-mate-desktop
- repositories:
- - openeuler/mate-desktop
- - src-openeuler/caja
- - src-openeuler/caja-extensions
- - src-openeuler/cjkuni-uming-fonts
- - src-openeuler/eom
- - src-openeuler/fcitx-configtool
- - src-openeuler/gajim
- - src-openeuler/gcolor2
- - src-openeuler/glade3
- - src-openeuler/gparted
- - src-openeuler/gtk-layer-shell
- - src-openeuler/gtk-murrine-engine
- - src-openeuler/gtk2-engines
- - src-openeuler/gtksourceview4
- - src-openeuler/gucharmap
- - src-openeuler/im-chooser
- - src-openeuler/libXpresent
- - src-openeuler/libmatekbd
- - src-openeuler/libmatemixer
- - src-openeuler/libmateweather
- - src-openeuler/libwnck
- - src-openeuler/marco
- - src-openeuler/mate-applets
- - src-openeuler/mate-backgrounds
- - src-openeuler/mate-calc
- - src-openeuler/mate-common
- - src-openeuler/mate-control-center
- - src-openeuler/mate-desktop
- - src-openeuler/mate-icon-theme
- - src-openeuler/mate-media
- - src-openeuler/mate-menus
- - src-openeuler/mate-notification-daemon
- - src-openeuler/mate-panel
- - src-openeuler/mate-polkit
- - src-openeuler/mate-power-manager
- - src-openeuler/mate-screensaver
- - src-openeuler/mate-session-manager
- - src-openeuler/mate-settings-daemon
- - src-openeuler/mate-system-monitor
- - src-openeuler/mate-terminal
- - src-openeuler/mate-themes
- - src-openeuler/mate-user-guide
- - src-openeuler/mate-utils
- - src-openeuler/open-chinese-fonts
- - src-openeuler/pangox-compat
- - src-openeuler/perl-ExtUtils-Depends
- - src-openeuler/perl-ExtUtils-PkgConfig
- - src-openeuler/perl-Glib
- - src-openeuler/python-cssutils
- - src-openeuler/python-nbxmpp
- - src-openeuler/python-precis_i18n
- - src-openeuler/re2c
- - src-openeuler/system-config-users
- - src-openeuler/system-config-users-docs
- - src-openeuler/unique3
- - src-openeuler/wireless-tools
-- name: sig-bounds_checking_function
- repositories:
- - openeuler/bounds_checking_function
- - src-openeuler/bounds_checking_function
-- name: sig-UKUI
- repositories:
- - src-openeuler/qt5-ukui-platformtheme
- - src-openeuler/peony
- - src-openeuler/ukui-control-center
- - src-openeuler/ukui-sidebar
- - src-openeuler/ukui-panel
- - src-openeuler/ukui-window-switch
- - src-openeuler/ukui-power-manager
- - src-openeuler/ukui-screensaver
- - src-openeuler/ukui-media
- - src-openeuler/ukui-menu
- - src-openeuler/ukui-session-manager
- - src-openeuler/ukui-settings-daemon
- - src-openeuler/kylin-nm
- - src-openeuler/ukui-themes
- - src-openeuler/ukui-biometric-manager
- - src-openeuler/ukui-biometric-auth
- - src-openeuler/peony-extensions
- - src-openeuler/ukui-greeter
- - src-openeuler/ukylin-feedback-client
- - src-openeuler/ukwm
- - src-openeuler/ukui-interface
- - src-openeuler/ukui-screenshot
- - src-openeuler/ukui-indicators
- - src-openeuler/ukui-desktop-environment
- - src-openeuler/biometric-authentication
- - src-openeuler/attica
- - src-openeuler/bamf
- - src-openeuler/grantlee
- - src-openeuler/gsettings-qt
- - src-openeuler/kf5-karchive
- - src-openeuler/kf5-kauth
- - src-openeuler/kf5-kcodecs
- - src-openeuler/kf5-kconfig
- - src-openeuler/kf5-kconfigwidgets
- - src-openeuler/kf5-kcoreaddons
- - src-openeuler/kf5-kdoctools
- - src-openeuler/kf5-kguiaddons
- - src-openeuler/kf5-ki18n
- - src-openeuler/kf5-kidletime
- - src-openeuler/kf5-kwayland
- - src-openeuler/kf5-kwidgetsaddons
- - src-openeuler/kf5-kwindowsystem
- - src-openeuler/kf5-solid
- - src-openeuler/libkscreen-qt5
- - src-openeuler/libqtxdg
- - src-openeuler/libstatgrab
- - src-openeuler/libsysstat
- - src-openeuler/libupnp
- - src-openeuler/lxqt-build-tools
- - src-openeuler/polkit-qt-1
- - src-openeuler/qjson
- - src-openeuler/qt5-qtcharts
- - src-openeuler/qtchooser
- - src-openeuler/redshift
- - src-openeuler/shared-desktop-ontologies
- - src-openeuler/ubuntukylin-default-settings
- - src-openeuler/ukui-system-monitor
- - src-openeuler/ukui-wallpapers
- - src-openeuler/libchamplain
- - src-openeuler/atril
- - src-openeuler/mathjax
- - src-openeuler/shotwell
- - src-openeuler/engrampa
-- name: sig-recycle
- repositories:
- - src-openeuler/cmockery
- - src-openeuler/jasper
- - src-openeuler/liberation-sans-fonts
- - src-openeuler/libibmad
- - src-openeuler/python2
- - src-openeuler/caffe
- - src-openeuler/shim-unsigned-aarch64
- - src-openeuler/subscription-manager
- - src-openeuler/redhat-menus
- - src-openeuler/golang-github-cpuguy83-go-md2man
- - src-openeuler/golang-github-fsnotify-fsnotify
- - src-openeuler/golang-github-go-tomb-tomb
- - src-openeuler/golang-github-hpcloud-tail
- - src-openeuler/golang-github-onsi-ginkgo
- - src-openeuler/golang-github-onsi-gomega
- - src-openeuler/golang-googlecode-go-crypto
- - src-openeuler/golang-googlecode-net
- - src-openeuler/golang-googlecode-text
- - src-openeuler/golang-googlecode-tools
- - src-openeuler/golang-gopkg-yaml
- - src-openeuler/golang-googlecode-goprotobuf
- - src-openeuler/golang-github-vishvananda-netns
- - src-openeuler/golang-github-golang-sys
- - src-openeuler/golang-github-vishvananda-netlink
- - src-openeuler/golang-github-d2g-dhcp4
- - src-openeuler/golang-github-coreos-go-iptables
- - src-openeuler/golang-github-russross-blackfriday
- - src-openeuler/yum-metadata-parser
- - src-openeuler/hardlink
- - src-openeuler/langpacks
- - src-openeuler/hesiod
- - src-openeuler/libmodman
- - src-openeuler/tpm2-abrmd-selinux
- - src-openeuler/oci-systemd-hook
- - src-openeuler/openvswitch-kmod
- - src-openeuler/docker-anaconda-addon
-- name: sig-RaspberryPi
- repositories:
- - openeuler/raspberrypi
- - openeuler/raspberrypi-kernel
- - src-openeuler/raspberrypi-kernel
- - src-openeuler/raspberrypi-firmware
- - src-openeuler/raspberrypi-build
- - src-openeuler/raspberrypi-bluetooth
- - openeuler/raspberrypi-build
-- name: sig-Ha
- repositories:
- - src-openeuler/pacemaker
- - src-openeuler/corosync
- - src-openeuler/pcs
- - openeuler/pacemaker-mgmt
- - openeuler/ha-api
- - openeuler/ha-web
- - src-openeuler/pacemaker-mgmt
- - src-openeuler/ha-api
- - src-openeuler/ha-web
- - src-openeuler/fence-agents
- - src-openeuler/fence-virt
- - src-openeuler/sbd
- - src-openeuler/corosync-qdevice
- - src-openeuler/drbd
- - src-openeuler/drbd-utils
-- name: sig-QA
- repositories:
- - openeuler/QA
- - openeuler/avocado
- - openeuler/avocado-vt
- - openeuler/tp-libvirt
- - openeuler/tp-qemu
- - openeuler/EulerRobot
- - openeuler/integration-test
- - openeuler/container-test
- - openeuler/compiler-test
- - openeuler/package-reinforce-test
- - openeuler/test-tools
-- name: sig-KIRAN-DESKTOP
- repositories:
- - src-openeuler/kiran-avatar-editor
- - src-openeuler/kiran-gtk-theme
- - src-openeuler/kiran-icon-theme
- - src-openeuler/kiran-menu
- - src-openeuler/kiran-screensaver-dialog
- - src-openeuler/kiran-themes
- - src-openeuler/kiran-wallpapers
- - src-openeuler/lightdm-kiran-greeter
- - src-openeuler/plymouth-theme-kiran
-- name: sig-ROS
- repositories:
- - openeuler/ros
- - src-openeuler/catkin
- - src-openeuler/class_loader
- - src-openeuler/cmake_modules
- - src-openeuler/gencpp
- - src-openeuler/geneus
- - src-openeuler/genlisp
- - src-openeuler/genpy
- - src-openeuler/gennodejs
- - src-openeuler/genmsg
- - src-openeuler/std_msgs
- - src-openeuler/message_generation
- - src-openeuler/ros_environment
- - src-openeuler/message_runtime
- - src-openeuler/roscpp_core
- - src-openeuler/ros
- - src-openeuler/rosconsole
- - src-openeuler/roslisp
- - src-openeuler/rospack
- - src-openeuler/ros_comm_msgs
- - src-openeuler/pluginlib
- - src-openeuler/ros_comm
-- name: sig-ai-bigdata
- repositories:
- - src-openeuler/arm-ml-examples
- - src-openeuler/armnn
- - src-openeuler/bazel
- - src-openeuler/blaze
- - src-openeuler/ComputeLibrary
- - src-openeuler/dlib
- - src-openeuler/eigen
- - src-openeuler/eli5
- - src-openeuler/ensmallen
- - src-openeuler/epstool
- - src-openeuler/flink
- - src-openeuler/ftgl
- - src-openeuler/gl2ps
- - src-openeuler/glpk
- - src-openeuler/hadoop
- - src-openeuler/hbase
- - src-openeuler/hive
- - src-openeuler/ibis
- - src-openeuler/incubator-mxnet
- - src-openeuler/jupyter
- - src-openeuler/kafka
- - src-openeuler/libhdfs
- - src-openeuler/libiodbc
- - src-openeuler/libmetal
- - src-openeuler/libsvm
- - src-openeuler/libxsmm
- - src-openeuler/lightgbm
- - src-openeuler/lzip
- - src-openeuler/mlpack
- - src-openeuler/octave
- - src-openeuler/oneDNN
- - src-openeuler/opencl
- - src-openeuler/opencl-filesystem
- - src-openeuler/opencl-headers
- - src-openeuler/opencv
- - src-openeuler/opennn
- - src-openeuler/presto
- - src-openeuler/pytorch
- - src-openeuler/qrupdate
- - src-openeuler/qscintilla
- - src-openeuler/rain
- - src-openeuler/Shark
- - src-openeuler/spark
- - src-openeuler/sundials
- - src-openeuler/SuperLUMT
- - src-openeuler/tensorflow
- - src-openeuler/zeppelin
- - src-openeuler/zookeeper
-- name: sig-golang
- repositories:
- - src-openeuler/golang
-- name: sig-EasyLife
- repositories:
- - openeuler/openEuler-Advisor
- - src-openeuler/pkgship
- - src-openeuler/abi-compliance-checker
- - src-openeuler/abi-dumper
- - src-openeuler/patch-tracking
-- name: sig-ceph
- repositories:
- - src-openeuler/ceph
- - src-openeuler/ceph-deploy
- - src-openeuler/ceph-ansible
-- name: sig-security-facility
- repositories:
- - openeuler/security-tool
- - openeuler/attest-tools
- - openeuler/digest-list-tools
- - src-openeuler/mysql-selinux
- - src-openeuler/pesign-obs-integration
- - src-openeuler/tss2
- - src-openeuler/oscap-anaconda-addon
- - src-openeuler/certmonger
- - src-openeuler/keycloak-httpd-client-install
- - src-openeuler/mod_auth_openidc
- - src-openeuler/mod_authnz_pam
- - src-openeuler/attest-tools
- - src-openeuler/digest-list-tools
- - src-openeuler/apparmor
- - src-openeuler/cryptopp
- - src-openeuler/tpm2-tools
- - src-openeuler/setroubleshoot
- - src-openeuler/openssl
- - src-openeuler/tpm2-abrmd
- - src-openeuler/libselinux
- - src-openeuler/libsepol
- - src-openeuler/keyutils
- - src-openeuler/mcstrans
- - src-openeuler/selinux-policy
- - src-openeuler/crypto-policies
- - src-openeuler/checkpolicy
- - src-openeuler/libcap
- - src-openeuler/gnupg2
- - src-openeuler/cracklib
- - src-openeuler/policycoreutils
- - src-openeuler/pyOpenSSL
- - src-openeuler/libsemanage
- - src-openeuler/openssl-pkcs11
- - src-openeuler/gnutls
- - src-openeuler/mokutil
- - src-openeuler/pam
- - src-openeuler/libpwquality
- - src-openeuler/softhsm
- - src-openeuler/nss
- - src-openeuler/security-tool
- - src-openeuler/tpm2-tss
- - src-openeuler/audit
- - src-openeuler/nss-pem
- - src-openeuler/swtpm
- - src-openeuler/libtpms
-- name: sig-Compatibility-Infra
- repositories:
- - openeuler/oec-hardware
- - openeuler/oec-application
- - src-openeuler/oec-hardware
- - src-openeuler/oec-application
-- name: sig-cms
- repositories:
- - src-openeuler/doracms
-- name: sig-RISC-V
- repositories:
- - openeuler/RISC-V
- - src-openeuler/risc-v-kernel
- - src-openeuler/opensbi
-- name: sig-android-middleware
- repositories:
- - openeuler/android-emulator
- - openeuler/anbox
- - src-openeuler/platform_hardware_libhardware_legacy
- - src-openeuler/platform_hardware_ril
- - src-openeuler/platform_frameworks_base
- - src-openeuler/platform_frameworks_native
- - src-openeuler/platform_frameworks_opt_net_wifi
- - src-openeuler/platform_system_core
- - src-openeuler/platform_packages_apps_DeskClock
- - src-openeuler/platform_packages_apps_PackageInstaller
- - src-openeuler/platform_build
- - src-openeuler/platform_manifests
-- name: sig-perl-modules
- repositories:
- - src-openeuler/biber
- - src-openeuler/inst-source-utils
- - src-openeuler/latexmk
- - src-openeuler/perl-accessors
- - src-openeuler/perl-Acme-Damn
- - src-openeuler/perl-Algorithm-Combinatorics
- - src-openeuler/perl-Algorithm-Dependency
- - src-openeuler/perl-Algorithm-Diff
- - src-openeuler/perl-Algorithm-Diff-XS
- - src-openeuler/perl-Algorithm-Loops
- - src-openeuler/perl-Algorithm-LUHN
- - src-openeuler/perl-Algorithm-NaiveBayes
- - src-openeuler/perl-aliased
- - src-openeuler/perl-Alien-Build
- - src-openeuler/perl-Alien-Libxml2
- - src-openeuler/perl-Alien-Packages
- - src-openeuler/perl-Any-Moose
- - src-openeuler/perl-Any-URI-Escape
- - src-openeuler/perl-AnyEvent
- - src-openeuler/perl-Apache-LogFormat-Compiler
- - src-openeuler/perl-Apache-Session
- - src-openeuler/perl-Apache-Session-Wrapper
- - src-openeuler/perl-App-Cmd
- - src-openeuler/perl-App-FatPacker
- - src-openeuler/perl-AppConfig
- - src-openeuler/perl-Archive-Any-Lite
- - src-openeuler/perl-Archive-Tar
- - src-openeuler/perl-autobox
- - src-openeuler/perl-autobox-Core
- - src-openeuler/perl-autodie
- - src-openeuler/perl-B-Compiling
- - src-openeuler/perl-B-COW
- - src-openeuler/perl-B-Debug
- - src-openeuler/perl-B-Hooks-EndOfScope
- - src-openeuler/perl-B-Hooks-OP-Annotation
- - src-openeuler/perl-B-Hooks-OP-Check
- - src-openeuler/perl-B-Hooks-OP-PPAddr
- - src-openeuler/perl-B-Hooks-Parser
- - src-openeuler/perl-B-Keywords
- - src-openeuler/perl-B-Utils
- - src-openeuler/perl-bareword-filehandles
- - src-openeuler/perl-Biblio-EndnoteStyle
- - src-openeuler/perl-BibTeX-Parser
- - src-openeuler/perl-bignum
- - src-openeuler/perl-Browser-Open
- - src-openeuler/perl-Business-CreditCard
- - src-openeuler/perl-Business-Hours
- - src-openeuler/perl-Business-ISMN
- - src-openeuler/perl-Business-ISSN
- - src-openeuler/perl-Business-Stripe
- - src-openeuler/perl-Cache-Cache
- - src-openeuler/perl-Cache-FastMmap
- - src-openeuler/perl-Cache-LRU
- - src-openeuler/perl-Cache-Memcached
- - src-openeuler/perl-CAD-Format-STL
- - src-openeuler/perl-Carp
- - src-openeuler/perl-Carp-Assert
- - src-openeuler/perl-Carp-Assert-More
- - src-openeuler/perl-Carp-Fix-1_25
- - src-openeuler/perl-Carton
- - src-openeuler/perl-Catalyst-Manual
- - src-openeuler/perl-Catalyst-Plugin-CustomErrorMessage
- - src-openeuler/perl-CBOR-XS
- - src-openeuler/perl-CDDB
- - src-openeuler/perl-CGI-Ajax
- - src-openeuler/perl-CGI-Application
- - src-openeuler/perl-CGI-Application-Plugin-ConfigAuto
- - src-openeuler/perl-CGI-Application-Plugin-DBH
- - src-openeuler/perl-CGI-Application-Plugin-DBIC-Schema
- - src-openeuler/perl-CGI-Application-Plugin-DevPopup
- - src-openeuler/perl-CGI-Application-Plugin-ErrorPage
- - src-openeuler/perl-CGI-Application-Plugin-FillInForm
- - src-openeuler/perl-CGI-Application-Plugin-FormState
- - src-openeuler/perl-CGI-Application-Plugin-JSON
- - src-openeuler/perl-CGI-Application-Plugin-LinkIntegrity
- - src-openeuler/perl-CGI-Application-Plugin-MessageStack
- - src-openeuler/perl-CGI-Application-Plugin-Redirect
- - src-openeuler/perl-CGI-Application-Plugin-Session
- - src-openeuler/perl-CGI-Application-Plugin-Stream
- - src-openeuler/perl-CGI-Application-Plugin-TT
- - src-openeuler/perl-CGI-Application-PSGI
- - src-openeuler/perl-CGI-Application-Standard-Config
- - src-openeuler/perl-CGI-Deurl-XS
- - src-openeuler/perl-CGI-Emulate-PSGI
- - src-openeuler/perl-CGI-Ex
- - src-openeuler/perl-CGI-Fast
- - src-openeuler/perl-CGI-FormBuilder
- - src-openeuler/perl-CGI-Prototype
- - src-openeuler/perl-CGI-PSGI
- - src-openeuler/perl-CGI-Session
- - src-openeuler/perl-CGI-Session-Driver-memcached
- - src-openeuler/perl-CGI-Simple
- - src-openeuler/perl-CGI-Struct
- - src-openeuler/perl-Chatbot-Eliza
- - src-openeuler/perl-Check-ISA
- - src-openeuler/perl-Child
- - src-openeuler/perl-ClamAV-Client
- - src-openeuler/perl-CLASS
- - src-openeuler/perl-Class-Accessor
- - src-openeuler/perl-Class-Accessor-Chained
- - src-openeuler/perl-Class-Accessor-Classy
- - src-openeuler/perl-Class-Accessor-Grouped
- - src-openeuler/perl-Class-Accessor-Lite
- - src-openeuler/perl-Class-Adapter
- - src-openeuler/perl-Class-Autouse
- - src-openeuler/perl-Class-Base
- - src-openeuler/perl-Class-C3
- - src-openeuler/perl-Class-C3-Adopt-NEXT
- - src-openeuler/perl-Class-C3-Componentised
- - src-openeuler/perl-Class-C3-XS
- - src-openeuler/perl-Class-Can
- - src-openeuler/perl-Class-Container
- - src-openeuler/perl-Class-Data-Accessor
- - src-openeuler/perl-Class-Date
- - src-openeuler/perl-Class-ErrorHandler
- - src-openeuler/perl-Class-Factory-Util
- - src-openeuler/perl-Class-Field
- - src-openeuler/perl-Class-ISA
- - src-openeuler/perl-Class-Load
- - src-openeuler/perl-Class-Load-XS
- - src-openeuler/perl-Class-MethodMaker
- - src-openeuler/perl-Class-Prototyped
- - src-openeuler/perl-Class-Refresh
- - src-openeuler/perl-Class-ReturnValue
- - src-openeuler/perl-Class-Std
- - src-openeuler/perl-Class-Std-Fast
- - src-openeuler/perl-Class-Throwable
- - src-openeuler/perl-Class-Tiny
- - src-openeuler/perl-Class-Trigger
- - src-openeuler/perl-Class-Unload
- - src-openeuler/perl-Class-Utils
- - src-openeuler/perl-Class-Virtual
- - src-openeuler/perl-Clipboard
- - src-openeuler/perl-Clone
- - src-openeuler/perl-Clone-Choose
- - src-openeuler/perl-Clone-PP
- - src-openeuler/perl-Color-Library
- - src-openeuler/perl-Command-Runner
- - src-openeuler/perl-Commandable
- - src-openeuler/perl-Compress-LZ4
- - src-openeuler/perl-Compress-LZF
- - src-openeuler/perl-Compress-Raw-Bzip2
- - src-openeuler/perl-Compress-Raw-Zlib
- - src-openeuler/perl-Compress-Snappy
- - src-openeuler/perl-Config-Any
- - src-openeuler/perl-Config-Auto
- - src-openeuler/perl-Config-Extend-MySQL
- - src-openeuler/perl-Config-GitLike
- - src-openeuler/perl-Config-Grammar
- - src-openeuler/perl-Config-INI
- - src-openeuler/perl-Config-INI-Reader-Multiline
- - src-openeuler/perl-Config-INI-Reader-Ordered
- - src-openeuler/perl-Config-Perl-V
- - src-openeuler/perl-Config-Properties
- - src-openeuler/perl-Config-Std
- - src-openeuler/perl-Config-Tiny
- - src-openeuler/perl-Config-ZOMG
- - src-openeuler/perl-Const-Fast
- - src-openeuler/perl-constant
- - src-openeuler/perl-constant-boolean
- - src-openeuler/perl-constant-defer
- - src-openeuler/perl-constant-tiny
- - src-openeuler/perl-Context-Preserve
- - src-openeuler/perl-Contextual-Return
- - src-openeuler/perl-Convert-ASN1
- - src-openeuler/perl-Convert-Base32
- - src-openeuler/perl-Convert-Base64
- - src-openeuler/perl-Convert-Bencode
- - src-openeuler/perl-Convert-BER
- - src-openeuler/perl-Convert-Binary-C
- - src-openeuler/perl-Convert-BinHex
- - src-openeuler/perl-Convert-Color
- - src-openeuler/perl-Convert-Color-XTerm
- - src-openeuler/perl-Convert-NLS_DATE_FORMAT
- - src-openeuler/perl-Convert-TNEF
- - src-openeuler/perl-Convert-UU
- - src-openeuler/perl-Cookie-Baker
- - src-openeuler/perl-CPAN-Common-Index
- - src-openeuler/perl-CPAN-DistnameInfo
- - src-openeuler/perl-CPAN-Meta
- - src-openeuler/perl-CPAN-Meta-Check
- - src-openeuler/perl-CPAN-Meta-Requirements
- - src-openeuler/perl-CPAN-Meta-YAML
- - src-openeuler/perl-Cpanel-JSON-XS
- - src-openeuler/perl-Crypt-Blowfish
- - src-openeuler/perl-Crypt-ECB
- - src-openeuler/perl-Crypt-GeneratePassword
- - src-openeuler/perl-Crypt-GPG
- - src-openeuler/perl-Crypt-IDEA
- - src-openeuler/perl-Crypt-OpenSSL-DSA
- - src-openeuler/perl-Crypt-OpenSSL-EC
- - src-openeuler/perl-Crypt-OpenSSL-PKCS10
- - src-openeuler/perl-Crypt-OpenSSL-X509
- - src-openeuler/perl-Crypt-RandPasswd
- - src-openeuler/perl-Crypt-Rijndael
- - src-openeuler/perl-Crypt-Salsa20
- - src-openeuler/perl-Crypt-SaltedHash
- - src-openeuler/perl-Crypt-ScryptKDF
- - src-openeuler/perl-Crypt-UnixCrypt_XS
- - src-openeuler/perl-Crypt-URandom
- - src-openeuler/perl-Crypt-X509
- - src-openeuler/perl-CSS-DOM
- - src-openeuler/perl-CSS-Minifier-XS
- - src-openeuler/perl-CSS-Squish
- - src-openeuler/perl-CSS-Tiny
- - src-openeuler/perl-curry
- - src-openeuler/perl-Cwd-Guard
- - src-openeuler/perl-Cwd-utf8
- - src-openeuler/perl-Daemon-Control
- - src-openeuler/perl-Data-AsObject
- - src-openeuler/perl-Data-Binary
- - src-openeuler/perl-Data-Compare
- - src-openeuler/perl-Data-Dmp
- - src-openeuler/perl-Data-Dump-Streamer
- - src-openeuler/perl-Data-Dumper
- - src-openeuler/perl-Data-Dumper-Concise
- - src-openeuler/perl-Data-Dumper-Names
- - src-openeuler/perl-Data-Munge
- - src-openeuler/perl-Data-Page
- - src-openeuler/perl-Data-Perl
- - src-openeuler/perl-Data-Section-Simple
- - src-openeuler/perl-Data-Stream-Bulk
- - src-openeuler/perl-Data-TreeDumper
- - src-openeuler/perl-Data-Tumbler
- - src-openeuler/perl-Data-Validate-Type
- - src-openeuler/perl-Database-DumpTruck
- - src-openeuler/perl-Date-Calc-XS
- - src-openeuler/perl-Date-Easter
- - src-openeuler/perl-Date-Holidays-DE
- - src-openeuler/perl-Date-ISO8601
- - src-openeuler/perl-Date-JD
- - src-openeuler/perl-Date-Leapyear
- - src-openeuler/perl-Date-Simple
- - src-openeuler/perl-Date-Tiny
- - src-openeuler/perl-DB_File
- - src-openeuler/perl-DBD-Mock
- - src-openeuler/perl-DBD-Pg
- - src-openeuler/perl-DBD-SQLite2
- - src-openeuler/perl-DBD-XBase
- - src-openeuler/perl-DBI
- - src-openeuler/perl-DBICx-AutoDoc
- - src-openeuler/perl-DBIx-Class
- - src-openeuler/perl-DBIx-Class-Candy
- - src-openeuler/perl-DBIx-Class-Cursor-Cached
- - src-openeuler/perl-DBIx-Class-IntrospectableM2M
- - src-openeuler/perl-DBIx-Class-OptimisticLocking
- - src-openeuler/perl-DBIx-Class-Schema-Config
- - src-openeuler/perl-DBIx-Connector
- - src-openeuler/perl-DBIx-DBSchema
- - src-openeuler/perl-DBIx-Introspector
- - src-openeuler/perl-DBIx-RunSQL
- - src-openeuler/perl-DBIx-Simple
- - src-openeuler/perl-DBIx-XHTML_Table
- - src-openeuler/perl-DBM-Deep
- - src-openeuler/perl-Debug-ShowStuff
- - src-openeuler/perl-Declare-Constraints-Simple
- - src-openeuler/perl-Devel-Autoflush
- - src-openeuler/perl-Devel-Caller
- - src-openeuler/perl-Devel-Caller-IgnoreNamespaces
- - src-openeuler/perl-Devel-CheckBin
- - src-openeuler/perl-Devel-CheckCompiler
- - src-openeuler/perl-Devel-CheckOS
- - src-openeuler/perl-Devel-Confess
- - src-openeuler/perl-Devel-Cycle
- - src-openeuler/perl-Devel-Dumpvar
- - src-openeuler/perl-Devel-EnforceEncapsulation
- - src-openeuler/perl-Devel-FindPerl
- - src-openeuler/perl-Devel-Gladiator
- - src-openeuler/perl-Devel-GoFaster
- - src-openeuler/perl-Devel-Hexdump
- - src-openeuler/perl-Devel-LexAlias
- - src-openeuler/perl-Devel-MAT-Dumper
- - src-openeuler/perl-Devel-OverloadInfo
- - src-openeuler/perl-Devel-OverrideGlobalRequire
- - src-openeuler/perl-Devel-PartialDump
- - src-openeuler/perl-Devel-PPPort
- - src-openeuler/perl-Devel-Pragma
- - src-openeuler/perl-Devel-Refcount
- - src-openeuler/perl-Devel-SelfStubber
- - src-openeuler/perl-Devel-SimpleTrace
- - src-openeuler/perl-Devel-StackTrace-AsHTML
- - src-openeuler/perl-Devel-StackTrace-WithLexicals
- - src-openeuler/perl-Devel-StringInfo
- - src-openeuler/perl-Devel-Timer
- - src-openeuler/perl-Devel-Trace
- - src-openeuler/perl-Diff-LibXDiff
- - src-openeuler/perl-Digest-BubbleBabble
- - src-openeuler/perl-Digest-JHash
- - src-openeuler/perl-Digest-MD2
- - src-openeuler/perl-Digest-MD4
- - src-openeuler/perl-Digest-MD5
- - src-openeuler/perl-Digest-MD5-File
- - src-openeuler/perl-Digest-Nilsimsa
- - src-openeuler/perl-Digest-Perl-MD5
- - src-openeuler/perl-Digest-SHA
- - src-openeuler/perl-Dir-Manifest
- - src-openeuler/perl-Dir-Self
- - src-openeuler/perl-Directory-Scratch
- - src-openeuler/perl-Dist-Metadata
- - src-openeuler/perl-EBook-EPUB
- - src-openeuler/perl-ElasticSearch-SearchBuilder
- - src-openeuler/perl-Email-Abstract
- - src-openeuler/perl-Email-Address
- - src-openeuler/perl-Email-Address-List
- - src-openeuler/perl-Email-Address-XS
- - src-openeuler/perl-Email-Date
- - src-openeuler/perl-Email-MessageID
- - src-openeuler/perl-Email-MIME
- - src-openeuler/perl-Email-MIME-Attachment-Stripper
- - src-openeuler/perl-Email-MIME-ContentType
- - src-openeuler/perl-Email-MIME-Encodings
- - src-openeuler/perl-Email-Reply
- - src-openeuler/perl-Email-Send
- - src-openeuler/perl-Email-Sender
- - src-openeuler/perl-Email-Simple
- - src-openeuler/perl-Encode
- - src-openeuler/perl-Encode-IMAPUTF7
- - src-openeuler/perl-Encode-Locale
- - src-openeuler/perl-Encode-Newlines
- - src-openeuler/perl-End
- - src-openeuler/perl-enum
- - src-openeuler/perl-Env
- - src-openeuler/perl-Env-C
- - src-openeuler/perl-Env-Path
- - src-openeuler/perl-Env-Sanctify
- - src-openeuler/perl-Error
- - src-openeuler/perl-Error-Pure
- - src-openeuler/perl-Error-Pure-Output-Text
- - src-openeuler/perl-Eval-Closure
- - src-openeuler/perl-Eval-LineNumbers
- - src-openeuler/perl-Eval-WithLexicals
- - src-openeuler/perl-Event
- - src-openeuler/perl-Excel-Writer-XLSX
- - src-openeuler/perl-Exception-Base
- - src-openeuler/perl-Exception-Class
- - src-openeuler/perl-Exception-Class-TryCatch
- - src-openeuler/perl-Exception-Tiny
- - src-openeuler/perl-Expect-Simple
- - src-openeuler/perl-experimental
- - src-openeuler/perl-Export-Attrs
- - src-openeuler/perl-Exporter
- - src-openeuler/perl-Exporter-Declare
- - src-openeuler/perl-Exporter-Declare-Magic
- - src-openeuler/perl-Exporter-Easy
- - src-openeuler/perl-Exporter-Lite
- - src-openeuler/perl-Exporter-Tiny
- - src-openeuler/perl-ExtUtils-AutoInstall
- - src-openeuler/perl-ExtUtils-CChecker
- - src-openeuler/perl-ExtUtils-HasCompiler
- - src-openeuler/perl-ExtUtils-InferConfig
- - src-openeuler/perl-ExtUtils-Install
- - src-openeuler/perl-ExtUtils-LibBuilder
- - src-openeuler/perl-ExtUtils-Manifest
- - src-openeuler/perl-ExtUtils-ParseXS
- - src-openeuler/perl-ExtUtils-TBone
- - src-openeuler/perl-ExtUtils-Typemap
- - src-openeuler/perl-ExtUtils-Typemaps-Default
- - src-openeuler/perl-failures
- - src-openeuler/perl-FCGI
- - src-openeuler/perl-FCGI-ProcManager
- - src-openeuler/perl-Fennec-Lite
- - src-openeuler/perl-FFI-CheckLib
- - src-openeuler/perl-File-BOM
- - src-openeuler/perl-File-chdir
- - src-openeuler/perl-File-CheckTree
- - src-openeuler/perl-File-chmod
- - src-openeuler/perl-File-ConfigDir
- - src-openeuler/perl-File-Copy-Recursive-Reduced
- - src-openeuler/perl-File-FcntlLock
- - src-openeuler/perl-File-Fetch
- - src-openeuler/perl-File-Find-Object
- - src-openeuler/perl-File-Find-Object-Rule
- - src-openeuler/perl-File-Find-Rule
- - src-openeuler/perl-File-Find-Rule-Perl
- - src-openeuler/perl-File-Find-Rule-PPI
- - src-openeuler/perl-File-Find-Rule-VCS
- - src-openeuler/perl-File-Find-utf8
- - src-openeuler/perl-File-FindLib
- - src-openeuler/perl-File-Flat
- - src-openeuler/perl-File-HomeDir
- - src-openeuler/perl-File-KeePass
- - src-openeuler/perl-File-LoadLines
- - src-openeuler/perl-File-Map
- - src-openeuler/perl-File-MMagic
- - src-openeuler/perl-File-Modified
- - src-openeuler/perl-File-NCopy
- - src-openeuler/perl-File-NFSLock
- - src-openeuler/perl-File-Object
- - src-openeuler/perl-File-Path
- - src-openeuler/perl-File-Path-Tiny
- - src-openeuler/perl-File-PathList
- - src-openeuler/perl-File-Read
- - src-openeuler/perl-File-SearchPath
- - src-openeuler/perl-File-Share
- - src-openeuler/perl-File-ShareDir-ProjectDistDir
- - src-openeuler/perl-File-Slurp-Tiny
- - src-openeuler/perl-File-Slurper
- - src-openeuler/perl-File-Spec-Native
- - src-openeuler/perl-File-Temp
- - src-openeuler/perl-File-Touch
- - src-openeuler/perl-File-Type
- - src-openeuler/perl-File-Type-WebImages
- - src-openeuler/perl-File-Which
- - src-openeuler/perl-File-Zglob
- - src-openeuler/perl-FileHandle-Fmode
- - src-openeuler/perl-FileHandle-Unget
- - src-openeuler/perl-Filesys-Notify-Simple
- - src-openeuler/perl-Filter
- - src-openeuler/perl-Filter-Simple
- - src-openeuler/perl-Finance-YahooQuote
- - src-openeuler/perl-Flow
- - src-openeuler/perl-Format-Human-Bytes
- - src-openeuler/perl-FreezeThaw
- - src-openeuler/perl-Games-Solitaire-Verify
- - src-openeuler/perl-GD-SVG
- - src-openeuler/perl-Geo-Constants
- - src-openeuler/perl-Geo-Ellipsoids
- - src-openeuler/perl-Geo-Forward
- - src-openeuler/perl-Geo-Functions
- - src-openeuler/perl-Geo-Inverse
- - src-openeuler/perl-Geo-IP
- - src-openeuler/perl-Geo-IPfree
- - src-openeuler/perl-Geography-Countries
- - src-openeuler/perl-Getopt-ArgvFile
- - src-openeuler/perl-Getopt-Euclid
- - src-openeuler/perl-Getopt-Long
- - src-openeuler/perl-Getopt-Long-Descriptive
- - src-openeuler/perl-Getopt-Lucid
- - src-openeuler/perl-Getopt-Simple
- - src-openeuler/perl-Git-Repository
- - src-openeuler/perl-Git-Repository-Plugin-AUTOLOAD
- - src-openeuler/perl-Git-Version-Compare
- - src-openeuler/perl-Git-Wrapper
- - src-openeuler/perl-GPS-OID
- - src-openeuler/perl-Graph
- - src-openeuler/perl-Graphics-ColorNames
- - src-openeuler/perl-Graphics-ColorNames-WWW
- - src-openeuler/perl-Graphics-ColorNamesLite-WWW
- - src-openeuler/perl-Growl-GNTP
- - src-openeuler/perl-Guard
- - src-openeuler/perl-Ham-Reference-QRZ
- - src-openeuler/perl-HarfBuzz-Shaper
- - src-openeuler/perl-Hash-Case
- - src-openeuler/perl-Hash-Diff
- - src-openeuler/perl-Hash-Flatten
- - src-openeuler/perl-Hash-Merge
- - src-openeuler/perl-Hash-Merge-Simple
- - src-openeuler/perl-Hash-MoreUtils
- - src-openeuler/perl-Hash-MultiValue
- - src-openeuler/perl-Hash-Util-FieldHash-Compat
- - src-openeuler/perl-Hook-LexWrap
- - src-openeuler/perl-HTML-Defang
- - src-openeuler/perl-HTML-Encoding
- - src-openeuler/perl-HTML-FillInForm
- - src-openeuler/perl-HTML-Form
- - src-openeuler/perl-HTML-Format
- - src-openeuler/perl-HTML-GenToc
- - src-openeuler/perl-HTML-HTML5-Entities
- - src-openeuler/perl-HTML-LinkList
- - src-openeuler/perl-HTML-Lint
- - src-openeuler/perl-HTML-Mason
- - src-openeuler/perl-HTML-Quoted
- - src-openeuler/perl-HTML-RewriteAttributes
- - src-openeuler/perl-HTML-Scrubber
- - src-openeuler/perl-HTML-SimpleParse
- - src-openeuler/perl-HTML-Strip
- - src-openeuler/perl-HTML-StripScripts
- - src-openeuler/perl-HTML-StripScripts-Parser
- - src-openeuler/perl-HTML-Table
- - src-openeuler/perl-HTML-TagCloud
- - src-openeuler/perl-HTML-Template
- - src-openeuler/perl-HTML-Template-Pro
- - src-openeuler/perl-HTML-Tiny
- - src-openeuler/perl-HTML-TokeParser-Simple
- - src-openeuler/perl-HTTP-Body
- - src-openeuler/perl-HTTP-BrowserDetect
- - src-openeuler/perl-HTTP-Cache-Transparent
- - src-openeuler/perl-HTTP-CookieMonster
- - src-openeuler/perl-HTTP-Exception
- - src-openeuler/perl-HTTP-Headers-Fast
- - src-openeuler/perl-HTTP-Link-Parser
- - src-openeuler/perl-HTTP-Lite
- - src-openeuler/perl-HTTP-MultiPartParser
- - src-openeuler/perl-HTTP-Parser
- - src-openeuler/perl-HTTP-Parser-XS
- - src-openeuler/perl-HTTP-Request-AsCGI
- - src-openeuler/perl-HTTP-Request-Params
- - src-openeuler/perl-HTTP-Response-Encoding
- - src-openeuler/perl-HTTP-Server-Simple
- - src-openeuler/perl-HTTP-Server-Simple-PSGI
- - src-openeuler/perl-HTTP-Thin
- - src-openeuler/perl-HTTP-Tiny
- - src-openeuler/perl-HTTP-Tiny-Multipart
- - src-openeuler/perl-HTTP-Tinyish
- - src-openeuler/perl-Image-Base
- - src-openeuler/perl-Image-ExifTool
- - src-openeuler/perl-Image-Math-Constrain
- - src-openeuler/perl-Image-Size
- - src-openeuler/perl-Image-Xbm
- - src-openeuler/perl-Image-Xpm
- - src-openeuler/perl-Importer
- - src-openeuler/perl-indirect
- - src-openeuler/perl-Inline
- - src-openeuler/perl-IO
- - src-openeuler/perl-IO-Any
- - src-openeuler/perl-IO-Compress
- - src-openeuler/perl-IO-Interactive
- - src-openeuler/perl-IO-Interface
- - src-openeuler/perl-IO-Pager
- - src-openeuler/perl-IO-Pipely
- - src-openeuler/perl-IO-Prompt-Tiny
- - src-openeuler/perl-IO-Prompter
- - src-openeuler/perl-IO-Pty-Easy
- - src-openeuler/perl-IO-Socket-IP
- - src-openeuler/perl-IO-Socket-Multicast
- - src-openeuler/perl-IO-Socket-Socks
- - src-openeuler/perl-IO-Socket-SSL
- - src-openeuler/perl-IO-Socket-Timeout
- - src-openeuler/perl-IO-Stty
- - src-openeuler/perl-IO-Tee
- - src-openeuler/perl-IO-TieCombine
- - src-openeuler/perl-IPC-Cmd
- - src-openeuler/perl-IPC-Run
- - src-openeuler/perl-IPC-Run3
- - src-openeuler/perl-IPC-ShareLite
- - src-openeuler/perl-IPC-System-Simple
- - src-openeuler/perl-IPC-SysV
- - src-openeuler/perl-IPTables-ChainMgr
- - src-openeuler/perl-IPTables-Parse
- - src-openeuler/perl-IRC-Utils
- - src-openeuler/perl-Iterator-Simple
- - src-openeuler/perl-Iterator-Simple-Lookahead
- - src-openeuler/perl-JavaScript-Beautifier
- - src-openeuler/perl-JSON-Parse
- - src-openeuler/perl-JSON-Pointer
- - src-openeuler/perl-JSON-PP
- - src-openeuler/perl-JSON-RPC-Common
- - src-openeuler/perl-JSON-Tiny
- - src-openeuler/perl-L
- - src-openeuler/perl-Language-Functional
- - src-openeuler/perl-latest
- - src-openeuler/perl-LaTeX-ToUnicode
- - src-openeuler/perl-Lchown
- - src-openeuler/perl-Lexical-Persistence
- - src-openeuler/perl-Lexical-SealRequireHints
- - src-openeuler/perl-lexical-underscore
- - src-openeuler/perl-lib-abs
- - src-openeuler/perl-lib-relative
- - src-openeuler/perl-libnet
- - src-openeuler/perl-Library-CallNumber-LC
- - src-openeuler/perl-Lingua-EN-Alphabet-Shaw
- - src-openeuler/perl-Lingua-EN-Fathom
- - src-openeuler/perl-Lingua-EN-FindNumber
- - src-openeuler/perl-Lingua-EN-Inflect
- - src-openeuler/perl-Lingua-EN-Inflect-Number
- - src-openeuler/perl-Lingua-EN-Number-IsOrdinal
- - src-openeuler/perl-Lingua-EN-Numbers
- - src-openeuler/perl-Lingua-EN-Numbers-Easy
- - src-openeuler/perl-Lingua-EN-Numbers-Ordinate
- - src-openeuler/perl-Lingua-EN-PluralToSingular
- - src-openeuler/perl-Lingua-EN-Sentence
- - src-openeuler/perl-Lingua-EN-Syllable
- - src-openeuler/perl-Lingua-EN-Words2Nums
- - src-openeuler/perl-Lingua-Flags
- - src-openeuler/perl-Lingua-Identify
- - src-openeuler/perl-Lingua-KO-Hangul-Util
- - src-openeuler/perl-Lingua-PT-Stemmer
- - src-openeuler/perl-Lingua-Stem-Ru
- - src-openeuler/perl-Lingua-Stem-Snowball
- - src-openeuler/perl-Lingua-Translit
- - src-openeuler/perl-List-AllUtils
- - src-openeuler/perl-List-MoreUtils
- - src-openeuler/perl-List-MoreUtils-XS
- - src-openeuler/perl-List-Pairwise
- - src-openeuler/perl-List-SomeUtils
- - src-openeuler/perl-List-SomeUtils-XS
- - src-openeuler/perl-List-UtilsBy
- - src-openeuler/perl-Locale-Codes
- - src-openeuler/perl-Locale-Currency-Format
- - src-openeuler/perl-Locale-Maketext
- - src-openeuler/perl-Locale-Maketext-Gettext
- - src-openeuler/perl-Locale-Maketext-Lexicon
- - src-openeuler/perl-Locale-Maketext-Simple
- - src-openeuler/perl-Locale-MO-File
- - src-openeuler/perl-Locale-Msgfmt
- - src-openeuler/perl-Locale-PO
- - src-openeuler/perl-Locale-SubCountry
- - src-openeuler/perl-Locale-TextDomain-OO
- - src-openeuler/perl-Locale-TextDomain-OO-Util
- - src-openeuler/perl-Locale-US
- - src-openeuler/perl-Locale-Utils-PlaceholderBabelFish
- - src-openeuler/perl-Locale-Utils-PlaceholderMaketext
- - src-openeuler/perl-Locale-Utils-PlaceholderNamed
- - src-openeuler/perl-Log-Any
- - src-openeuler/perl-Log-Contextual
- - src-openeuler/perl-Log-Dispatch
- - src-openeuler/perl-Log-ger
- - src-openeuler/perl-Log-Handler
- - src-openeuler/perl-Log-Log4perl
- - src-openeuler/perl-Log-Message
- - src-openeuler/perl-Log-Message-Simple
- - src-openeuler/perl-Log-Trace
- - src-openeuler/perl-Log-Trivial
- - src-openeuler/perl-LWP-Online
- - src-openeuler/perl-Mail-AuthenticationResults
- - src-openeuler/perl-Mail-Box
- - src-openeuler/perl-Mail-Box-Parser-C
- - src-openeuler/perl-Mail-Box-POP3
- - src-openeuler/perl-Mail-IMAPTalk
- - src-openeuler/perl-Mail-JMAPTalk
- - src-openeuler/perl-Mail-Message
- - src-openeuler/perl-Mail-Sendmail
- - src-openeuler/perl-Mail-SPF
- - src-openeuler/perl-Mail-Transport
- - src-openeuler/perl-Makefile-DOM
- - src-openeuler/perl-MasonX-Request-WithApacheSession
- - src-openeuler/perl-Math-Base36
- - src-openeuler/perl-Math-Base85
- - src-openeuler/perl-Math-BaseCnv
- - src-openeuler/perl-Math-BigInt
- - src-openeuler/perl-Math-BigInt-FastCalc
- - src-openeuler/perl-Math-BigRat
- - src-openeuler/perl-Math-Calc-Units
- - src-openeuler/perl-Math-Cartesian-Product
- - src-openeuler/perl-Math-Complex
- - src-openeuler/perl-Math-ConvexHull
- - src-openeuler/perl-Math-ConvexHull-MonotoneChain
- - src-openeuler/perl-Math-Derivative
- - src-openeuler/perl-Math-Expression-Evaluator
- - src-openeuler/perl-Math-FFT
- - src-openeuler/perl-Math-Int64
- - src-openeuler/perl-Math-MatrixReal
- - src-openeuler/perl-Math-Polygon
- - src-openeuler/perl-Math-Round
- - src-openeuler/perl-Math-Spline
- - src-openeuler/perl-Math-Utils
- - src-openeuler/perl-Math-Vec
- - src-openeuler/perl-MemHandle
- - src-openeuler/perl-Memoize
- - src-openeuler/perl-Menlo
- - src-openeuler/perl-Menlo-Legacy
- - src-openeuler/perl-Meta-Builder
- - src-openeuler/perl-Method-Signatures-Simple
- - src-openeuler/perl-Metrics-Any
- - src-openeuler/perl-MIME-Base32
- - src-openeuler/perl-MIME-Base64
- - src-openeuler/perl-MIME-Charset
- - src-openeuler/perl-MIME-EncWords
- - src-openeuler/perl-MIME-tools
- - src-openeuler/perl-mixin
- - src-openeuler/perl-Mixin-ExtraFields
- - src-openeuler/perl-Mixin-Linewise
- - src-openeuler/perl-Mock-Config
- - src-openeuler/perl-Mock-Quick
- - src-openeuler/perl-Mock-Sub
- - src-openeuler/perl-Modern-Perl
- - src-openeuler/perl-Module-Build-Deprecated
- - src-openeuler/perl-Module-Build-Pluggable
- - src-openeuler/perl-Module-Build-Using-PkgConfig
- - src-openeuler/perl-Module-Compile
- - src-openeuler/perl-Module-CoreList
- - src-openeuler/perl-Module-CPANfile
- - src-openeuler/perl-Module-Data
- - src-openeuler/perl-Module-Depends
- - src-openeuler/perl-Module-Extract
- - src-openeuler/perl-Module-Extract-Namespaces
- - src-openeuler/perl-Module-Extract-Use
- - src-openeuler/perl-Module-Find
- - src-openeuler/perl-Module-Install-Authority
- - src-openeuler/perl-Module-Install-AutoManifest
- - src-openeuler/perl-Module-Install-ExtraTests
- - src-openeuler/perl-Module-Install-TestBase
- - src-openeuler/perl-Module-Install-TrustMetaYml
- - src-openeuler/perl-Module-Load
- - src-openeuler/perl-Module-Load-Conditional
- - src-openeuler/perl-Module-Load-Util
- - src-openeuler/perl-Module-Manifest
- - src-openeuler/perl-Module-Mask
- - src-openeuler/perl-Module-Math-Depends
- - src-openeuler/perl-Module-Metadata
- - src-openeuler/perl-Module-Path
- - src-openeuler/perl-Module-Pluggable
- - src-openeuler/perl-Module-Reader
- - src-openeuler/perl-Module-Refresh
- - src-openeuler/perl-Module-Runtime-Conflicts
- - src-openeuler/perl-Module-Signature
- - src-openeuler/perl-Module-Starter
- - src-openeuler/perl-Module-Util
- - src-openeuler/perl-MogileFS-Client
- - src-openeuler/perl-MogileFS-Utils
- - src-openeuler/perl-Mojo-DOM58
- - src-openeuler/perl-Monitoring-Plugin
- - src-openeuler/perl-Monotone-AutomateStdio
- - src-openeuler/perl-Moose
- - src-openeuler/perl-Moose-Autobox
- - src-openeuler/perl-MooseX-Aliases
- - src-openeuler/perl-MooseX-App-Cmd
- - src-openeuler/perl-MooseX-ArrayRef
- - src-openeuler/perl-MooseX-Async
- - src-openeuler/perl-MooseX-Attribute-Chained
- - src-openeuler/perl-MooseX-CascadeClearing
- - src-openeuler/perl-MooseX-ClassAttribute
- - src-openeuler/perl-MooseX-CoercePerAttribute
- - src-openeuler/perl-MooseX-ConfigFromFile
- - src-openeuler/perl-MooseX-Configuration
- - src-openeuler/perl-MooseX-Daemonize
- - src-openeuler/perl-MooseX-Emulate-Class-Accessor-Fast
- - src-openeuler/perl-MooseX-Getopt
- - src-openeuler/perl-MooseX-GlobRef
- - src-openeuler/perl-MooseX-Has-Options
- - src-openeuler/perl-MooseX-Has-Sugar
- - src-openeuler/perl-MooseX-InsideOut
- - src-openeuler/perl-MooseX-Iterator
- - src-openeuler/perl-MooseX-LazyRequire
- - src-openeuler/perl-MooseX-MarkAsMethods
- - src-openeuler/perl-MooseX-Meta-TypeConstraint-ForceCoercion
- - src-openeuler/perl-MooseX-Meta-TypeConstraint-Mooish
- - src-openeuler/perl-MooseX-MethodAttributes
- - src-openeuler/perl-MooseX-MultiInitArg
- - src-openeuler/perl-MooseX-NonMoose
- - src-openeuler/perl-MooseX-Object-Pluggable
- - src-openeuler/perl-MooseX-OneArgNew
- - src-openeuler/perl-MooseX-Param
- - src-openeuler/perl-MooseX-Params-Validate
- - src-openeuler/perl-MooseX-POE
- - src-openeuler/perl-MooseX-RelatedClassRoles
- - src-openeuler/perl-MooseX-Role-Cmd
- - src-openeuler/perl-MooseX-Role-Matcher
- - src-openeuler/perl-MooseX-Role-Parameterized
- - src-openeuler/perl-MooseX-Role-Strict
- - src-openeuler/perl-MooseX-Role-Tempdir
- - src-openeuler/perl-MooseX-SemiAffordanceAccessor
- - src-openeuler/perl-MooseX-SetOnce
- - src-openeuler/perl-MooseX-SimpleConfig
- - src-openeuler/perl-MooseX-Singleton
- - src-openeuler/perl-MooseX-StrictConstructor
- - src-openeuler/perl-MooseX-TraitFor-Meta-Class-BetterAnonClassNames
- - src-openeuler/perl-MooseX-Traits
- - src-openeuler/perl-MooseX-Traits-Pluggable
- - src-openeuler/perl-MooseX-Types
- - src-openeuler/perl-MooseX-Types-Common
- - src-openeuler/perl-MooseX-Types-LoadableClass
- - src-openeuler/perl-MooseX-Types-Path-Class
- - src-openeuler/perl-MooseX-Types-Path-Tiny
- - src-openeuler/perl-MooseX-Types-Perl
- - src-openeuler/perl-MooseX-Types-Stringlike
- - src-openeuler/perl-MooX
- - src-openeuler/perl-MooX-Cmd
- - src-openeuler/perl-MooX-ConfigFromFile
- - src-openeuler/perl-MooX-File-ConfigDir
- - src-openeuler/perl-MooX-HandlesVia
- - src-openeuler/perl-MooX-HasEnv
- - src-openeuler/perl-MooX-Locale-Passthrough
- - src-openeuler/perl-MooX-Locale-TextDomain-OO
- - src-openeuler/perl-MooX-Log-Any
- - src-openeuler/perl-MooX-Role-Parameterized
- - src-openeuler/perl-MooX-Roles-Pluggable
- - src-openeuler/perl-MooX-Singleton
- - src-openeuler/perl-MooX-StrictConstructor
- - src-openeuler/perl-Mozilla-LDAP
- - src-openeuler/perl-Mozilla-PublicSuffix
- - src-openeuler/perl-MP3-Info
- - src-openeuler/perl-multidimensional
- - src-openeuler/perl-namespace-autoclean
- - src-openeuler/perl-namespace-clean
- - src-openeuler/perl-namespace-sweep
- - src-openeuler/perl-Net-AMQP
- - src-openeuler/perl-Net-BGP
- - src-openeuler/perl-Net-CIDR
- - src-openeuler/perl-Net-Daemon
- - src-openeuler/perl-Net-DNS-Resolver-Programmable
- - src-openeuler/perl-Net-DNS-SEC
- - src-openeuler/perl-Net-Domain-TLD
- - src-openeuler/perl-Net-Google-AuthSub
- - src-openeuler/perl-Net-HL7
- - src-openeuler/perl-Net-INET6Glue
- - src-openeuler/perl-Net-IP
- - src-openeuler/perl-Net-IP-Match-Regexp
- - src-openeuler/perl-Net-IP-Minimal
- - src-openeuler/perl-Net-LDAP-SID
- - src-openeuler/perl-Net-MQTT-Simple
- - src-openeuler/perl-Net-OAuth
- - src-openeuler/perl-Net-OpenSSH
- - src-openeuler/perl-Net-Ping-External
- - src-openeuler/perl-Net-POP3S
- - src-openeuler/perl-Net-Random
- - src-openeuler/perl-Net-RawIP
- - src-openeuler/perl-Net-Server-SS-PreFork
- - src-openeuler/perl-Net-SFTP-Foreign
- - src-openeuler/perl-Net-SMTPS
- - src-openeuler/perl-Net-SSLeay
- - src-openeuler/perl-Net-Telnet
- - src-openeuler/perl-Net-Telnet-Cisco
- - src-openeuler/perl-Net-UPnP
- - src-openeuler/perl-Nmap-Parser
- - src-openeuler/perl-NNTPClient
- - src-openeuler/perl-Number-Bytes-Human
- - src-openeuler/perl-Number-Compare
- - src-openeuler/perl-Number-Format
- - src-openeuler/perl-Number-Misc
- - src-openeuler/perl-Number-Range
- - src-openeuler/perl-Number-Tolerant
- - src-openeuler/perl-Object-Accessor
- - src-openeuler/perl-Object-HashBase
- - src-openeuler/perl-Object-Pluggable
- - src-openeuler/perl-Object-Realize-Later
- - src-openeuler/perl-Object-Signature
- - src-openeuler/perl-Object-Tiny
- - src-openeuler/perl-OLE-Storage_Lite
- - src-openeuler/perl-Ouch
- - src-openeuler/perl-Package-Anon
- - src-openeuler/perl-Package-DeprecationManager
- - src-openeuler/perl-Package-New
- - src-openeuler/perl-Package-Stash
- - src-openeuler/perl-Package-Variant
- - src-openeuler/perl-PadWalker
- - src-openeuler/perl-Palm
- - src-openeuler/perl-Palm-PDB
- - src-openeuler/perl-Panotools-Script
- - src-openeuler/perl-PAR
- - src-openeuler/perl-PAR-Dist
- - src-openeuler/perl-Parallel-ForkManager
- - src-openeuler/perl-Parallel-Iterator
- - src-openeuler/perl-Parallel-Pipes
- - src-openeuler/perl-Parallel-Runner
- - src-openeuler/perl-Parallel-Scoreboard
- - src-openeuler/perl-Params-CallbackRequest
- - src-openeuler/perl-Params-Check
- - src-openeuler/perl-Params-Coerce
- - src-openeuler/perl-Params-Validate
- - src-openeuler/perl-parent
- - src-openeuler/perl-Parse-Debian-Packages
- - src-openeuler/perl-Parse-DMIDecode
- - src-openeuler/perl-Parse-EDID
- - src-openeuler/perl-Parse-ErrorString-Perl
- - src-openeuler/perl-Parse-ExuberantCTags
- - src-openeuler/perl-Parse-Gitignore
- - src-openeuler/perl-Parse-MIME
- - src-openeuler/perl-Parse-PMFile
- - src-openeuler/perl-Path-FindDev
- - src-openeuler/perl-Path-IsDev
- - src-openeuler/perl-Path-Iterator-Rule
- - src-openeuler/perl-Path-ScanINC
- - src-openeuler/perl-Path-Tiny-Rule
- - src-openeuler/perl-PathTools
- - src-openeuler/perl-PBKDF2-Tiny
- - src-openeuler/perl-PDF-Create
- - src-openeuler/perl-PDF-Reuse
- - src-openeuler/perl-Pegex
- - src-openeuler/perl-Perl-OSType
- - src-openeuler/perl-Perl-PrereqScanner
- - src-openeuler/perl-Perl-Stripper
- - src-openeuler/perl-Perl-Tidy
- - src-openeuler/perl-Perl-Tidy-Sweetened
- - src-openeuler/perl-Perl-Version
- - src-openeuler/perl-Perl6-Caller
- - src-openeuler/perl-Perl6-Junction
- - src-openeuler/perl-Perl6-Slurp
- - src-openeuler/perl-perlfaq
- - src-openeuler/perl-Perlilog
- - src-openeuler/perl-PerlIO-buffersize
- - src-openeuler/perl-PerlIO-eol
- - src-openeuler/perl-PerlIO-gzip
- - src-openeuler/perl-PerlIO-Layers
- - src-openeuler/perl-PerlIO-locale
- - src-openeuler/perl-PerlIO-utf8_strict
- - src-openeuler/perl-PerlIO-via-QuotedPrint
- - src-openeuler/perl-PerlIO-via-Timeout
- - src-openeuler/perl-PFT
- - src-openeuler/perl-PHP-Serialization
- - src-openeuler/perl-PkgConfig-LibPkgConf
- - src-openeuler/perl-Pod-Checker
- - src-openeuler/perl-Pod-Constants
- - src-openeuler/perl-Pod-Coverage-Moose
- - src-openeuler/perl-Pod-Coverage-TrustPod
- - src-openeuler/perl-Pod-Elemental
- - src-openeuler/perl-Pod-Elemental-PerlMunger
- - src-openeuler/perl-Pod-Escapes
- - src-openeuler/perl-Pod-Eventual
- - src-openeuler/perl-Pod-Markdown-Github
- - src-openeuler/perl-Pod-MinimumVersion
- - src-openeuler/perl-Pod-Parser
- - src-openeuler/perl-Pod-Perldoc
- - src-openeuler/perl-Pod-Plainer
- - src-openeuler/perl-Pod-POM
- - src-openeuler/perl-Pod-PseudoPod
- - src-openeuler/perl-Pod-Simple
- - src-openeuler/perl-Pod-Simple-Wiki
- - src-openeuler/perl-Pod-Snippets
- - src-openeuler/perl-Pod-Spell
- - src-openeuler/perl-Pod-Spell-CommonMistakes
- - src-openeuler/perl-Pod-Strip
- - src-openeuler/perl-Pod-Tidy
- - src-openeuler/perl-Pod-Usage
- - src-openeuler/perl-Pod-Wrap
- - src-openeuler/perl-Pod-Xhtml
- - src-openeuler/perl-POD2-Base
- - src-openeuler/perl-podlators
- - src-openeuler/perl-POE
- - src-openeuler/perl-POE-Test-Loops
- - src-openeuler/perl-POSIX-strftime-Compiler
- - src-openeuler/perl-POSIX-strptime
- - src-openeuler/perl-PPI
- - src-openeuler/perl-PPI-HTML
- - src-openeuler/perl-PPI-XS
- - src-openeuler/perl-PPIx-EditorTools
- - src-openeuler/perl-PPIx-QuoteLike
- - src-openeuler/perl-PPIx-Regexp
- - src-openeuler/perl-prefork
- - src-openeuler/perl-Printer
- - src-openeuler/perl-Proc-Daemon
- - src-openeuler/perl-Proc-InvokeEditor
- - src-openeuler/perl-Proc-PID-File
- - src-openeuler/perl-Proc-ProcessTable
- - src-openeuler/perl-Proc-Simple
- - src-openeuler/perl-Proc-Terminator
- - src-openeuler/perl-Proc-Wait3
- - src-openeuler/perl-Promises
- - src-openeuler/perl-PSGI
- - src-openeuler/perl-RDF-NS
- - src-openeuler/perl-RDF-NS-Curated
- - src-openeuler/perl-RDF-Prefixes
- - src-openeuler/perl-re-engine-PCRE2
- - src-openeuler/perl-ReadonlyX
- - src-openeuler/perl-Redis
- - src-openeuler/perl-Ref-Util
- - src-openeuler/perl-Ref-Util-XS
- - src-openeuler/perl-Regexp-Assemble
- - src-openeuler/perl-Regexp-Assemble-Compressed
- - src-openeuler/perl-Regexp-Common
- - src-openeuler/perl-Regexp-Common-net-CIDR
- - src-openeuler/perl-Regexp-Grammars
- - src-openeuler/perl-Regexp-IPv6
- - src-openeuler/perl-Regexp-Pattern
- - src-openeuler/perl-Regexp-Stringify
- - src-openeuler/perl-Regexp-Util
- - src-openeuler/perl-REST-Client
- - src-openeuler/perl-Retry
- - src-openeuler/perl-Return-MultiLevel
- - src-openeuler/perl-Return-Value
- - src-openeuler/perl-Role-Basic
- - src-openeuler/perl-Role-Identifiable
- - src-openeuler/perl-Roman
- - src-openeuler/perl-Router-Simple
- - src-openeuler/perl-Safe-Isa
- - src-openeuler/perl-Scalar-Construct
- - src-openeuler/perl-Scalar-List-Utils
- - src-openeuler/perl-Scalar-String
- - src-openeuler/perl-Schedule-Cron
- - src-openeuler/perl-Scope-Guard
- - src-openeuler/perl-Scope-Upper
- - src-openeuler/perl-Scriptalicious
- - src-openeuler/perl-SelfLoader
- - src-openeuler/perl-Server-Starter
- - src-openeuler/perl-Set-Array
- - src-openeuler/perl-Set-Crontab
- - src-openeuler/perl-Set-Infinite
- - src-openeuler/perl-Set-IntSpan
- - src-openeuler/perl-Set-Scalar
- - src-openeuler/perl-Set-Tiny
- - src-openeuler/perl-Shell
- - src-openeuler/perl-Shell-Guess
- - src-openeuler/perl-Smart-Comments
- - src-openeuler/perl-Snowball-Swedish
- - src-openeuler/perl-Socket
- - src-openeuler/perl-Software-License-CCpack
- - src-openeuler/perl-Sort-Key
- - src-openeuler/perl-Sort-MergeSort
- - src-openeuler/perl-Sort-Naturally
- - src-openeuler/perl-Sort-Versions
- - src-openeuler/perl-Spellunker
- - src-openeuler/perl-Spiffy
- - src-openeuler/perl-Spreadsheet-ParseExcel
- - src-openeuler/perl-SQL-Abstract
- - src-openeuler/perl-SQL-Interp
- - src-openeuler/perl-SQL-Library
- - src-openeuler/perl-SQL-ReservedWords
- - src-openeuler/perl-Statistics-Basic
- - src-openeuler/perl-Statistics-CaseResampling
- - src-openeuler/perl-Statistics-ChiSquare
- - src-openeuler/perl-Statistics-Contingency
- - src-openeuler/perl-Statistics-Descriptive
- - src-openeuler/perl-STD
- - src-openeuler/perl-Stream-Buffered
- - src-openeuler/perl-String-Approx
- - src-openeuler/perl-String-Base
- - src-openeuler/perl-String-CamelCase
- - src-openeuler/perl-String-Copyright
- - src-openeuler/perl-String-Dirify
- - src-openeuler/perl-String-Escape
- - src-openeuler/perl-String-Format
- - src-openeuler/perl-String-Formatter
- - src-openeuler/perl-String-Interpolate-Named
- - src-openeuler/perl-String-Print
- - src-openeuler/perl-String-Random
- - src-openeuler/perl-String-RewritePrefix
- - src-openeuler/perl-String-Similarity
- - src-openeuler/perl-String-Tagged
- - src-openeuler/perl-String-Tagged-Terminal
- - src-openeuler/perl-String-Trim
- - src-openeuler/perl-String-Truncate
- - src-openeuler/perl-String-Util
- - src-openeuler/perl-Struct-Dumb
- - src-openeuler/perl-Sub-Attribute
- - src-openeuler/perl-Sub-Exporter-ForMethods
- - src-openeuler/perl-Sub-Exporter-GlobExporter
- - src-openeuler/perl-Sub-Identify
- - src-openeuler/perl-Sub-Infix
- - src-openeuler/perl-Sub-Info
- - src-openeuler/perl-Sub-Override
- - src-openeuler/perl-Sub-Prototype
- - src-openeuler/perl-Sub-WrapPackages
- - src-openeuler/perl-SUPER
- - src-openeuler/perl-SVG
- - src-openeuler/perl-SVG-Parser
- - src-openeuler/perl-Symbol-Global-Name
- - src-openeuler/perl-Symbol-Util
- - src-openeuler/perl-syntax
- - src-openeuler/perl-Syntax-Keyword-Gather
- - src-openeuler/perl-Syntax-Keyword-Junction
- - src-openeuler/perl-Syntax-Keyword-Try
- - src-openeuler/perl-Sys-Hostname-Long
- - src-openeuler/perl-Sys-Info-Base
- - src-openeuler/perl-Sys-Mmap
- - src-openeuler/perl-Sys-Statistics-Linux
- - src-openeuler/perl-Sys-Syslog
- - src-openeuler/perl-System-Command
- - src-openeuler/perl-System-Info
- - src-openeuler/perl-Taint-Util
- - src-openeuler/perl-Tangerine
- - src-openeuler/perl-TAP-Formatter-HTML
- - src-openeuler/perl-TAP-Harness-Archive
- - src-openeuler/perl-TAP-Harness-JUnit
- - src-openeuler/perl-TAP-SimpleOutput
- - src-openeuler/perl-Tapper
- - src-openeuler/perl-Task-Kensho-Exceptions
- - src-openeuler/perl-Task-Moose
- - src-openeuler/perl-Task-Weaken
- - src-openeuler/perl-Template-Alloy
- - src-openeuler/perl-Template-Multilingual
- - src-openeuler/perl-Template-Plugin-Class
- - src-openeuler/perl-Template-Plugin-Cycle
- - src-openeuler/perl-Template-Tiny
- - src-openeuler/perl-Template-Toolkit
- - src-openeuler/perl-Template-Toolkit-Simple
- - src-openeuler/perl-Term-ANSIColor
- - src-openeuler/perl-Term-Cap
- - src-openeuler/perl-Term-Chrome
- - src-openeuler/perl-Term-Clui
- - src-openeuler/perl-Term-EditorEdit
- - src-openeuler/perl-Term-Encoding
- - src-openeuler/perl-Term-ProgressBar
- - src-openeuler/perl-Term-Size
- - src-openeuler/perl-Term-Table
- - src-openeuler/perl-Term-UI
- - src-openeuler/perl-TermReadKey
- - src-openeuler/perl-Test-Abortable
- - src-openeuler/perl-Test-API
- - src-openeuler/perl-Test-Assert
- - src-openeuler/perl-Test-Assertions
- - src-openeuler/perl-Test-Base
- - src-openeuler/perl-Test-CheckChanges
- - src-openeuler/perl-Test-CheckDeps
- - src-openeuler/perl-Test-Class
- - src-openeuler/perl-Test-Class-Most
- - src-openeuler/perl-Test-CleanNamespaces
- - src-openeuler/perl-Test-Cmd
- - src-openeuler/perl-Test-Command
- - src-openeuler/perl-Test-Compile
- - src-openeuler/perl-Test-ConsistentVersion
- - src-openeuler/perl-Test-CPAN-Meta-JSON
- - src-openeuler/perl-Test-CPAN-Meta-YAML
- - src-openeuler/perl-Test-Deep-Fuzzy
- - src-openeuler/perl-Test-Deep-Type
- - src-openeuler/perl-Test-Dependencies
- - src-openeuler/perl-Test-Differences
- - src-openeuler/perl-Test-Dir
- - src-openeuler/perl-Test-Directory
- - src-openeuler/perl-Test-Dist-VersionSync
- - src-openeuler/perl-Test-Distribution
- - src-openeuler/perl-Test-EOL
- - src-openeuler/perl-Test-Exception
- - src-openeuler/perl-Test-Exception-LessClever
- - src-openeuler/perl-Test-Exit
- - src-openeuler/perl-Test-Expect
- - src-openeuler/perl-Test-File
- - src-openeuler/perl-Test-File-Contents
- - src-openeuler/perl-Test-File-ShareDir
- - src-openeuler/perl-Test-Filename
- - src-openeuler/perl-Test-Fixme
- - src-openeuler/perl-Test-Harness
- - src-openeuler/perl-Test-Harness-Straps
- - src-openeuler/perl-Test-HasVersion
- - src-openeuler/perl-Test-HexDifferences
- - src-openeuler/perl-Test-HexString
- - src-openeuler/perl-Test-HTTP-Server-Simple
- - src-openeuler/perl-Test-Identity
- - src-openeuler/perl-Test-Inter
- - src-openeuler/perl-Test-Is
- - src-openeuler/perl-Test-JSON
- - src-openeuler/perl-Test-LectroTest
- - src-openeuler/perl-Test-LoadAllModules
- - src-openeuler/perl-Test-LongString
- - src-openeuler/perl-Test-LWP-UserAgent
- - src-openeuler/perl-Test-Manifest
- - src-openeuler/perl-Test-Memory-Cycle
- - src-openeuler/perl-Test-Metrics-Any
- - src-openeuler/perl-Test-Mock-LWP
- - src-openeuler/perl-Test-Mock-Time
- - src-openeuler/perl-Test-MockModule
- - src-openeuler/perl-Test-MockObject
- - src-openeuler/perl-Test-MockRandom
- - src-openeuler/perl-Test-MockTime
- - src-openeuler/perl-Test-Modern
- - src-openeuler/perl-Test-Mojibake
- - src-openeuler/perl-Test-Moose-More
- - src-openeuler/perl-Test-More-UTF8
- - src-openeuler/perl-Test-Most
- - src-openeuler/perl-Test-mysqld
- - src-openeuler/perl-Test-Name-FromLine
- - src-openeuler/perl-Test-NiceDump
- - src-openeuler/perl-Test-NoBreakpoints
- - src-openeuler/perl-Test-NoPlan
- - src-openeuler/perl-Test-NoTabs
- - src-openeuler/perl-Test-Number-Delta
- - src-openeuler/perl-Test-Object
- - src-openeuler/perl-Test-Output
- - src-openeuler/perl-Test-Pod-Content
- - src-openeuler/perl-Test-Pod-No404s
- - src-openeuler/perl-Test-Pod-Spelling-CommonMistakes
- - src-openeuler/perl-Test-POE-Client-TCP
- - src-openeuler/perl-Test-POE-Server-TCP
- - src-openeuler/perl-Test-Portability-Files
- - src-openeuler/perl-Test-Prereq
- - src-openeuler/perl-Test-Regexp
- - src-openeuler/perl-Test-Regression
- - src-openeuler/perl-Test-Requires-Git
- - src-openeuler/perl-Test-Roo
- - src-openeuler/perl-Test-Routine
- - src-openeuler/perl-Test-Run
- - src-openeuler/perl-Test-Run-CmdLine
- - src-openeuler/perl-Test-Script-Run
- - src-openeuler/perl-Test-SharedFork
- - src-openeuler/perl-Test-Simple
- - src-openeuler/perl-Test-Spelling
- - src-openeuler/perl-Test-Strict
- - src-openeuler/perl-Test-SubCalls
- - src-openeuler/perl-Test-Synopsis
- - src-openeuler/perl-Test-Taint
- - src-openeuler/perl-Test-TCP
- - src-openeuler/perl-Test-Time
- - src-openeuler/perl-Test-TinyMocker
- - src-openeuler/perl-Test-Toolbox
- - src-openeuler/perl-Test-TrailingSpace
- - src-openeuler/perl-Test-Trap
- - src-openeuler/perl-Test-Unit-Lite
- - src-openeuler/perl-Test-UseAllModules
- - src-openeuler/perl-Test-utf8
- - src-openeuler/perl-Test-Vars
- - src-openeuler/perl-Test-Warn
- - src-openeuler/perl-Test-Without-Module
- - src-openeuler/perl-Test-WriteVariants
- - src-openeuler/perl-Test-WWW-Selenium
- - src-openeuler/perl-Test-YAML
- - src-openeuler/perl-Test-YAML-Valid
- - src-openeuler/perl-Test2-Suite
- - src-openeuler/perl-TestML
- - src-openeuler/perl-TeX-Encode
- - src-openeuler/perl-TeX-Hyphen
- - src-openeuler/perl-Text-Affixes
- - src-openeuler/perl-Text-Aligner
- - src-openeuler/perl-Text-ASCIITable
- - src-openeuler/perl-Text-Autoformat
- - src-openeuler/perl-Text-Balanced
- - src-openeuler/perl-Text-Clip
- - src-openeuler/perl-Text-CSV-Separator
- - src-openeuler/perl-Text-Diff
- - src-openeuler/perl-Text-Diff-HTML
- - src-openeuler/perl-Text-Diff-Parser
- - src-openeuler/perl-Text-FindIndent
- - src-openeuler/perl-Text-Format
- - src-openeuler/perl-Text-FormatTable
- - src-openeuler/perl-Text-Fuzzy
- - src-openeuler/perl-Text-Haml
- - src-openeuler/perl-Text-Levenshtein-Damerau
- - src-openeuler/perl-Text-Levenshtein-Damerau-XS
- - src-openeuler/perl-Text-Markdown
- - src-openeuler/perl-Text-MultiMarkdown
- - src-openeuler/perl-Text-Ngram
- - src-openeuler/perl-Text-ParseWords
- - src-openeuler/perl-Text-PDF
- - src-openeuler/perl-Text-Quoted
- - src-openeuler/perl-Text-Reflow
- - src-openeuler/perl-Text-Reform
- - src-openeuler/perl-Text-Roman
- - src-openeuler/perl-Text-Soundex
- - src-openeuler/perl-Text-Sprintf-Named
- - src-openeuler/perl-Text-Table
- - src-openeuler/perl-Text-Table-Tiny
- - src-openeuler/perl-Text-TabularDisplay
- - src-openeuler/perl-Text-Template-Simple
- - src-openeuler/perl-Text-Textile
- - src-openeuler/perl-Text-vCard
- - src-openeuler/perl-Text-VCardFast
- - src-openeuler/perl-Text-vFile-asData
- - src-openeuler/perl-Text-VisualWidth-PP
- - src-openeuler/perl-Text-WikiFormat
- - src-openeuler/perl-Text-WordDiff
- - src-openeuler/perl-Text-Wrapper
- - src-openeuler/perl-Text-xSV
- - src-openeuler/perl-Thread-Queue
- - src-openeuler/perl-Thread-SigMask
- - src-openeuler/perl-threads
- - src-openeuler/perl-threads-shared
- - src-openeuler/perl-Throwable
- - src-openeuler/perl-Tie-Cache
- - src-openeuler/perl-Tie-Cycle
- - src-openeuler/perl-Tie-DataUUID
- - src-openeuler/perl-Tie-DBI
- - src-openeuler/perl-Tie-EncryptedHash
- - src-openeuler/perl-Tie-Handle-Offset
- - src-openeuler/perl-Tie-Hash-MultiValue
- - src-openeuler/perl-Tie-Simple
- - src-openeuler/perl-Tie-Sub
- - src-openeuler/perl-Time-Clock
- - src-openeuler/perl-Time-Duration
- - src-openeuler/perl-Time-Duration-Parse
- - src-openeuler/perl-Time-HiRes
- - src-openeuler/perl-Time-Interval
- - src-openeuler/perl-Time-Local
- - src-openeuler/perl-Time-Mock
- - src-openeuler/perl-Time-Moment
- - src-openeuler/perl-Time-ParseDate
- - src-openeuler/perl-Time-Period
- - src-openeuler/perl-Time-Piece
- - src-openeuler/perl-Time-timegm
- - src-openeuler/perl-Time-Tiny
- - src-openeuler/perl-Time-Warp
- - src-openeuler/perl-Time-y2038
- - src-openeuler/perl-Tk-Canvas-GradientColor
- - src-openeuler/perl-Tk-ColoredButton
- - src-openeuler/perl-Tk-DoubleClick
- - src-openeuler/perl-Tk-FontDialog
- - src-openeuler/perl-Tk-ObjScanner
- - src-openeuler/perl-Tk-Pod
- - src-openeuler/perl-Tk-Text-SuperText
- - src-openeuler/perl-TOML-Parser
- - src-openeuler/perl-Tree
- - src-openeuler/perl-Tree-DAG_Node
- - src-openeuler/perl-Tree-R
- - src-openeuler/perl-Tree-Simple
- - src-openeuler/perl-Type-Tiny-XS
- - src-openeuler/perl-Unicode-CaseFold
- - src-openeuler/perl-Unicode-Casing
- - src-openeuler/perl-Unicode-CheckUTF8
- - src-openeuler/perl-Unicode-CheckUTF8-PP
- - src-openeuler/perl-Unicode-Collate
- - src-openeuler/perl-Unicode-Map
- - src-openeuler/perl-Unicode-Normalize
- - src-openeuler/perl-Unicode-String
- - src-openeuler/perl-UNIVERSAL-can
- - src-openeuler/perl-UNIVERSAL-isa
- - src-openeuler/perl-UNIVERSAL-require
- - src-openeuler/perl-Unix-Process
- - src-openeuler/perl-URI
- - src-openeuler/perl-URI-db
- - src-openeuler/perl-URI-Encode
- - src-openeuler/perl-URI-Escape-XS
- - src-openeuler/perl-URI-Find
- - src-openeuler/perl-URI-Find-Simple
- - src-openeuler/perl-URI-FromHash
- - src-openeuler/perl-URI-Nested
- - src-openeuler/perl-URI-Query
- - src-openeuler/perl-URI-Title
- - src-openeuler/perl-URI-ws
- - src-openeuler/perl-URL-Encode
- - src-openeuler/perl-URL-Encode-XS
- - src-openeuler/perl-User
- - src-openeuler/perl-User-Identity
- - src-openeuler/perl-UUID
- - src-openeuler/perl-UUID-Tiny
- - src-openeuler/perl-v6
- - src-openeuler/perl-Validation-Class
- - src-openeuler/perl-Variable-Magic
- - src-openeuler/perl-Verilog-Readmem
- - src-openeuler/perl-version
- - src-openeuler/perl-Version-Next
- - src-openeuler/perl-Version-Requirements
- - src-openeuler/perl-Want
- - src-openeuler/perl-WebService-Linode
- - src-openeuler/perl-WebService-Validator-HTML-W3C
- - src-openeuler/perl-Win32-ShellQuote
- - src-openeuler/perl-WWW-DuckDuckGo
- - src-openeuler/perl-WWW-GoodData
- - src-openeuler/perl-WWW-Mechanize
- - src-openeuler/perl-WWW-Shorten
- - src-openeuler/perl-WWW-Splunk
- - src-openeuler/perl-WWW-Twilio-API
- - src-openeuler/perl-XML-Atom-SimpleFeed
- - src-openeuler/perl-XML-Bare
- - src-openeuler/perl-XML-CommonNS
- - src-openeuler/perl-XML-DOM
- - src-openeuler/perl-XML-Fast
- - src-openeuler/perl-XML-FeedPP
- - src-openeuler/perl-XML-Flow
- - src-openeuler/perl-XML-Generator
- - src-openeuler/perl-XML-Generator-PerlData
- - src-openeuler/perl-XML-Hash-LX
- - src-openeuler/perl-XML-LibXML-Debugging
- - src-openeuler/perl-XML-LibXML-PrettyPrint
- - src-openeuler/perl-XML-LibXML-Simple
- - src-openeuler/perl-XML-Merge
- - src-openeuler/perl-XML-NamespaceFactory
- - src-openeuler/perl-XML-Parser
- - src-openeuler/perl-XML-Parser-Lite
- - src-openeuler/perl-XML-Parser-Lite-Tree
- - src-openeuler/perl-XML-Parser-Lite-Tree-XPath
- - src-openeuler/perl-XML-RegExp
- - src-openeuler/perl-XML-SAX-ExpatXS
- - src-openeuler/perl-XML-SemanticDiff
- - src-openeuler/perl-XML-Stream
- - src-openeuler/perl-XML-Tidy
- - src-openeuler/perl-XML-Tidy-Tiny
- - src-openeuler/perl-XML-Tiny
- - src-openeuler/perl-XML-TreePP
- - src-openeuler/perl-XML-Twig
- - src-openeuler/perl-XML-Writer
- - src-openeuler/perl-XML-XPathEngine
- - src-openeuler/perl-XXX
- - src-openeuler/perl-YAML-PP
- - src-openeuler/perl-YAML-Syck
- - src-openeuler/perl-ZMQ-Constants
-- name: sig-python-modules
- repositories:
- - src-openeuler/python-ez_setup
- - src-openeuler/python-APScheduler
- - src-openeuler/python-ATpy
- - src-openeuler/python-AWSIoTPythonSDK
- - src-openeuler/python-Arpeggio
- - src-openeuler/python-Babel
- - src-openeuler/python-Brotli
- - src-openeuler/python-Cerberus
- - src-openeuler/python-Cerealizer
- - src-openeuler/python-Chameleon
- - src-openeuler/python-ConfigArgParse
- - src-openeuler/python-CouchDB
- - src-openeuler/python-Cython
- - src-openeuler/python-ECPy
- - src-openeuler/python-EditorConfig
- - src-openeuler/python-Faker
- - src-openeuler/python-Flask-APScheduler
- - src-openeuler/python-Flask-Admin
- - src-openeuler/python-Flask-Assets
- - src-openeuler/python-Flask-AutoIndex
- - src-openeuler/python-Flask-Bootstrap
- - src-openeuler/python-Flask-Cache
- - src-openeuler/python-Flask-Classy
- - src-openeuler/python-Flask-Mail
- - src-openeuler/python-Flask-Mako
- - src-openeuler/python-Flask-OAuth
- - src-openeuler/python-Flask-OpenID
- - src-openeuler/python-Flask-Paranoid
- - src-openeuler/python-Flask-Principal
- - src-openeuler/python-Flask-RSTPages
- - src-openeuler/python-Flask-SQLAlchemy
- - src-openeuler/python-Flask-Script
- - src-openeuler/python-Flask-Silk
- - src-openeuler/python-Flask-HTTPAuth
- - src-openeuler/python-FormEncode
- - src-openeuler/python-GitPython
- - src-openeuler/python-GridDataFormats
- - src-openeuler/python-HeapDict
- - src-openeuler/python-ipython_genutils
- - src-openeuler/python-JPype1
- - src-openeuler/python-JSON_minify
- - src-openeuler/python-JayDeBeApi
- - src-openeuler/python-Kajiki
- - src-openeuler/python-Lasagne
- - src-openeuler/python-Logbook
- - src-openeuler/python-ModestMaps
- - src-openeuler/python-Naked
- - src-openeuler/python-Parsley
- - src-openeuler/python-PyDispatcher
- - src-openeuler/python-PyDrive
- - src-openeuler/python-PyLaTeX
- - src-openeuler/python-PyLink
- - src-openeuler/python-PyMeeus
- - src-openeuler/python-PyNLPl
- - src-openeuler/python-PyOpenGL
- - src-openeuler/python-PyPDF2
- - src-openeuler/python-PyRSS2Gen
- - src-openeuler/python-PySimpleSOAP
- - src-openeuler/python-PySnooper
- - src-openeuler/python-PyYAML
- - src-openeuler/python-Pympler
- - src-openeuler/python-Pyphen
- - src-openeuler/python-QtAwesome
- - src-openeuler/python-QtPy
- - src-openeuler/python-SALib
- - src-openeuler/python-SQLAlchemy-Utils
- - src-openeuler/python-Send2Trash
- - src-openeuler/python-Slowloris
- - src-openeuler/python-TGScheduler
- - src-openeuler/python-Theano
- - src-openeuler/python-Trololio
- - src-openeuler/python-TurboGears2
- - src-openeuler/python-Twiggy
- - src-openeuler/python-Unipath
- - src-openeuler/python-XStatic
- - src-openeuler/python-XStatic-Angular
- - src-openeuler/python-XStatic-Angular-Bootstrap
- - src-openeuler/python-XStatic-Angular-Gettext
- - src-openeuler/python-XStatic-Bootstrap-SCSS
- - src-openeuler/python-XStatic-Font-Awesome
- - src-openeuler/python-XStatic-JSEncrypt
- - src-openeuler/python-XStatic-Jasmine
- - src-openeuler/python-XStatic-Patternfly-Bootstrap-Treeview
- - src-openeuler/python-XStatic-bootswatch
- - src-openeuler/python-XStatic-mdi
- - src-openeuler/python-XStatic-roboto-fontface
- - src-openeuler/python-XStatic-smart-table
- - src-openeuler/python-XlsxWriter
- - src-openeuler/python-Yapsy
- - src-openeuler/python-ZEO
- - src-openeuler/python-aaargh
- - src-openeuler/python-abclient
- - src-openeuler/python-abimap
- - src-openeuler/python-adodbapi
- - src-openeuler/python-aenum
- - src-openeuler/python-agate
- - src-openeuler/python-agate-dbf
- - src-openeuler/python-agate-excel
- - src-openeuler/python-agate-sql
- - src-openeuler/python-aiodns
- - src-openeuler/python-aiofiles
- - src-openeuler/python-aiohttp-negotiate
- - src-openeuler/python-aiomqtt
- - src-openeuler/python-aiomysql
- - src-openeuler/python-aioodbc
- - src-openeuler/python-aiorpcX
- - src-openeuler/python-aiosmtpd
- - src-openeuler/python-aiosnmp
- - src-openeuler/python-aiostream
- - src-openeuler/python-aiounittest
- - src-openeuler/python-aiowinreg
- - src-openeuler/python-aiozeroconf
- - src-openeuler/python-airspeed
- - src-openeuler/python-alembic
- - src-openeuler/python-altgraph
- - src-openeuler/python-amqp
- - src-openeuler/python-animatplot
- - src-openeuler/python-ansi2html
- - src-openeuler/python-ansible-inventory-grapher
- - src-openeuler/python-ansible-review
- - src-openeuler/python-ansicolor
- - src-openeuler/python-ansicolors
- - src-openeuler/python-anyjson
- - src-openeuler/python-anykeystore
- - src-openeuler/python-anymarkup
- - src-openeuler/python-anymarkup-core
- - src-openeuler/python-anytree
- - src-openeuler/python-apptools
- - src-openeuler/python-apypie
- - src-openeuler/python-argh
- - src-openeuler/python-argon2-cffi
- - src-openeuler/python-argparse-manpage
- - src-openeuler/python-args
- - src-openeuler/python-arpy
- - src-openeuler/python-asciitree
- - src-openeuler/python-asgiref
- - src-openeuler/python-aspectlib
- - src-openeuler/python-aspy
- - src-openeuler/python-asteval
- - src-openeuler/python-astral
- - src-openeuler/python-astroid
- - src-openeuler/python-astroML
- - src-openeuler/python-astroplan
- - src-openeuler/python-astropy
- - src-openeuler/python-astropy-healpix
- - src-openeuler/python-astropy-helpers
- - src-openeuler/python-astroquery
- - src-openeuler/python-astunparse
- - src-openeuler/python-async-timeout
- - src-openeuler/python-async_generator
- - src-openeuler/python-asyncssh
- - src-openeuler/python-asynctest
- - src-openeuler/python-atpublic
- - src-openeuler/python-audioread
- - src-openeuler/python-auth.credential
- - src-openeuler/python-autopep8
- - src-openeuler/python-babelfish
- - src-openeuler/python-backcall
- - src-openeuler/python-backlash
- - src-openeuler/python-backoff
- - src-openeuler/python-baluhn
- - src-openeuler/python-bashate
- - src-openeuler/python-bcc
- - src-openeuler/python-beanbag
- - src-openeuler/python-beniget
- - src-openeuler/python-bids-validator
- - src-openeuler/python-bigsuds
- - src-openeuler/python-billiard
- - src-openeuler/python-binaryornot
- - src-openeuler/python-binstruct
- - src-openeuler/python-bintrees
- - src-openeuler/python-bitcoinlib
- - src-openeuler/python-bitlyapi
- - src-openeuler/python-bitmath
- - src-openeuler/python-bitstring
- - src-openeuler/python-bleach
- - src-openeuler/python-blessed
- - src-openeuler/python-blessings
- - src-openeuler/python-blindspin
- - src-openeuler/python-blockdiag
- - src-openeuler/python-blowfish
- - src-openeuler/python-blurb
- - src-openeuler/python-bobo
- - src-openeuler/python-booleanOperations
- - src-openeuler/python-boom
- - src-openeuler/python-boto
- - src-openeuler/python-boto3
- - src-openeuler/python-botocore
- - src-openeuler/python-bottle-sqlite
- - src-openeuler/python-branca
- - src-openeuler/python-bson
- - src-openeuler/python-btrfs
- - src-openeuler/python-bucky
- - src-openeuler/python-bugzilla
- - src-openeuler/python-bytesize
- - src-openeuler/python-bz2file
- - src-openeuler/python-cachelib
- - src-openeuler/python-cachetools
- - src-openeuler/python-cachez
- - src-openeuler/python-cairocffi
- - src-openeuler/python-canonicaljson
- - src-openeuler/python-capturer
- - src-openeuler/python-caribou
- - src-openeuler/python-case
- - src-openeuler/python-catkin-sphinx
- - src-openeuler/python-ccdproc
- - src-openeuler/python-cchardet
- - src-openeuler/python-certifi
- - src-openeuler/python-cfgv
- - src-openeuler/python-check-manifest
- - src-openeuler/python-citeproc-py
- - src-openeuler/python-cjdns
- - src-openeuler/python-click-completion
- - src-openeuler/python-click-help-colors
- - src-openeuler/python-click-log
- - src-openeuler/python-click-man
- - src-openeuler/python-click-threading
- - src-openeuler/python-cliff-tablib
- - src-openeuler/python-cligj
- - src-openeuler/python-clint
- - src-openeuler/python-cloud_sptheme
- - src-openeuler/python-cloudpickle
- - src-openeuler/python-cltk
- - src-openeuler/python-clyent
- - src-openeuler/python-cmarkgfm
- - src-openeuler/python-cmdln
- - src-openeuler/python-cmigemo
- - src-openeuler/python-cocotb
- - src-openeuler/python-codecov
- - src-openeuler/python-colcon-bazel
- - src-openeuler/python-colorama
- - src-openeuler/python-colorclass
- - src-openeuler/python-coloredlogs
- - src-openeuler/python-colorful
- - src-openeuler/python-colorlog
- - src-openeuler/python-colorspacious
- - src-openeuler/python-colour
- - src-openeuler/python-colour-runner
- - src-openeuler/python-conditional
- - src-openeuler/python-condor
- - src-openeuler/python-confuse
- - src-openeuler/python-contextvars
- - src-openeuler/python-convertdate
- - src-openeuler/python-copr
- - src-openeuler/python-copr-common
- - src-openeuler/python-copr-messaging
- - src-openeuler/python-cov-core
- - src-openeuler/python-cram
- - src-openeuler/python-crank
- - src-openeuler/python-crashtest
- - src-openeuler/python-crayons
- - src-openeuler/python-crcelk
- - src-openeuler/python-croniter
- - src-openeuler/python-cson
- - src-openeuler/python-css-parser
- - src-openeuler/python-cssmin
- - src-openeuler/python-cssselect2
- - src-openeuler/python-csvkit
- - src-openeuler/python-cu2qu
- - src-openeuler/python-curio
- - src-openeuler/python-curtsies
- - src-openeuler/python-cvss
- - src-openeuler/python-cxxfilt
- - src-openeuler/python-cypy
- - src-openeuler/python-d2to1
- - src-openeuler/python-daemonize
- - src-openeuler/python-daiquiri
- - src-openeuler/python-dataclasses
- - src-openeuler/python-datanommer.consumer
- - src-openeuler/python-datanommer.models
- - src-openeuler/python-dateparser
- - src-openeuler/python-dbfread
- - src-openeuler/python-dbus-client-gen
- - src-openeuler/python-dbus-signature-pyparsing
- - src-openeuler/python-ddt
- - src-openeuler/python-deap
- - src-openeuler/python-debrepo
- - src-openeuler/python-deepmerge
- - src-openeuler/python-defusedxml
- - src-openeuler/python-demjson
- - src-openeuler/python-deprecation
- - src-openeuler/python-dict.sorted
- - src-openeuler/python-dictdumper
- - src-openeuler/python-diff-match-patch
- - src-openeuler/python-dill
- - src-openeuler/python-dirq
- - src-openeuler/python-diskcache
- - src-openeuler/python-distlib
- - src-openeuler/python-distro-info
- - src-openeuler/python-dj-database-url
- - src-openeuler/python-dj-email-url
- - src-openeuler/python-dj-search-url
- - src-openeuler/python-django
- - src-openeuler/python-django-ajax-selects
- - src-openeuler/python-django-angular
- - src-openeuler/python-django-annoying
- - src-openeuler/python-django-appconf
- - src-openeuler/python-django-authority
- - src-openeuler/python-django-babel
- - src-openeuler/python-django-cache-url
- - src-openeuler/python-django-compressor
- - src-openeuler/python-django-cors-headers
- - src-openeuler/python-django-crispy-forms
- - src-openeuler/python-django-debreach
- - src-openeuler/python-django-debug-toolbar
- - src-openeuler/python-django-discover-runner
- - src-openeuler/python-django-filter
- - src-openeuler/python-django-haystack
- - src-openeuler/python-django-health-check
- - src-openeuler/python-django-helpdesk
- - src-openeuler/python-django-ipware
- - src-openeuler/python-django-macros
- - src-openeuler/python-django-markdownx
- - src-openeuler/python-django-mptt
- - src-openeuler/python-django-nose
- - src-openeuler/python-django-pipeline
- - src-openeuler/python-django-pyscss
- - src-openeuler/python-django-pytest
- - src-openeuler/python-django-redis
- - src-openeuler/python-django-registration
- - src-openeuler/python-django-rest-framework
- - src-openeuler/python-django-reversion
- - src-openeuler/python-django-robots
- - src-openeuler/python-django-simple-captcha
- - src-openeuler/python-django-tagging
- - src-openeuler/python-django-tastypie
- - src-openeuler/python-django-tinymce
- - src-openeuler/python-djangoql
- - src-openeuler/python-dnf
- - src-openeuler/python-dns-lexicon
- - src-openeuler/python-dnspython
- - src-openeuler/python-docker-squash
- - src-openeuler/python-dockerfile-parse
- - src-openeuler/python-docx
- - src-openeuler/python-dogpile.cache
- - src-openeuler/python-doit
- - src-openeuler/python-dominate
- - src-openeuler/python-dotenv
- - src-openeuler/python-dpath
- - src-openeuler/python-dpkt
- - src-openeuler/python-drat
- - src-openeuler/python-duecredit
- - src-openeuler/python-dulwich
- - src-openeuler/python-easyargs
- - src-openeuler/python-easygui
- - src-openeuler/python-editdistance
- - src-openeuler/python-email_reply_parser
- - src-openeuler/python-emcee
- - src-openeuler/python-emoji
- - src-openeuler/python-envisage
- - src-openeuler/python-enzyme
- - src-openeuler/python-epdb
- - src-openeuler/python-epub
- - src-openeuler/python-et_xmlfile
- - src-openeuler/python-exif
- - src-openeuler/python-f5-icontrol-rest
- - src-openeuler/python-fabulous
- - src-openeuler/python-fastavro
- - src-openeuler/python-fasteners
- - src-openeuler/python-fastimport
- - src-openeuler/python-fastnumbers
- - src-openeuler/python-fastpurge
- - src-openeuler/python-fauxquests
- - src-openeuler/python-fdb
- - src-openeuler/python-fedfind
- - src-openeuler/python-feedgenerator
- - src-openeuler/python-feedparser
- - src-openeuler/python-fido2
- - src-openeuler/python-fields
- - src-openeuler/python-filetype
- - src-openeuler/python-fire
- - src-openeuler/python-firebirdsql
- - src-openeuler/python-firehose
- - src-openeuler/python-firewall
- - src-openeuler/python-first
- - src-openeuler/python-fisx
- - src-openeuler/python-flake8-import-order
- - src-openeuler/python-flaky
- - src-openeuler/python-flann
- - src-openeuler/python-flask-multistatic
- - src-openeuler/python-flask-oidc
- - src-openeuler/python-flask-restplus
- - src-openeuler/python-flask-restx
- - src-openeuler/python-flask-session
- - src-openeuler/python-flask-whooshee
- - src-openeuler/python-flatpak-module-tools
- - src-openeuler/python-flexmock
- - src-openeuler/python-flickrapi
- - src-openeuler/python-flock
- - src-openeuler/python-flower
- - src-openeuler/python-flufl.i18n
- - src-openeuler/python-flufl.lock
- - src-openeuler/python-flufl.testing
- - src-openeuler/python-flup
- - src-openeuler/python-fontMath
- - src-openeuler/python-fontdump
- - src-openeuler/python-fontname
- - src-openeuler/python-formats
- - src-openeuler/python-friendlyloris
- - src-openeuler/python-frozendict
- - src-openeuler/python-fsmonitor
- - src-openeuler/python-fsspec
- - src-openeuler/python-fuckit
- - src-openeuler/python-funcparserlib
- - src-openeuler/python-furl
- - src-openeuler/python-fusepy
- - src-openeuler/python-futurist
- - src-openeuler/python-fuzzyfinder
- - src-openeuler/python-fypp
- - src-openeuler/python-gTTS-token
- - src-openeuler/python-gast
- - src-openeuler/python-gatspy
- - src-openeuler/python-gccinvocation
- - src-openeuler/python-gearbox
- - src-openeuler/python-genty
- - src-openeuler/python-geographiclib
- - src-openeuler/python-geojson
- - src-openeuler/python-geomet
- - src-openeuler/python-gerrit-view
- - src-openeuler/python-gerritlib
- - src-openeuler/python-gerrymander
- - src-openeuler/python-getmac
- - src-openeuler/python-ghp-import2
- - src-openeuler/python-git-url-parse
- - src-openeuler/python-gitapi
- - src-openeuler/python-gitdb
- - src-openeuler/python-githubpy
- - src-openeuler/python-gitlab
- - src-openeuler/python-glad
- - src-openeuler/python-glances_api
- - src-openeuler/python-glob2
- - src-openeuler/python-gntp
- - src-openeuler/python-gnupg
- - src-openeuler/python-google-auth
- - src-openeuler/python-google-compute-engine
- - src-openeuler/python-gpxpy
- - src-openeuler/python-grabbit
- - src-openeuler/python-grabserial
- - src-openeuler/python-guizero
- - src-openeuler/python-gwebsockets
- - src-openeuler/python-h11
- - src-openeuler/python-h5io
- - src-openeuler/python-hdfs
- - src-openeuler/python-heketi
- - src-openeuler/python-hgapi
- - src-openeuler/python-hgdistver
- - src-openeuler/python-hkdf
- - src-openeuler/python-hl7
- - src-openeuler/python-hole
- - src-openeuler/python-holidays
- - src-openeuler/python-hstspreload
- - src-openeuler/python-html2text
- - src-openeuler/python-htmlmin
- - src-openeuler/python-httmock
- - src-openeuler/python-http_client
- - src-openeuler/python-httpsig_cffi
- - src-openeuler/python-httptools
- - src-openeuler/python-humanfriendly
- - src-openeuler/python-humblewx
- - src-openeuler/python-husl
- - src-openeuler/python-hypothesis-fspaths
- - src-openeuler/python-icalendar
- - src-openeuler/python-identify
- - src-openeuler/python-idstools
- - src-openeuler/python-ifcfg
- - src-openeuler/python-igor
- - src-openeuler/python-igraph
- - src-openeuler/python-img2pdf
- - src-openeuler/python-importmagic
- - src-openeuler/python-inema
- - src-openeuler/python-injector
- - src-openeuler/python-interfile
- - src-openeuler/python-intervaltree
- - src-openeuler/python-into-dbus-python
- - src-openeuler/python-iowait
- - src-openeuler/python-ipdb
- - src-openeuler/python-ipgetter2
- - src-openeuler/python-isodate
- - src-openeuler/python-isort
- - src-openeuler/python-javalang
- - src-openeuler/python-jdcal
- - src-openeuler/python-jeepney
- - src-openeuler/python-jinja2-time
- - src-openeuler/python-jinja2_pluralize
- - src-openeuler/python-journal-brief
- - src-openeuler/python-jsmin
- - src-openeuler/python-json2table
- - src-openeuler/python-json5
- - src-openeuler/python-json_logger
- - src-openeuler/python-jsonmodels
- - src-openeuler/python-jsonpath-rw
- - src-openeuler/python-jsonpath-rw-ext
- - src-openeuler/python-justbytes
- - src-openeuler/python-jwcrypto
- - src-openeuler/python-kaitaistruct
- - src-openeuler/python-kaptan
- - src-openeuler/python-kdcproxy
- - src-openeuler/python-kerberos
- - src-openeuler/python-kickstart
- - src-openeuler/python-klusta
- - src-openeuler/python-kobo
- - src-openeuler/python-krbcontext
- - src-openeuler/python-landslide
- - src-openeuler/python-langtable
- - src-openeuler/python-lark-parser
- - src-openeuler/python-lasso
- - src-openeuler/python-launchpadlib
- - src-openeuler/python-lazr.config
- - src-openeuler/python-lazr.delegates
- - src-openeuler/python-lazr.restfulclient
- - src-openeuler/python-lazr.smtptest
- - src-openeuler/python-lazr.uri
- - src-openeuler/python-lazyarray
- - src-openeuler/python-lazy-object-proxy
- - src-openeuler/python-leather
- - src-openeuler/python-lesscpy
- - src-openeuler/python-libNeuroML
- - src-openeuler/python-libarchive-c
- - src-openeuler/python-libevdev
- - src-openeuler/python-liblinear
- - src-openeuler/python-libmount
- - src-openeuler/python-libnacl
- - src-openeuler/python-libnl
- - src-openeuler/python-librosa
- - src-openeuler/python-libsass
- - src-openeuler/python-libtmux
- - src-openeuler/python-libusb1
- - src-openeuler/python-libvoikko
- - src-openeuler/python-liquidctl
- - src-openeuler/python-listparser
- - src-openeuler/python-littleutils
- - src-openeuler/python-livereload
- - src-openeuler/python-lmdb
- - src-openeuler/python-locket
- - src-openeuler/python-lockfile
- - src-openeuler/python-logging_tree
- - src-openeuler/python-logzero
- - src-openeuler/python-lrparsing
- - src-openeuler/python-lttngust
- - src-openeuler/python-luftdaten
- - src-openeuler/python-lupa
- - src-openeuler/python-mailer
- - src-openeuler/python-makeelf
- - src-openeuler/python-manuel
- - src-openeuler/python-maps
- - src-openeuler/python-markdown2
- - src-openeuler/python-marshmallow
- - src-openeuler/python-mccabe
- - src-openeuler/python-mdx_gh_links
- - src-openeuler/python-med
- - src-openeuler/python-metaextract
- - src-openeuler/python-metar
- - src-openeuler/python-micawber
- - src-openeuler/python-microfs
- - src-openeuler/python-migen
- - src-openeuler/python-migrate
- - src-openeuler/python-mimerender
- - src-openeuler/python-minibelt
- - src-openeuler/python-minidb
- - src-openeuler/python-minidump
- - src-openeuler/python-mne
- - src-openeuler/python-mne-bids
- - src-openeuler/python-mnemonic
- - src-openeuler/python-modernize
- - src-openeuler/python-moksha.common
- - src-openeuler/python-mongoengine
- - src-openeuler/python-monotonic
- - src-openeuler/python-mpmath
- - src-openeuler/python-msgpack
- - src-openeuler/python-mtg
- - src-openeuler/python-multi_key_dict
- - src-openeuler/python-multidict
- - src-openeuler/python-multio
- - src-openeuler/python-multipart
- - src-openeuler/python-munkres
- - src-openeuler/python-musicbrainzngs
- - src-openeuler/python-mutagen
- - src-openeuler/python-mwclient
- - src-openeuler/python-mygpoclient
- - src-openeuler/python-nb2plots
- - src-openeuler/python-ndjson-testrunner
- - src-openeuler/python-neomodel
- - src-openeuler/python-neotime
- - src-openeuler/python-neovim
- - src-openeuler/python-netdata
- - src-openeuler/python-ngram
- - src-openeuler/python-nine
- - src-openeuler/python-nltk
- - src-openeuler/python-nmap
- - src-openeuler/python-nmrglue
- - src-openeuler/python-nose-cov
- - src-openeuler/python-nose-exclude
- - src-openeuler/python-nose-ignore-docstring
- - src-openeuler/python-nose-parameterized
- - src-openeuler/python-nose-progressive
- - src-openeuler/python-nose-timer
- - src-openeuler/python-nose2
- - src-openeuler/python-nose_fixes
- - src-openeuler/python-notario
- - src-openeuler/python-notify2
- - src-openeuler/python-notmuch
- - src-openeuler/python-ns1-python
- - src-openeuler/python-nss
- - src-openeuler/python-ntlm-auth
- - src-openeuler/python-nudatus
- - src-openeuler/python-num2words
- - src-openeuler/python-numpoly
- - src-openeuler/python-oauth2client
- - src-openeuler/python-odML
- - src-openeuler/python-odfpy
- - src-openeuler/python-offtrac
- - src-openeuler/python-ofxparse
- - src-openeuler/python-okaara
- - src-openeuler/python-oletools
- - src-openeuler/python-openidc-client
- - src-openeuler/python-openpyxl
- - src-openeuler/python-opensensemap-api
- - src-openeuler/python-openstackdocstheme
- - src-openeuler/python-orderedmultidict
- - src-openeuler/python-os-service-types
- - src-openeuler/python-oslo.i18n
- - src-openeuler/python-oslo.sphinx
- - src-openeuler/python-oslotest
- - src-openeuler/python-outcome
- - src-openeuler/python-outdated
- - src-openeuler/python-packit
- - src-openeuler/python-pacpy
- - src-openeuler/python-paho-mqtt
- - src-openeuler/python-pamela
- - src-openeuler/python-pandocfilters
- - src-openeuler/python-paperwork-backend
- - src-openeuler/python-parameterized
- - src-openeuler/python-parsedatetime
- - src-openeuler/python-parso
- - src-openeuler/python-passlib
- - src-openeuler/python-pastel
- - src-openeuler/python-patch-ng
- - src-openeuler/python-pathlib2
- - src-openeuler/python-pathspec
- - src-openeuler/python-pathtools
- - src-openeuler/python-patool
- - src-openeuler/python-patsy
- - src-openeuler/python-pbkdf2
- - src-openeuler/python-pdc-client
- - src-openeuler/python-pdfkit
- - src-openeuler/python-pdfminer
- - src-openeuler/python-pdfrw
- - src-openeuler/python-pdir2
- - src-openeuler/python-peewee
- - src-openeuler/python-pendulum
- - src-openeuler/python-pep517
- - src-openeuler/python-periodictable
- - src-openeuler/python-persist-queue
- - src-openeuler/python-pg8000
- - src-openeuler/python-pgpdump
- - src-openeuler/python-phonenumbers
- - src-openeuler/python-phpserialize
- - src-openeuler/python-piexif
- - src-openeuler/python-pigpio
- - src-openeuler/python-pika-pool
- - src-openeuler/python-pipdeptree
- - src-openeuler/python-pkginfo
- - src-openeuler/python-pkgwat.api
- - src-openeuler/python-plaintable
- - src-openeuler/python-player
- - src-openeuler/python-plink
- - src-openeuler/python-pluginbase
- - src-openeuler/python-pluginlib
- - src-openeuler/python-plugnplay
- - src-openeuler/python-plumbum
- - src-openeuler/python-podcastparser
- - src-openeuler/python-portalocker
- - src-openeuler/python-power
- - src-openeuler/python-poyo
- - src-openeuler/python-praw
- - src-openeuler/python-prettyprinter
- - src-openeuler/python-process-tests
- - src-openeuler/python-profilehooks
- - src-openeuler/python-progress
- - src-openeuler/python-progressbar2
- - src-openeuler/python-prometheus_client
- - src-openeuler/python-psycogreen
- - src-openeuler/python-pudb
- - src-openeuler/python-pulsectl
- - src-openeuler/python-pungi
- - src-openeuler/python-pure-sasl
- - src-openeuler/python-pvc
- - src-openeuler/python-py-cpuinfo
- - src-openeuler/python-py-make
- - src-openeuler/python-py2pack
- - src-openeuler/python-pyLibravatar
- - src-openeuler/python-pyModbusTCP
- - src-openeuler/python-pyPEG2
- - src-openeuler/python-pyTelegramBotAPI
- - src-openeuler/python-pyactivetwo
- - src-openeuler/python-pyaes
- - src-openeuler/python-pyasn1-modules
- - src-openeuler/python-pybeam
- - src-openeuler/python-pycares
- - src-openeuler/python-pyclipper
- - src-openeuler/python-pycodestyle
- - src-openeuler/python-pycollada
- - src-openeuler/python-pycryptodome
- - src-openeuler/python-pycryptodomex
- - src-openeuler/python-pycscope
- - src-openeuler/python-pydenticon
- - src-openeuler/python-pydicom
- - src-openeuler/python-pydocstyle
- - src-openeuler/python-pyelectro
- - src-openeuler/python-pyephem
- - src-openeuler/python-pyface
- - src-openeuler/python-pyfakefs
- - src-openeuler/python-pyftdi
- - src-openeuler/python-pyftpdlib
- - src-openeuler/python-pygal
- - src-openeuler/python-pygatt
- - src-openeuler/python-pygeoip
- - src-openeuler/python-pyghmi
- - src-openeuler/python-pygments-style-solarized
- - src-openeuler/python-pyhcl
- - src-openeuler/python-pyi2cflash
- - src-openeuler/python-pyinstaller
- - src-openeuler/python-pykalman
- - src-openeuler/python-pykeepass
- - src-openeuler/python-pylast
- - src-openeuler/python-pylev
- - src-openeuler/python-pylons-sphinx-themes
- - src-openeuler/python-pymatreader
- - src-openeuler/python-pymemcache
- - src-openeuler/python-pymoc
- - src-openeuler/python-pymod2pkg
- - src-openeuler/python-pynetdicom
- - src-openeuler/python-pyngus
- - src-openeuler/python-pynvml
- - src-openeuler/python-pyocr
- - src-openeuler/python-pyotp
- - src-openeuler/python-pypandoc
- - src-openeuler/python-pyperclip
- - src-openeuler/python-pypng
- - src-openeuler/python-pyprocdev
- - src-openeuler/python-pyrad
- - src-openeuler/python-pyramid_fas_openid
- - src-openeuler/python-pyreadline
- - src-openeuler/python-pyroute2
- - src-openeuler/python-pyrsistent
- - src-openeuler/python-pyrtlsdr
- - src-openeuler/python-pysb
- - src-openeuler/python-pyserial
- - src-openeuler/python-pyshark
- - src-openeuler/python-pyshp
- - src-openeuler/python-pysmi
- - src-openeuler/python-pysnmp
- - src-openeuler/python-pyspf
- - src-openeuler/python-pyspiflash
- - src-openeuler/python-pysrt
- - src-openeuler/python-pystache
- - src-openeuler/python-pystalk
- - src-openeuler/python-pystoi
- - src-openeuler/python-pystray
- - src-openeuler/python-pytest-arraydiff
- - src-openeuler/python-pytest-asyncio
- - src-openeuler/python-pytest-beakerlib
- - src-openeuler/python-pytest-cache
- - src-openeuler/python-pytest-capturelog
- - src-openeuler/python-pytest-catchlog
- - src-openeuler/python-pytest-datafiles
- - src-openeuler/python-pytest-doctestplus
- - src-openeuler/python-pytest-faulthandler
- - src-openeuler/python-pytest-flakes
- - src-openeuler/python-pytest-forked
- - src-openeuler/python-pytest-helpers-namespace
- - src-openeuler/python-pytest-isort
- - src-openeuler/python-pytest-lazy-fixture
- - src-openeuler/python-pytest-metadata
- - src-openeuler/python-pytest-multihost
- - src-openeuler/python-pytest-openfiles
- - src-openeuler/python-pytest-ordering
- - src-openeuler/python-pytest-pep8
- - src-openeuler/python-pytest-random-order
- - src-openeuler/python-pytest-relaxed
- - src-openeuler/python-pytest-remotedata
- - src-openeuler/python-pytest-repeat
- - src-openeuler/python-pytest-rerunfailures
- - src-openeuler/python-pytest-runner
- - src-openeuler/python-pytest-sourceorder
- - src-openeuler/python-pytest-subtests
- - src-openeuler/python-pytest-sugar
- - src-openeuler/python-pytest-testmon
- - src-openeuler/python-pytest-timeout
- - src-openeuler/python-pytest-toolbox
- - src-openeuler/python-pytest-tornado
- - src-openeuler/python-pytest-watch
- - src-openeuler/python-pytest-xdist
- - src-openeuler/python-pytest-xprocess
- - src-openeuler/python-pytimeparse
- - src-openeuler/python-pytools
- - src-openeuler/python-pytrailer
- - src-openeuler/python-pytzdata
- - src-openeuler/python-pyusb
- - src-openeuler/python-pyvit
- - src-openeuler/python-pyvmomi
- - src-openeuler/python-pyvo
- - src-openeuler/python-pyxdg
- - src-openeuler/python-pyxs
- - src-openeuler/python-pyzabbix
- - src-openeuler/python-pyzmq
- - src-openeuler/python-pyzolib
- - src-openeuler/python-qcelemental
- - src-openeuler/python-qrcodegen
- - src-openeuler/python-quantities
- - src-openeuler/python-queuelib
- - src-openeuler/python-random2
- - src-openeuler/python-rangehttpserver
- - src-openeuler/python-rarfile
- - src-openeuler/python-ratelimitingfilter
- - src-openeuler/python-rawkit
- - src-openeuler/python-rcssmin
- - src-openeuler/python-rebulk
- - src-openeuler/python-regex
- - src-openeuler/python-remoto
- - src-openeuler/python-renderspec
- - src-openeuler/python-repoze.sphinx.autointerface
- - src-openeuler/python-repoze.tm2
- - src-openeuler/python-repoze.who
- - src-openeuler/python-repoze.who.plugins.sa
- - src-openeuler/python-requests-gssapi
- - src-openeuler/python-requests-kerberos
- - src-openeuler/python-requests-ntlm
- - src-openeuler/python-requests-oauthlib
- - src-openeuler/python-requestsexceptions
- - src-openeuler/python-restfly
- - src-openeuler/python-restsh
- - src-openeuler/python-retask
- - src-openeuler/python-retrying
- - src-openeuler/python-retryz
- - src-openeuler/python-rfc3986
- - src-openeuler/python-ripozo
- - src-openeuler/python-rjsmin
- - src-openeuler/python-rmtest
- - src-openeuler/python-rnc2rng
- - src-openeuler/python-roman
- - src-openeuler/python-rope
- - src-openeuler/python-rosinstall
- - src-openeuler/python-rpdb
- - src-openeuler/python-rstcheck
- - src-openeuler/python-ruffus
- - src-openeuler/python-rustcfg
- - src-openeuler/python-rxjson
- - src-openeuler/python-saml
- - src-openeuler/python-sanction
- - src-openeuler/python-scales
- - src-openeuler/python-scandir
- - src-openeuler/python-scapy
- - src-openeuler/python-schema
- - src-openeuler/python-scp
- - src-openeuler/python-scramp
- - src-openeuler/python-scripttester
- - src-openeuler/python-scrypt
- - src-openeuler/python-selectors2
- - src-openeuler/python-semver
- - src-openeuler/python-serpy
- - src-openeuler/python-setuptools_hg
- - src-openeuler/python-sh
- - src-openeuler/python-shamir-mnemonic
- - src-openeuler/python-shodan
- - src-openeuler/python-shortuuid
- - src-openeuler/python-should_dsl
- - src-openeuler/python-sieve
- - src-openeuler/python-simplebayes
- - src-openeuler/python-simpleeval
- - src-openeuler/python-simplejson
- - src-openeuler/python-simplepam
- - src-openeuler/python-simplevisor
- - src-openeuler/python-simpy
- - src-openeuler/python-siphash
- - src-openeuler/python-slack-cleaner
- - src-openeuler/python-slacker
- - src-openeuler/python-slixmpp
- - src-openeuler/python-slugify
- - src-openeuler/python-smmap
- - src-openeuler/python-sniffio
- - src-openeuler/python-snuggs
- - src-openeuler/python-social-auth-app-flask
- - src-openeuler/python-social-auth-app-flask-sqlalchemy
- - src-openeuler/python-social-auth-storage-sqlalchemy
- - src-openeuler/python-sockjs-tornado
- - src-openeuler/python-socks5line
- - src-openeuler/python-sortedcontainers
- - src-openeuler/python-spake2
- - src-openeuler/python-spdx-lookup
- - src-openeuler/python-speaklater
- - src-openeuler/python-spec
- - src-openeuler/python-speedtest-cli
- - src-openeuler/python-speg
- - src-openeuler/python-sphinx-argparse
- - src-openeuler/python-sphinx-epytext
- - src-openeuler/python-sphinx-gallery
- - src-openeuler/python-sphinx-intl
- - src-openeuler/python-sphinx-notfound-page
- - src-openeuler/python-sphinxcontrib-applehelp
- - src-openeuler/python-sphinxcontrib-blockdiag
- - src-openeuler/python-sphinxcontrib-devhelp
- - src-openeuler/python-sphinxcontrib-fulltoc
- - src-openeuler/python-sphinxcontrib-htmlhelp
- - src-openeuler/python-sphinxcontrib-issuetracker
- - src-openeuler/python-sphinxcontrib-jsmath
- - src-openeuler/python-sphinxcontrib-qthelp
- - src-openeuler/python-sphinxcontrib-serializinghtml
- - src-openeuler/python-sphinxtesters
- - src-openeuler/python-sphobjinv
- - src-openeuler/python-spur
- - src-openeuler/python-sqlalchemy-collectd
- - src-openeuler/python-sqlalchemy_schemadisplay
- - src-openeuler/python-sqlparse
- - src-openeuler/python-sseclient
- - src-openeuler/python-statistics
- - src-openeuler/python-statsd
- - src-openeuler/python-statsmodels
- - src-openeuler/python-stdlib-list
- - src-openeuler/python-stem
- - src-openeuler/python-stevedore
- - src-openeuler/python-stomper
- - src-openeuler/python-stompest
- - src-openeuler/python-stuf
- - src-openeuler/python-subliminal
- - src-openeuler/python-supersmoother
- - src-openeuler/python-svg
- - src-openeuler/python-svg.path
- - src-openeuler/python-svgwrite
- - src-openeuler/python-sympy
- - src-openeuler/python-tabulate
- - src-openeuler/python-tambo
- - src-openeuler/python-tasklib
- - src-openeuler/python-tbgrep
- - src-openeuler/python-tblib
- - src-openeuler/python-tbtrim
- - src-openeuler/python-tempdir
- - src-openeuler/python-termcolor
- - src-openeuler/python-terminaltables
- - src-openeuler/python-test-server
- - src-openeuler/python-testpath
- - src-openeuler/python-testrepository
- - src-openeuler/python-testresources
- - src-openeuler/python-texext
- - src-openeuler/python-text-unidecode
- - src-openeuler/python-textparser
- - src-openeuler/python-tftpy
- - src-openeuler/python-tgext.crud
- - src-openeuler/python-timeout-decorator
- - src-openeuler/python-timeunit
- - src-openeuler/python-tinydb
- - src-openeuler/python-tinyrpc
- - src-openeuler/python-toolz
- - src-openeuler/python-tox
- - src-openeuler/python-traitsui
- - src-openeuler/python-traitlets
- - src-openeuler/python-translationstring
- - src-openeuler/python-trustme
- - src-openeuler/python-tvb-data
- - src-openeuler/python-tw2.core
- - src-openeuler/python-tw2.forms
- - src-openeuler/python-tw2.jqplugins.ui
- - src-openeuler/python-tw2.jquery
- - src-openeuler/python-twilio
- - src-openeuler/python-txWS
- - src-openeuler/python-txZMQ
- - src-openeuler/python-typing
- - src-openeuler/python-typogrify
- - src-openeuler/python-tzlocal
- - src-openeuler/python-unicodecsv
- - src-openeuler/python-unidiff
- - src-openeuler/python-upoints
- - src-openeuler/python-uritemplate
- - src-openeuler/python-urllib_gssapi
- - src-openeuler/python-urwidtrees
- - src-openeuler/python-utmp
- - src-openeuler/python-uwsgidecorators
- - src-openeuler/python-vagrantpy
- - src-openeuler/python-validators
- - src-openeuler/python-vatnumber
- - src-openeuler/python-vconnector
- - src-openeuler/python-vdirsyncer
- - src-openeuler/python-verboselogs
- - src-openeuler/python-versiontools
- - src-openeuler/python-vine
- - src-openeuler/python-virtualenv-api
- - src-openeuler/python-virtualenv-clone
- - src-openeuler/python-virtualenvwrapper
- - src-openeuler/python-visidata
- - src-openeuler/python-visitor
- - src-openeuler/python-visvis
- - src-openeuler/python-vobject
- - src-openeuler/python-volkszaehler
- - src-openeuler/python-voluptuous
- - src-openeuler/python-vpoller
- - src-openeuler/python-vulture
- - src-openeuler/python-w3lib
- - src-openeuler/python-wadllib
- - src-openeuler/python-walkdir
- - src-openeuler/python-warlock
- - src-openeuler/python-watchdog
- - src-openeuler/python-webassets
- - src-openeuler/python-webcolors
- - src-openeuler/python-websockets
- - src-openeuler/python-websockify
- - src-openeuler/python-webthing-ws
- - src-openeuler/python-whichcraft
- - src-openeuler/python-whisper
- - src-openeuler/python-whitenoise
- - src-openeuler/python-whois
- - src-openeuler/python-wikipedia
- - src-openeuler/python-wikitcms
- - src-openeuler/python-winacl
- - src-openeuler/python-winrm
- - src-openeuler/python-wsproto
- - src-openeuler/python-wrapt
- - src-openeuler/python-wtf-peewee
- - src-openeuler/python-wurlitzer
- - src-openeuler/python-www-authenticate
- - src-openeuler/python-wxnatpy
- - src-openeuler/python-xarray
- - src-openeuler/python-xcffib
- - src-openeuler/python-xlib
- - src-openeuler/python-xlrd
- - src-openeuler/python-xlwt
- - src-openeuler/python-xml2rfc
- - src-openeuler/python-xmlrunner
- - src-openeuler/python-xmltodict
- - src-openeuler/python-xpath-expressions
- - src-openeuler/python-xtermcolor
- - src-openeuler/python-xunitparser
- - src-openeuler/python-xvfbwrapper
- - src-openeuler/python-xxhash
- - src-openeuler/python-yamlordereddictloader
- - src-openeuler/python-yaql
- - src-openeuler/python-yara
- - src-openeuler/python-yarg
- - src-openeuler/python-yarl
- - src-openeuler/python-yaspin
- - src-openeuler/python-yaswfp
- - src-openeuler/python-yattag
- - src-openeuler/python-yubico
- - src-openeuler/python-yubikey-manager
- - src-openeuler/python-zabbix-api-erigones
- - src-openeuler/python-zanata2fedmsg
- - src-openeuler/python-zarr
- - src-openeuler/python-zc.customdoctests
- - src-openeuler/python-zdaemon
- - src-openeuler/python-zipstream
- - src-openeuler/python-zope.dottedname
- - src-openeuler/python-zope.fixers
- - src-openeuler/python-zope.i18n
- - src-openeuler/python-zope.i18nmessageid
- - src-openeuler/python-zope.testing
- - src-openeuler/python-lightgbm
- - src-openeuler/python-eli5
- - src-openeuler/python-blaze
- - src-openeuler/python-Flask-Cors
- - src-openeuler/python-odo
- - src-openeuler/python-datashape
- - src-openeuler/python-multipledispatch
- - src-openeuler/python3-docs
- - src-openeuler/python-concurrent-log-handler
-- name: sig-release-management
- repositories:
- - src-openeuler/openEuler-lsb
- - openeuler/openEuler-lsb
- - openeuler/release-management
-- name: xfce
- repositories:
- - src-openeuler/Thunar
- - src-openeuler/catfish
- - src-openeuler/exo
- - src-openeuler/garcon
- - src-openeuler/gigolo
- - src-openeuler/hddtemp
- - src-openeuler/libglademm24
- - src-openeuler/libgnomecanvasmm26
- - src-openeuler/libmpd
- - src-openeuler/libxfce4ui
- - src-openeuler/libxfce4util
- - src-openeuler/lightdm
- - src-openeuler/lightdm-gtk
- - src-openeuler/lightdm-gtk-greeter
- - src-openeuler/mousepad
- - src-openeuler/orage
- - src-openeuler/parole
- - src-openeuler/python-distutils-extra
- - src-openeuler/ristretto
- - src-openeuler/thunar-archive-plugin
- - src-openeuler/thunar-media-tags-plugin
- - src-openeuler/thunar-vcs-plugin
- - src-openeuler/thunar-volman
- - src-openeuler/thunarx-python
- - src-openeuler/tumbler
- - src-openeuler/xarchiver
- - src-openeuler/xfburn
- - src-openeuler/xfce-polkit
- - src-openeuler/xfce-theme-manager
- - src-openeuler/xfce4-appfinder
- - src-openeuler/xfce4-battery-plugin
- - src-openeuler/xfce4-calculator-plugin
- - src-openeuler/xfce4-clipman-plugin
- - src-openeuler/xfce4-cpufreq-plugin
- - src-openeuler/xfce4-cpugraph-plugin
- - src-openeuler/xfce4-datetime-plugin
- - src-openeuler/xfce4-dev-tools
- - src-openeuler/xfce4-dict
- - src-openeuler/xfce4-diskperf-plugin
- - src-openeuler/xfce4-embed-plugin
- - src-openeuler/xfce4-eyes-plugin
- - src-openeuler/xfce4-fsguard-plugin
- - src-openeuler/xfce4-genmon-plugin
- - src-openeuler/xfce4-hardware-monitor-plugin
- - src-openeuler/xfce4-mailwatch-plugin
- - src-openeuler/xfce4-mount-plugin
- - src-openeuler/xfce4-mpc-plugin
- - src-openeuler/xfce4-netload-plugin
- - src-openeuler/xfce4-notes-plugin
- - src-openeuler/xfce4-notifyd
- - src-openeuler/xfce4-panel
- - src-openeuler/xfce4-panel-profiles
- - src-openeuler/xfce4-places-plugin
- - src-openeuler/xfce4-power-manager
- - src-openeuler/xfce4-pulseaudio-plugin
- - src-openeuler/xfce4-screensaver
- - src-openeuler/xfce4-screenshooter
- - src-openeuler/xfce4-sensors-plugin
- - src-openeuler/xfce4-session
- - src-openeuler/xfce4-settings
- - src-openeuler/xfce4-smartbookmark-plugin
- - src-openeuler/xfce4-statusnotifier-plugin
- - src-openeuler/xfce4-systemload-plugin
- - src-openeuler/xfce4-taskmanager
- - src-openeuler/xfce4-terminal
- - src-openeuler/xfce4-time-out-plugin
- - src-openeuler/xfce4-timer-plugin
- - src-openeuler/xfce4-vala
- - src-openeuler/xfce4-verve-plugin
- - src-openeuler/xfce4-volumed-pulse
- - src-openeuler/xfce4-wavelan-plugin
- - src-openeuler/xfce4-weather-plugin
- - src-openeuler/xfce4-whiskermenu-plugin
- - src-openeuler/xfce4-xkb-plugin
- - src-openeuler/xfconf
- - src-openeuler/xfdashboard
- - src-openeuler/xfdesktop
- - src-openeuler/xfwm4
-- name: GNOME
- repositories:
- - src-openeuler/gdlmm
- - src-openeuler/libgdl
- - src-openeuler/qgnomeplatform
- - src-openeuler/gnome-control-center
- - src-openeuler/gtk-doc
- - src-openeuler/nautilus
- - src-openeuler/mutter
- - src-openeuler/libgnomekbd
- - src-openeuler/libgnomecanvas
- - src-openeuler/gnome-themes-standard
- - src-openeuler/gnome-online-accounts
- - src-openeuler/gnome-autoar
- - src-openeuler/gnome-desktop3
- - src-openeuler/gnome-vfs2
- - src-openeuler/libgnome
-- name: sig-desktop-apps
- repositories:
- - src-openeuler/vnpy
- - src-openeuler/musescore
- - src-openeuler/lilypond
- - src-openeuler/uget
- - src-openeuler/meld
- - src-openeuler/thunderbird
-- name: sig-DDE
- repositories:
- - src-openeuler/dde-control-center
- - src-openeuler/blur-effect
- - src-openeuler/dde-api
- - src-openeuler/dde-calendar
- - src-openeuler/dde-clipboard
- - src-openeuler/dde-daemon
- - src-openeuler/dde-dock
- - src-openeuler/dde-file-manager
- - src-openeuler/dde-introduction
- - src-openeuler/deepin-kwin
- - src-openeuler/dde-kwin
- - src-openeuler/dde-launcher
- - src-openeuler/dde-network-utils
- - src-openeuler/dde-polkit-agent
- - src-openeuler/dde-qt-dbus-factory
- - src-openeuler/dde-session-shell
- - src-openeuler/dde-session-ui
- - src-openeuler/deepin-anything
- - src-openeuler/deepin-compressor
- - src-openeuler/deepin-desktop-base
- - src-openeuler/deepin-desktop-schemas
- - src-openeuler/deepin-devicemanager
- - src-openeuler/deepin-editor
- - src-openeuler/deepin-font-manager
- - src-openeuler/deepin-gettext-tools
- - src-openeuler/deepin-graphics-driver-manager
- - src-openeuler/deepin-image-viewer
- - src-openeuler/deepin-log-viewer
- - src-openeuler/deepin-manual
- - src-openeuler/deepin-menu
- - src-openeuler/deepin-reader
- - src-openeuler/deepin-shortcut-viewer
- - src-openeuler/deepin-system-monitor
- - src-openeuler/deepin-terminal
- - src-openeuler/deepin-turbo
- - src-openeuler/deepin-sound-theme
- - src-openeuler/dtkcore
- - src-openeuler/dtkcore2
- - src-openeuler/dtkgui
- - src-openeuler/dtkwidget
- - src-openeuler/dtkwidget2
- - src-openeuler/dtkwm
- - src-openeuler/deepin-icon-theme
- - src-openeuler/qt5integration
- - src-openeuler/udisks2-qt5
- - src-openeuler/startdde
- - src-openeuler/deepin-wallpapers
- - src-openeuler/deepin-gtk-theme
- - src-openeuler/dde-account-faces
- - src-openeuler/dde-server-industry-config
- - src-openeuler/dde-device-formatter
- - src-openeuler/deepin-clone
- - src-openeuler/deepin-dbus-generator
- - src-openeuler/deepin-default-settings
- - src-openeuler/deepin-gir-generator
- - src-openeuler/deepin-qml-widgets
- - src-openeuler/dde
-- name: sig-high-performance-network
- repositories:
- - src-openeuler/dwarves
- - src-openeuler/dpdk
- - src-openeuler/rdma-core
- - src-openeuler/libbpf
- - src-openeuler/goebpf
- - src-openeuler/xdp-tools
- - src-openeuler/libvma
- - src-openeuler/polycube
- - src-openeuler/libkefir
- - src-openeuler/cilium
- - src-openeuler/katran
- - src-openeuler/pistache
- - src-openeuler/libyang
- - src-openeuler/libtins
- - src-openeuler/go-bindata
- - src-openeuler/seastar
-- name: sig-openstack
- repositories:
- - src-openeuler/openstack-nova
- - src-openeuler/openstack-python-novaclient
- - src-openeuler/openstack-neutron
-- name: sig-wine
- repositories:
- - src-openeuler/wine
-- name: sig-OS-Builder
- repositories:
- - src-openeuler/anaconda
- - src-openeuler/anaconda-user-help
- - src-openeuler/blivet-gui
- - src-openeuler/cdrkit
- - src-openeuler/dnf
- - src-openeuler/dnf-plugins-core
- - src-openeuler/libdnf
- - src-openeuler/libsolv
- - src-openeuler/efi-rpm-macros
- - src-openeuler/efibootmgr
- - src-openeuler/efivar
- - src-openeuler/grub2
- - src-openeuler/ipxe
- - src-openeuler/syslinux
- - src-openeuler/lorax
- - src-openeuler/python-blivet
- - src-openeuler/uboot-tools
- - src-openeuler/python-dasbus
- - src-openeuler/oemaker
- - openeuler/oemaker
-- name: sig-Gatekeeper
- repositories:
- - openeuler/ci-bot
- - openeuler/openeuler-jenkins
- - openeuler/openeuler-obs
-- name: sig-OKD
- repositories:
- - src-openeuler/moosefs
- - src-openeuler/kubevirt
- - src-openeuler/prometheus
- - src-openeuler/node_exporter
- - src-openeuler/etcd
- - src-openeuler/alertmanager
- - src-openeuler/quay
- - src-openeuler/pulp
- - src-openeuler/gvisor
- - src-openeuler/cri-o
- - src-openeuler/cri-tools
- - src-openeuler/go-rpm-macros
- - src-openeuler/go-srpm-macros
- - src-openeuler/goversioninfo
- - src-openeuler/openshift-ansible
- - src-openeuler/origin
-- name: sig-bootstrap
- repositories:
- - src-openeuler/bazel-bin
-- name: sig-confidential-computing
- repositories:
- - src-openeuler/linux-sgx
- - openeuler/secGear
-- name: sig-Kubernetes
- repositories:
- - openeuler/kubekey
-- name: sig-KDE
- repositories:
- - src-openeuler/kf5-attica
- - src-openeuler/kf5-frameworkintegration
- - src-openeuler/kf5-kactivities
- - src-openeuler/kf5-kbookmarks
- - src-openeuler/kf5-kcmutils
- - src-openeuler/kf5-kcompletion
- - src-openeuler/kf5-kcrash
- - src-openeuler/kf5-kdbusaddons
- - src-openeuler/kf5-kdeclarative
- - src-openeuler/kf5-kded
- - src-openeuler/kf5-kdelibs4support
- - src-openeuler/kf5-kdesignerplugin
- - src-openeuler/kf5-kdesu
- - src-openeuler/kf5-kemoticons
- - src-openeuler/kf5-kglobalaccel
- - src-openeuler/kf5-kiconthemes
- - src-openeuler/kf5-kinit
- - src-openeuler/kf5-kio
- - src-openeuler/kf5-kirigami2
- - src-openeuler/kf5-kitemmodels
- - src-openeuler/kf5-kitemviews
- - src-openeuler/kf5-kjobwidgets
- - src-openeuler/kf5-knewstuff
- - src-openeuler/kf5-knotifications
- - src-openeuler/kf5-kpackage
- - src-openeuler/kf5-kparts
- - src-openeuler/kf5-kplotting
- - src-openeuler/kf5-kpty
- - src-openeuler/kf5-kservice
- - src-openeuler/kf5-ktextwidgets
- - src-openeuler/kf5-kunitconversion
- - src-openeuler/kf5-kwallet
- - src-openeuler/kf5-kxmlgui
- - src-openeuler/kf5-networkmanager-qt
- - src-openeuler/kf5-plasma
- - src-openeuler/kf5-sonnet
- - src-openeuler/kf5-syntax-highlighting
- - src-openeuler/kf5-kdewebkit
- - src-openeuler/kdecoration
- - src-openeuler/kwin
- - src-openeuler/plasma-breeze
diff --git a/cve-python/tabletask/__init__.py b/cve-python/tabletask/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/cve-python/tabletask/crawltask.py b/cve-python/tabletask/crawltask.py
deleted file mode 100644
index c22fb3e..0000000
--- a/cve-python/tabletask/crawltask.py
+++ /dev/null
@@ -1,114 +0,0 @@
-# -*- coding: UTF-8 -*-
-#爬虫封装
-import requests
-from lxml import etree
-from datetime import datetime
-def crawling(url):
-
- try:
- content=requests.get(url).content
- except requests.exceptions.ConnectionError:
- print('ConnectionError')
- except requests.exceptions.ChunkedEncodingError:
- print('ChunkedEncodingError')
- except:
- print('Unfortunitely -- An Unknow Error Happened')
- html=etree.HTML(content)
- try:
- if html.xpath('/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[3]/div[2]/div[1]/div[2]/span/span/a/text()') == ["N/A"] or \
- html.xpath('/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[2]/div[2]/div[1]/div[2]/span/span/a/text()')==["N/A"] or \
- html.xpath('/html/body/div[2]/div[2]/div[2]/table/tr/td/div/div[1]/div[4]/div[2]/div[1]/div[2]/span/span/a/text()') == ['N/A']:
- if html.xpath("/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[2]/div[3]/div[1]/div[2]/span/span/a/text()")==["N/A"]or \
- html.xpath("/html/body/div[2]/div[2]/div/table/tbody/tr/td/div/div[1]/div[2]/div[2]/div[1]/div[2]/span/span/a/text()")==["N/A"]:
- # /html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[2]/div[2]/div[1]/div[2]/span/span/a
- nvdScore = cveLevel = cveDesc = repairTime = vectorValue = attackVector = accessVector = attackComplexity = accessComplexity = \
- privilegeRequired = userInteraction = scope = confidentiality = integrity = availability = authentication = None
- print("此漏洞链接无数据")
- else:
- scoreType="v2.0"
- element = html.xpath('//*[@id="nistV2MetricHidden"]/@value')
- cveDesc = str(html.xpath('//*[@id="vulnDetailTableView"]/tr/td/div/div[1]/p[1]/text()')[0])
- repairTime = str(html.xpath('//*[@id="vulnDetailTableView"]/tr/td/div/div[2]/div/span[1]/text()')[0])
- # print(repairTime,type(repairTime))
- repairTime =datetime.strptime(repairTime,'%m/%d/%Y')
- # print(repairTime)
- # print(type(repairTime))
- html1 = etree.HTML(element[0])
- cveLevel = str(html1.xpath('//*[@data-testid="vuln-cvssv2-base-score-severity"]/text()')[0].strip())
-
- nvdScore = str(html1.xpath('//*[@data-testid="vuln-cvssv2-base-score"]/text()')[0].strip())
-
- vectorValue = str(html1.xpath('//*[@data-testid="vuln-cvssv2-vector"]/text()')[0]).replace("(","").replace(")","").strip()
-
- accessVector = str(html1.xpath('//*[@data-testid="vuln-cvssv2-av"]/text()')[0].strip())
-
- accessComplexity = str(html1.xpath('//*[@data-testid="vuln-cvssv2-ac"]/text()')[0].strip())
-
- authentication = str(html1.xpath('//*[@data-testid="vuln-cvssv2-au"]/text()')[0].strip())
-
- confidentiality = str(html1.xpath('//*[@data-testid="vuln-cvssv3-c"]/text()')[0].strip())
-
- integrity = str(html1.xpath('//*[@data-testid="vuln-cvssv2-i"]/text()')[0].strip())
-
- availability = str(html1.xpath('//*[@data-testid="vuln-cvssv2-a"]/text()')[0].strip())
-
-
-
-
- attackVector=attackComplexity=privilegeRequired=userInteraction=scope=None
-
-
- elif html.xpath('/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[3]/div[2]/div[1]/div[2]/span/span/a/text()') == []and \
- html.xpath('/html/body/div[2]/div[2]/div/table/tr/td/div/div[1]/div[2]/div[2]/div[1]/div[2]/span/span/a/text()')==[]:
- nvdScore=cveLevel=cveDesc=repairTime=vectorValue=attackVector=accessVector=attackComplexity=accessComplexity= \
- privilegeRequired=userInteraction=scope=confidentiality=integrity=availability=authentication=scoreType=None
- print("此漏洞链接not found")
- else:
- scoreType="v3.0"
- cveDesc = str(html.xpath('//*[@id="vulnDetailTableView"]/tr/td/div/div[1]/p[1]/text()')[0])
-
- repairTime = html.xpath('//*[@id="vulnDetailTableView"]/tr/td/div/div[2]/div/span[1]/text()')[0]
- # print(repairTime,type(repairTime))
- repairTime =datetime.strptime(repairTime,'%m/%d/%Y')
- # print(repairTime)
- # print(type(repairTime))
- if html.xpath('//*[@id="nistV3MetricHidden"]/@value') != []:
- element = html.xpath('//*[@id="nistV3MetricHidden"]/@value')
-
- else:
- element = html.xpath('//*[@id="cnaV3MetricHidden"]/@value')
- html1 = etree.HTML(element[0])
- cveLevel = str(html1.xpath('//*[@data-testid="vuln-cvssv3-base-score-severity"]/text()')[0].strip())
-
- nvdScore = str(html1.xpath('//*[@data-testid="vuln-cvssv3-base-score"]/text()')[0].strip())
-
- vectorValue = str(html1.xpath('//*[@data-testid="vuln-cvssv3-vector"]/text()')[0]).replace("(",'').replace(')','').strip()
-
- attackVector = str(html1.xpath('//*[@data-testid="vuln-cvssv3-av"]/text()')[0].strip())
-
- attackComplexity = str(html1.xpath('//*[@data-testid="vuln-cvssv3-ac"]/text()')[0].strip())
-
- privilegeRequired = str(html1.xpath('//*[@data-testid="vuln-cvssv3-pr"]/text()')[0].strip())
-
- userInteraction = str(html1.xpath('//*[@data-testid="vuln-cvssv3-ui"]/text()')[0].strip())
-
- scope = str(html1.xpath('//*[@data-testid="vuln-cvssv3-s"]/text()')[0].strip())
-
- confidentiality = str(html1.xpath('//*[@data-testid="vuln-cvssv3-c"]/text()')[0].strip())
-
- integrity = str(html1.xpath('//*[@data-testid="vuln-cvssv3-i"]/text()')[0].strip())
-
- availability = str(html1.xpath('//*[@data-testid="vuln-cvssv3-a"]/text()')[0].strip())
-
-
-
- accessVector=accessComplexity=authentication=None
- except IndexError as e:
- print("下标越界",e)
- except UnboundLocalError as e:
- print("未找到标签",e)
- list = [nvdScore, cveLevel, cveDesc, repairTime, vectorValue, attackVector, accessVector, attackComplexity,accessComplexity,
- privilegeRequired, userInteraction, scope, confidentiality, integrity, availability, authentication,scoreType]
-
- return list
-
diff --git a/cve-python/tabletask/exceltask.py b/cve-python/tabletask/exceltask.py
deleted file mode 100644
index 2d656ea..0000000
--- a/cve-python/tabletask/exceltask.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# -*- coding: UTF-8 -*-
-#读取excel表格内容
-import xlrd
-import os
-import shutil
-
-
-#读取excel
-#CVE评分
-from xlrd import XLRDError
-
-
-# def crawlScore():
-# score=[]
-# try:
-# data = xlrd.open_workbook("./newexcels/a-l.rar.1599118583853.xlsx")
-# table_one = data.sheet_by_name("漏洞报告") # 根据表名查找漏洞报告信息表
-# row_number = table_one.nrows # 获取所有数据的最大行数
-# for i in range(1, row_number):
-# scoreOne =str(table_one.cell(i, 5).value)
-# score.append(scoreOne)
-# except IndexError as e:
-# print("下标越界",e)
-# except XLRDError as e:
-# print("未找到漏洞报告table",e)
-# except Exception as e:
-# print("其他异常:",e)
-# return score
-#CVE地址
-
-def crawlUrls(fileName):
- urls=[]
- try:
- data=xlrd.open_workbook("./newexcels/"+fileName)
- table_one=data.sheet_by_name("漏洞报告") #根据名称查找漏洞报告信息表
- row_number=table_one.nrows #获取所有数据的最大行数
- for i in range(1,row_number):
- url="https://nvd.nist.gov/vuln/detail/"+str(table_one.cell(i,2).value)
- urls.append(url)
- except IndexError as e:
- print("下标越界", e)
- except XLRDError as e:
- print("未找到漏洞报告table",e)
- except Exception as e:
- print("其他异常:", e)
- return urls
-#CVE编号
-def crawlCveNum(fileName):
- cveNum=[]
- try:
- data=xlrd.open_workbook("./newexcels/"+fileName)
- table_one=data.sheet_by_name("漏洞报告") #根据名称查找漏洞报告信息表
- row_number=table_one.nrows #获取所有数据的最大行数
- for i in range(1,row_number):
- cveNumOne=str(table_one.cell(i,2).value)
- cveNum.append(cveNumOne)
- except IndexError as e:
- print("下标越界", e)
- except XLRDError as e:
- print("未找到漏洞报告table",e)
- except Exception as e:
- print("其他异常:", e)
- return cveNum
-#CVE版本
-def crawlCveVersion(fileName):
- cveVersion=[]
- try:
- data=xlrd.open_workbook("./newexcels/"+fileName)
- table_one=data.sheet_by_name("漏洞报告")
- row_number=table_one.nrows
- for i in range(1,row_number):
- cveVersionOne=table_one.cell(i,1).value
- cveVersion.append(cveVersionOne)
- except IndexError as e:
- print("下标越界",e)
- except XLRDError as e:
- print("未找到漏洞报告table", e)
- except Exception as e:
- print("其他异常:", e)
- return cveVersion
-#CVE类型
-def crawlScopeType(fileName):
- scopeType=[]
- try:
- data=xlrd.open_workbook("./newexcels/"+fileName)
- table_one=data.sheet_by_name("漏洞报告")
- row_number=table_one.nrows
- for i in range(1,row_number):
- scopeTypeOne = 'v' + str(table_one.cell(i, 4).value)
- scopeType.append(scopeTypeOne)
- except IndexError as e:
- print("下标越界",e)
- except XLRDError as e:
- print("未找到漏洞报告table",e)
- except Exception as e:
- print("error:",e)
- return scopeType
-#Component
-def crawlPackName(fileName):
- packName = []
- try:
- data = xlrd.open_workbook("./newexcels/"+fileName)
- table_one = data.sheet_by_name("漏洞报告")
- row_number = table_one.nrows # 获取所有数据的最大行数
- for i in range(1, row_number):
- packNameOne = table_one.cell(i, 0).value
- packName.append(packNameOne)
- except IndexError as e:
- print("下标越界",e)
- except XLRDError as e:
- print("未找到漏洞报告table",e)
- except Exception as e:
- print("error:",e)
- return packName
-
-
-#excel解析完成后调用函数移动到oldexcels文件夹备份
-def move_file(fileName):
- try:
- f_src=os.path.join("./newexcels/"+fileName)
- f_dst=os.path.join("./oldexcels/"+fileName)
- shutil.move(f_src,f_dst)
- except Exception as e:
- print("move error",e)
diff --git a/cve-python/tabletask/runtask.py b/cve-python/tabletask/runtask.py
deleted file mode 100644
index d2d65e3..0000000
--- a/cve-python/tabletask/runtask.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# -*- coding: UTF-8 -*-
-# CVSS官网数据爬取 数据储存数据库
-
-
-from tabletask import exceltask,crawltask
-from dbConnecttion.MysqlConn import Mysql
-import time
-import os
-
-
-
-def crawlWeb():
- mysql=Mysql()
- path="./newexcels"
- files=os.listdir(path)
- if files:
- for fileName in files:
- cveNumList=exceltask.crawlCveNum(fileName)
- urls=exceltask.crawlUrls(fileName)
- cveVersionList=exceltask.crawlCveVersion(fileName)
- # scopeTypeList=exceltask.crawlScopeType()
- packNameList=exceltask.crawlPackName(fileName)
- for i in range(0,len(urls)):
- cveNum=str(cveNumList[i]).strip()
- print(cveNum)
- # 数据库查询结果
- sql = "select * from cve_origin_excel where cve_num= %s"
- val = (cveNum,)
- resultDict = mysql.getOne(sql, val)
-
- if resultDict: #判断CVE是否存在数据库
-
- #爬虫网页数据
- crawlList=crawltask.crawling(urls[i])
-
- #判断数据库类容是否为最新数据
- if resultDict["nvd_score"]!=None:
- if str(resultDict["nvd_score"])==str(crawlList[0])and str(resultDict["vector_value"],encoding="utf-8")==str(crawlList[4]):
- if resultDict['cve_status'] in [3,4,5]:
- updateTime = str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
- try:
- sql = "update cve_origin_excel set nvd_score=%s,cve_level=%s,cve_desc=%s,repair_time=%s,vector_value=%s,attack_vector=%s,access_vector=%s," \
- "attack_complexity=%s,access_complexity=%s,privilege_required=%s,user_interaction=%s,scope=%s,confidentiality=%s,integrity=%s" \
- ",availability=%s,authentication=%s,cve_status=%s,update_time=%s where cve_num=%s"
- val = (
- crawlList[0], crawlList[1], crawlList[2], crawlList[3], crawlList[4], crawlList[5],
- crawlList[6], crawlList[7], crawlList[8], crawlList[9],
- crawlList[10], crawlList[11], crawlList[12], crawlList[13], crawlList[14],
- crawlList[15], 1, updateTime, cveNum)
- mysql.update(sql, val)
- mysql.dispose()
- print("更新数据修改状态成功")
-
- except IndexError as e:
- print("下标越界", e)
- else:
- print("数据库为最新数据")
- else:
- print("更新数据")
- updateTime=str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
- try:
- sql="update cve_origin_excel set nvd_score=%s,cve_level=%s,cve_desc=%s,repair_time=%s,vector_value=%s,attack_vector=%s,access_vector=%s," \
- "attack_complexity=%s,access_complexity=%s,privilege_required=%s,user_interaction=%s,scope=%s,confidentiality=%s,integrity=%s" \
- ",availability=%s,authentication=%s,cve_status=%s,update_time=%s where cve_num=%s"
- val=(crawlList[0],crawlList[1],crawlList[2],crawlList[3],crawlList[4],crawlList[5],crawlList[6],crawlList[7],crawlList[8],crawlList[9],
- crawlList[10],crawlList[11],crawlList[12],crawlList[13],crawlList[14],crawlList[15],1,updateTime,cveNum)
- mysql.update(sql,val)
- mysql.dispose()
- except IndexError as e:
- print("下标越界",e)
-
-
-
- else:
- print("数据库未发现数据,执行插入操作")
- createTime=updateTime= str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
- deleteTime=None
- cveStatus=0 #状态0表示新建,1表示修改
- try:
- cveUrl=str(urls[i])
-
- cveVersion=str(cveVersionList[i])
-
- packName=str(packNameList[i])
-
- # scoreType = str(scopeTypeList[i].strip())
- #爬虫爬取数据列表
- list=crawltask.crawling(cveUrl)
-
-
-
- sql="INSERT INTO cve_origin_excel (cve_num,cve_url,cve_version,pack_name,score_type,nvd_score,cve_level,cve_desc,repair_time,vector_value,attack_vector," \
- "access_vector,attack_complexity,access_complexity,privilege_required,user_interaction,scope,confidentiality,integrity,availability,authentication,cve_status" \
- ",create_time,update_time,delete_time) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
- val=(cveNum,cveUrl,cveVersion,packName,list[16],list[0],list[1],list[2],list[3],list[4],list[5],list[6],list[7],list[8],list[9],list[10],list[11],list[12],list[13],
- list[14],list[15],cveStatus,createTime,updateTime,deleteTime)
-
- mysql.insertOne(sql,val)
- mysql.dispose()
- except IndexError as e:
- print("下标越界",e)
- exceltask.move_file(fileName)
- else:
- print("newexcels文件夹中无手动添加表")
- return False
- mysql.close()
-
-
-
diff --git a/cve-python/tabletask/test.py b/cve-python/tabletask/test.py
deleted file mode 100644
index 2ef010b..0000000
--- a/cve-python/tabletask/test.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- coding: UTF-8 -*-
-# from tabletask import toexcel
-import os
-from tabletask import exceltask
-fils=os.listdir("../newexcels")
-for i in fils:
- exceltask.move_file(i)
\ No newline at end of file
diff --git a/cve-python/tabletask/timedtask.py b/cve-python/tabletask/timedtask.py
deleted file mode 100644
index 4732209..0000000
--- a/cve-python/tabletask/timedtask.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: UTF-8 -*-
-import sys
-sys.path.append(r"D:\Users\Administrator\PycharmProjects\work")
-import os
-import schedule
-import time
-from tabletask import runtask,exceltask,toexcel
-
-def task():
- #判断newexcels中是否存在xlsx表格
- # while os.path.exists("../newexcels/b-l.rar.1599118583853.xlsx"):
- flag=os.path.exists("../newexcels/a-l.rar.1599118583853.xlsx")
- if flag:
-
- print("定时任务开始")
- runtask.crawlWeb()
- # #移动xlsx文件备份
- exceltask.move_file()
- else:
- print("excel文件不存在,手动加入excel文件")
- '''
- 查询数据库cve_status的数据,并生成excel
- 修改cve_status为3或者4的为5,表示已生成excel待处理
- '''
- toexcel.MysqlToExcel().generate_table()
- toexcel.MysqlToExcel().update_status()
-schedule.every().day.at("10:29").do(task)
-while True:
- schedule.run_pending() #run_pending:运行所有可以运行的任务
- time.sleep(1) #睡眠1秒
-
diff --git a/cve-python/tabletask/toexcel.py b/cve-python/tabletask/toexcel.py
deleted file mode 100644
index e860744..0000000
--- a/cve-python/tabletask/toexcel.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# -*- coding: UTF-8 -*-
-import os
-import xlwt
-from dbConnecttion.MysqlConn import Mysql
-class MysqlToExcel(object):
- def __init__(self):
- self.file_name= './problemexcels/data.xls'
- def get_results(self):
- mysql=Mysql()
- sql="select * from cve_origin_excel where cve_status = 3 or cve_status=4 or cve_status=5 or cve_status=Null"
- results=mysql.getMany(sql)
- print(results)
-
- mysql.dispose()
- mysql.close()
- return results
-
- def generate_table(self):
- #生成excel表格
- #文件已存在则删除
- if os.path.exists(self.file_name):
- os.remove(self.file_name)
- results=self.get_results()
- if not results:
- print("查询结果为空")
- return False
- #创建excel对象
- f=xlwt.Workbook()
- sheet1=f.add_sheet('sheet1',cell_overwrite_ok=True)
- #列字段
- column_names=['cve_id','cve_num','cve_url','cve_version','pack_name','score_type','nvd_score','cve_level','cve_desc',
- 'repair_time','vector_value','attack_vector','access_vector','attack_complexity','access_complexity',
- 'privilege_required','user_interaction','scope','confidentiality','integrity','availability',
- 'authentication','cve_status','create_time','update_time','delete_time']
- #写第一行,列名
- for i in range(0,len(column_names)):
- sheet1.write(0,i,column_names[i])
- #写多行
- num=0
- for i in results:
- for key in i:
- if type(i[key])==bytes:
- i[key]=i[key].decode("utf-8")
-
- sheet1.write(num + 1, 0, i["cve_id"])
- sheet1.write(num + 1, 1, i["cve_num"])
- sheet1.write(num + 1, 2, i["cve_url"])
- sheet1.write(num + 1, 3, i["cve_version"])
- sheet1.write(num + 1, 4, i["pack_name"])
- sheet1.write(num + 1, 5, i["score_type"])
- sheet1.write(num + 1, 6, i["nvd_score"])
- sheet1.write(num + 1, 7, i["cve_level"])
- sheet1.write(num + 1, 8, i["cve_desc"])
- sheet1.write(num + 1, 9, i["repair_time"])
- sheet1.write(num + 1, 10, i["vector_value"])
- sheet1.write(num + 1, 11, i["attack_vector"])
- sheet1.write(num + 1, 12, i["access_vector"])
- sheet1.write(num + 1, 13, i["attack_complexity"])
- sheet1.write(num + 1, 14, i["access_complexity"])
- sheet1.write(num + 1, 15, i["privilege_required"])
- sheet1.write(num + 1, 16, i["user_interaction"])
- sheet1.write(num + 1, 17, i["scope"])
- sheet1.write(num + 1, 18, i["confidentiality"])
- sheet1.write(num + 1, 19, i["integrity"])
- sheet1.write(num + 1, 20, i["availability"])
- sheet1.write(num + 1, 21, i["authentication"])
- sheet1.write(num + 1, 22, i["cve_status"])
- if i['create_time']!=None:
- sheet1.write(num + 1, 23, i["create_time"].strftime('%Y-%m-%d %H:%M:%S'))
- else:
- sheet1.write(num + 1, 23, i['create_time'])
- if i["update_time"]!=None:
- sheet1.write(num + 1, 24, i["update_time"].strftime('%Y-%m-%d %H:%M:%S'))
- else:
- sheet1.write(num + 1, 24, i["update_time"])
- if i["delete_time"] != None:
- sheet1.write(num + 1, 25, i["delete_time"].strftime('%Y-%m-%d %H:%M:%S'))
- else:
- sheet1.write(num + 1, 25, i["delete_time"])
- num+=1
- #保存文件
- f.save(self.file_name)
- #判断文件是否存在
- if not os.path.exists(self.file_name):
- print("生成excel失败")
- else:
- print("生成excel成功")
- #修改状态为3,4的为5表示已保存在excel中
- def update_status(self):
- mysql=Mysql()
- sql="update cve_origin_excel set cve_status=5 where cve_status=3 or cve_status=4"
- mysql.update(sql)
- mysql.dispose()
diff --git a/cve-python/templates/index.html b/cve-python/templates/index.html
deleted file mode 100644
index 1cbce03..0000000
--- a/cve-python/templates/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- Title
-
-
-hello world111
-
-
\ No newline at end of file
diff --git a/doc/sql/db_data.sql b/doc/sql/db_data.sql
new file mode 100644
index 0000000..484272d
--- /dev/null
+++ b/doc/sql/db_data.sql
@@ -0,0 +1,74 @@
+/*
+SQLyog Community v13.1.6 (64 bit)
+MySQL - 8.0.21 : Database - cvevulner
+*********************************************************************
+*/
+
+/*!40101 SET NAMES utf8 */;
+
+/*!40101 SET SQL_MODE=''*/;
+
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+CREATE DATABASE /*!32312 IF NOT EXISTS*/`cvevulner` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */;
+
+USE `cvevulner`;
+
+/*Table structure for table `cve_email_list` */
+
+DROP TABLE IF EXISTS `cve_email_list`;
+
+CREATE TABLE `cve_email_list` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `email_name` varchar(512) DEFAULT NULL,
+ `email_type` tinyint NOT NULL DEFAULT '1',
+ PRIMARY KEY (`id`),
+ KEY `cve_email_list_email_type` (`email_type`)
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
+
+/*Table structure for table `cve_ip_white` */
+
+DROP TABLE IF EXISTS `cve_ip_white`;
+
+CREATE TABLE `cve_ip_white` (
+ `ip_id` int NOT NULL AUTO_INCREMENT,
+ `machine_name` varchar(128) NOT NULL DEFAULT '',
+ `machine_ip` varchar(128) NOT NULL DEFAULT '',
+ `access_count` bigint NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ip_id`),
+ KEY `cve_ip_white_machine_ip` (`machine_ip`)
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+
+/*Table structure for table `cve_other_user` */
+
+DROP TABLE IF EXISTS `cve_other_user`;
+
+CREATE TABLE `cve_other_user` (
+ `user_id` int NOT NULL AUTO_INCREMENT,
+ `user_name` varchar(64) NOT NULL DEFAULT '',
+ `pass_word` varchar(256) NOT NULL DEFAULT '',
+ `aes_key` varchar(512) NOT NULL DEFAULT '',
+ `expiration_time` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `delete_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`user_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+
+/*Table structure for table `cve_security_reviewer` */
+
+DROP TABLE IF EXISTS `cve_security_reviewer`;
+
+CREATE TABLE `cve_security_reviewer` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `name_space` varchar(255) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name_space` (`name_space`)
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
diff --git a/doc/sql/db_struct.sql b/doc/sql/db_struct.sql
index e9ad2eb..37ccd60 100644
--- a/doc/sql/db_struct.sql
+++ b/doc/sql/db_struct.sql
@@ -28,6 +28,18 @@ CREATE TABLE `cve_admin_user` (
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*Table structure for table `cve_email_list` */
+
+DROP TABLE IF EXISTS `cve_email_list`;
+
+CREATE TABLE `cve_email_list` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `email_name` varchar(512) DEFAULT NULL,
+ `email_type` tinyint NOT NULL DEFAULT '1',
+ PRIMARY KEY (`id`),
+ KEY `cve_email_list_email_type` (`email_type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
/*Table structure for table `cve_export_record` */
DROP TABLE IF EXISTS `cve_export_record`;
@@ -71,7 +83,7 @@ CREATE TABLE `cve_git_open_euler` (
KEY `cve_git_open_euler_package_id` (`package_id`),
KEY `cve_git_open_euler_version` (`version`),
KEY `cve_git_open_euler_table_id` (`table_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=10413 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=10460 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_open_euler_table_relate` */
@@ -711,6 +723,19 @@ CREATE TABLE `cve_package` (
KEY `cve_package_sec_id` (`sec_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*Table structure for table `cve_package_cpe` */
+
+DROP TABLE IF EXISTS `cve_package_cpe`;
+
+CREATE TABLE `cve_package_cpe` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `packname` varchar(512) DEFAULT NULL,
+ `cpe_packname` varchar(512) DEFAULT NULL,
+ `create_time` varchar(32) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `cve_package_cpe_packname` (`packname`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
/*Table structure for table `cve_score` */
DROP TABLE IF EXISTS `cve_score`;
diff --git a/models/modeldb.go b/models/modeldb.go
index 685f8ad..f1c1375 100644
--- a/models/modeldb.go
+++ b/models/modeldb.go
@@ -214,6 +214,7 @@ type GitOpenEuler struct {
IssueCount int64 `orm:"column(issue_count);default(0)" description:"该软件包仓库下的issue总数"`
TableId int64 `orm:"index;column(table_id)" description:"表id,外键"`
TableName string `orm:"size(128);column(table_name)" description:"数据库pkginfo下的表名,如:mainline, bringInRely"`
+ CpePackName string `orm:"size(512);column(cpe_packname);null" description:"openEuler对应的cpe包名称(或者影响的包名)"`
Status int8 `orm:"default(0);column(status)" description:"0: 代表新数据; 1:已推送; 2:代表已废弃"`
CreateTime time.Time `orm:"auto_now_add;type(datetime);column(create_time)"`
UpdateTime time.Time `orm:"auto_now;type(datetime);column(update_time)"`
@@ -551,6 +552,19 @@ type ExportRecord struct {
CreateTime time.Time `orm:"auto_now_add;type(datetime);column(create_time)"`
}
+type PackageCpe struct {
+ Id int64 `orm:"pk;auto"`
+ PackName string `orm:"size(512);column(packname);index;null" description:"Cve对应的openEuler包名称(或者影响的包名)"`
+ CpePackName string `orm:"size(512);column(cpe_packname);null" description:"openEuler对应的cpe包名称(或者影响的包名)"`
+ CreateTime string `orm:"size(32);column(create_time);null" description:"createtime"`
+}
+
+type EmailList struct {
+ Id int64 `orm:"pk;auto"`
+ EmailName string `orm:"size(512);column(email_name);null" description:"收件人名称"`
+ EmailType int8 `orm:"index;column(email_type);default(1)" description:"1: excel导出列表"`
+}
+
func CreateDb() bool {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil {
@@ -572,7 +586,7 @@ func CreateDb() bool {
new(OriginUpstreamPoc), new(OriginUpstreamEvent), new(OriginUpstreamReference), new(OriginUpstreamVulType),
new(OriginUpstreamFixSuggest), new(OriginUpstreamFixSuggestRefTag),
new(OriginUpstreamFixSuggestRef), new(GiteOriginIssue), new(OriginExcel), new(ExportRecord), new(GitRepoGroups),
- new(GiteRepo), new(GiteRepoMember), new(GiteRepoBranch),
+ new(GiteRepo), new(GiteRepoMember), new(GiteRepoBranch),new(PackageCpe),new(EmailList),
)
logs.Info("table create success!")
errosyn := orm.RunSyncdb("default", false, true)
diff --git a/models/ymal.go b/models/ymal.go
index c96fa7a..6ef2f88 100644
--- a/models/ymal.go
+++ b/models/ymal.go
@@ -15,6 +15,14 @@ func GetYamlTable(gt *[]GitPackageTable) (int64, error) {
return num, errx
}
+func GetCpePackName(pc *PackageCpe, packName string) (error) {
+ o := orm.NewOrm()
+ errx := o.Raw("select id, cpe_packname"+
+ " from cve_package_cpe where packname = ?", packName).QueryRow(pc)
+
+ return errx
+}
+
func CreateYamlTable(gt *GitPackageTable) (TableId int64, err error) {
o := orm.NewOrm()
var localgt GitPackageTable
diff --git a/taskhandler/common.go b/taskhandler/common.go
index ea467ab..78b0598 100644
--- a/taskhandler/common.go
+++ b/taskhandler/common.go
@@ -71,10 +71,15 @@ const bodyUpTpl = `一、漏洞信息
func CommentTemplate(assignee, commentCmd, affectedVersion string) string {
//commentTemplate := ""
+ //commentTemplate := "Hey @" + assignee + "\n" +
+ // "以下内容需要您填写, 请复制到评论区回复喔" + "\n" +
+ // "影响性分析说明: \n\n" + "openEuler评分: (评分和向量)\n" +
+ // "openEulerScore: \n" + "openEulerVector: \n\n" +
+ // "受影响版本排查(受影响/不受影响): \n" + affectedVersion +
+ // "\n也可以参考: " + commentCmd + "\n"
commentTemplate := "Hey @" + assignee + "\n" +
"以下内容需要您填写, 请复制到评论区回复喔" + "\n" +
- "影响性分析说明: \n\n" + "openEuler评分: (评分和向量)\n" +
- "openEulerScore: \n" + "openEulerVector: \n\n" +
+ "影响性分析说明: \n\n" + "openEuler评分: (评分和向量)\n\n" +
"受影响版本排查(受影响/不受影响): \n" + affectedVersion +
"\n也可以参考: " + commentCmd + "\n"
return commentTemplate
diff --git a/taskhandler/yaml.go b/taskhandler/yaml.go
index 37051e5..e94b373 100644
--- a/taskhandler/yaml.go
+++ b/taskhandler/yaml.go
@@ -183,6 +183,12 @@ func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageT
func ProcPackDetail(url string, values map[string]interface{}, tableValue models.GitPackageTable, i int) (string, error){
var ge models.GitOpenEuler
GitOpenEulerData(values, &ge, tableValue)
+ // 查询cpe数据
+ var pc models.PackageCpe
+ pcError := models.GetCpePackName(&pc, ge.PackageName)
+ if pcError == nil && pc.Id > 0 {
+ ge.CpePackName = pc.CpePackName
+ }
ok, _ := models.GetSingleYaml(&ge)
if ok {
logs.Info("第 ", i, "条数据, PackageName: ", ge.PackageName, "已经存在,不需要再次插入")
--
Gitee