in backend/plugins/bitbucket_server/tasks/pr_extractor.go [81:162]
func ExtractApiPullRequests(taskCtx plugin.SubTaskContext) errors.Error {
data := taskCtx.GetData().(*BitbucketServerTaskData)
config := data.Options.BitbucketServerScopeConfig
var prTypeRegex *regexp.Regexp
var prComponentRegex *regexp.Regexp
var err errors.Error
if config != nil {
if len(config.PrType) > 0 {
prTypeRegex, err = errors.Convert01(regexp.Compile(config.PrType))
if err != nil {
return errors.Default.Wrap(err, "regexp Compile prType failed")
}
}
if len(config.PrComponent) > 0 {
prComponentRegex, err = errors.Convert01(regexp.Compile(config.PrComponent))
if err != nil {
return errors.Default.Wrap(err, "regexp Compile prComponent failed")
}
}
}
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_PULL_REQUEST_TABLE)
extractor, err := api.NewApiExtractor(api.ApiExtractorArgs{
RawDataSubTaskArgs: *rawDataSubTaskArgs,
Extract: func(row *api.RawData) ([]interface{}, errors.Error) {
rawL := &ApiPrResponse{}
err := errors.Convert(json.Unmarshal(row.Data, rawL))
if err != nil {
return nil, err
}
// need to extract 2 kinds of entities here
results := make([]interface{}, 0, 1)
if rawL.BitbucketId == 0 {
return nil, nil
}
bitbucketPr, err := convertBitbucketPullRequest(rawL, data.Options.ConnectionId, data.Options.FullName)
if err != nil {
return nil, err
}
if rawL.Author != nil {
bitbucketUser, err := convertUser(rawL.Author.User, data.Options.ConnectionId)
if err != nil {
return nil, err
}
results = append(results, bitbucketUser)
bitbucketPr.AuthorName = bitbucketUser.DisplayName
bitbucketPr.AuthorId = bitbucketUser.BitbucketId
}
if rawL.MergeCommit != nil {
bitbucketPr.MergeCommitSha = rawL.MergeCommit.Hash
bitbucketPr.MergedAt = rawL.MergeCommit.Date.ToNullableTime()
} else if rawL.State == code.MERGED && rawL.BitbucketClosedAt != nil {
mergedAt := time.UnixMilli(*rawL.BitbucketClosedAt)
bitbucketPr.MergedAt = &mergedAt
}
if prTypeRegex != nil {
prTypes := prTypeRegex.FindStringSubmatch(rawL.Title)
if len(prTypes) > 0 {
bitbucketPr.Type = prTypes[0]
}
}
if prComponentRegex != nil {
prComponents := prComponentRegex.FindStringSubmatch(rawL.Description)
if len(prComponents) > 0 {
bitbucketPr.Component = prComponents[0]
}
}
results = append(results, bitbucketPr)
return results, nil
},
})
if err != nil {
return err
}
return extractor.Execute()
}