in backend/plugins/gitlab/tasks/mr_extractor.go [88:184]
func ExtractApiMergeRequests(taskCtx plugin.SubTaskContext) errors.Error {
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_MERGE_REQUEST_TABLE)
config := data.Options.ScopeConfig
var labelTypeRegex *regexp.Regexp
var labelComponentRegex *regexp.Regexp
var prType = config.PrType
var err1 error
if len(prType) > 0 {
labelTypeRegex, err1 = regexp.Compile(prType)
if err1 != nil {
return errors.Default.Wrap(err1, "regexp Compile prType failed")
}
}
var prComponent = config.PrComponent
if len(prComponent) > 0 {
labelComponentRegex, err1 = regexp.Compile(prComponent)
if err1 != nil {
return errors.Default.Wrap(err1, "regexp Compile prComponent failed")
}
}
extractor, err := api.NewApiExtractor(api.ApiExtractorArgs{
RawDataSubTaskArgs: *rawDataSubTaskArgs,
Extract: func(row *api.RawData) ([]interface{}, errors.Error) {
mr := &MergeRequestRes{}
s := string(row.Data)
err := errors.Convert(json.Unmarshal(row.Data, mr))
if err != nil {
return nil, err
}
gitlabMergeRequest, err := convertMergeRequest(mr)
if err != nil {
return nil, err
}
// if we can not find merged_at and closed_at info in the detail
// we need get detail for gitlab v11
if !strings.Contains(s, "\"merged_at\":") {
if !strings.Contains(s, "\"closed_at\":") {
gitlabMergeRequest.IsDetailRequired = true
}
}
results := make([]interface{}, 0, len(mr.Reviewers)+1)
gitlabMergeRequest.ConnectionId = data.Options.ConnectionId
results = append(results, gitlabMergeRequest)
for _, label := range mr.Labels {
results = append(results, &models.GitlabMrLabel{
MrId: gitlabMergeRequest.GitlabId,
LabelName: label,
ConnectionId: data.Options.ConnectionId,
})
// if pr.Type has not been set and prType is set in .env, process the below
if labelTypeRegex != nil {
groups := labelTypeRegex.FindStringSubmatch(label)
if len(groups) > 1 {
gitlabMergeRequest.Type = groups[1]
}
}
// if pr.Component has not been set and prComponent is set in .env, process
if labelComponentRegex != nil {
groups := labelComponentRegex.FindStringSubmatch(label)
if len(groups) > 1 {
gitlabMergeRequest.Component = groups[1]
}
}
}
for _, reviewer := range mr.Reviewers {
gitlabReviewer := &models.GitlabReviewer{
ConnectionId: data.Options.ConnectionId,
GitlabId: reviewer.GitlabId,
MergeRequestId: mr.GitlabId,
ProjectId: data.Options.ProjectId,
Username: reviewer.Username,
Name: reviewer.Name,
State: reviewer.State,
AvatarUrl: reviewer.AvatarUrl,
WebUrl: reviewer.WebUrl,
}
results = append(results, gitlabReviewer)
}
return results, nil
},
})
if err != nil {
return errors.Convert(err)
}
return extractor.Execute()
}