in backend/plugins/jira/tasks/remotelink_extractor.go [39:127]
func ExtractRemotelinks(taskCtx plugin.SubTaskContext) errors.Error {
data := taskCtx.GetData().(*JiraTaskData)
scopeConfig := data.Options.ScopeConfig
// if the following condition is true, it means that the task is not enabled
if scopeConfig != nil && scopeConfig.ApplicationType != "" {
return nil
}
connectionId := data.Options.ConnectionId
boardId := data.Options.BoardId
logger := taskCtx.GetLogger()
logger.Info("extract remote links")
var err errors.Error
var commitShaRegex *regexp.Regexp
if data.Options.ScopeConfig != nil && data.Options.ScopeConfig.RemotelinkCommitShaPattern != "" {
pattern := data.Options.ScopeConfig.RemotelinkCommitShaPattern
commitShaRegex, err = errors.Convert01(regexp.Compile(pattern))
if err != nil {
return errors.Default.Wrap(err, "regexp Compile pattern failed")
}
}
var commitRepoUrlRegexps []*regexp.Regexp
if sc := data.Options.ScopeConfig; sc != nil {
for _, s := range sc.RemotelinkRepoPattern {
pattern, e := regexp.Compile(s.Regex)
if e != nil {
return errors.Convert(e)
}
commitRepoUrlRegexps = append(commitRepoUrlRegexps, pattern)
}
}
extractor, err := api.NewApiExtractor(api.ApiExtractorArgs{
RawDataSubTaskArgs: api.RawDataSubTaskArgs{
Ctx: taskCtx,
Params: JiraApiParams{
ConnectionId: connectionId,
BoardId: boardId,
},
Table: RAW_REMOTELINK_TABLE,
},
Extract: func(row *api.RawData) ([]interface{}, errors.Error) {
var result []interface{}
var raw apiv2models.RemoteLink
err := errors.Convert(json.Unmarshal(row.Data, &raw))
if err != nil {
return nil, err
}
var input apiv2models.Input
err = errors.Convert(json.Unmarshal(row.Input, &input))
if err != nil {
return nil, err
}
remotelink := &models.JiraRemotelink{
ConnectionId: connectionId,
RemotelinkId: raw.ID,
IssueId: input.IssueId,
Self: raw.Self,
Title: raw.Object.Title,
Url: raw.Object.URL,
IssueUpdated: &input.UpdateTime,
}
result = append(result, remotelink)
issueCommit := &models.JiraIssueCommit{
ConnectionId: connectionId,
IssueId: remotelink.IssueId,
CommitUrl: remotelink.Url,
}
if commitShaRegex != nil {
groups := commitShaRegex.FindStringSubmatch(remotelink.Url)
if len(groups) > 1 {
issueCommit.CommitSha = groups[1]
}
}
if issueCommit.CommitSha == "" {
issueCommit.CommitSha = api.ExtractCommitSha(commitRepoUrlRegexps, remotelink.Url)
}
if issueCommit.CommitSha != "" {
result = append(result, issueCommit)
}
return result, nil
},
})
if err != nil {
return err
}
return extractor.Execute()
}