Skip to content

Commit e5cffe0

Browse files
authored
Merge pull request #1470 from merico-dev/v0.9-gitlab-merge-request-commits-convert
feat: convert merge request commits
2 parents f65ae43 + fb8e857 commit e5cffe0

File tree

2 files changed

+79
-13
lines changed

2 files changed

+79
-13
lines changed

plugins/gitlab/gitlab.go

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ package main // must be main for plugin entry point
33
import (
44
"context"
55
"fmt"
6-
"github.com/merico-dev/lake/config"
7-
errors "github.com/merico-dev/lake/errors"
86
"os"
97
"strconv"
108

9+
"github.com/merico-dev/lake/config"
10+
errors "github.com/merico-dev/lake/errors"
11+
1112
"github.com/merico-dev/lake/logger" // A pseudo type for Plugin Interface implementation
1213
lakeModels "github.com/merico-dev/lake/models"
1314
"github.com/merico-dev/lake/plugins/core"
@@ -88,17 +89,18 @@ func (plugin Gitlab) Execute(options map[string]interface{}, progress chan<- flo
8889
}
8990
if len(tasksToRun) == 0 {
9091
tasksToRun = map[string]bool{
91-
"collectPipelines": true,
92-
"collectCommits": true,
93-
"CollectTags": true,
94-
"collectMrs": true,
95-
"collectMrNotes": true,
96-
"collectMrCommits": true,
97-
"enrichMrs": true,
98-
"convertProjects": true,
99-
"convertMrs": true,
100-
"convertCommits": true,
101-
"convertNotes": true,
92+
"collectPipelines": true,
93+
"collectCommits": true,
94+
"CollectTags": true,
95+
"collectMrs": true,
96+
"collectMrNotes": true,
97+
"collectMrCommits": true,
98+
"enrichMrs": true,
99+
"convertProjects": true,
100+
"convertMrs": true,
101+
"convertCommits": true,
102+
"convertMrsCommits": true,
103+
"convertNotes": true,
102104
}
103105
}
104106

@@ -215,6 +217,16 @@ func (plugin Gitlab) Execute(options map[string]interface{}, progress chan<- flo
215217
}
216218
}
217219
}
220+
if tasksToRun["convertMrsCommits"] {
221+
progress <- 0.85
222+
err = tasks.ConvertMergeRequestCommits(projectIdInt)
223+
if err != nil {
224+
return &errors.SubTaskError{
225+
SubTaskName: "convertMrsCommits",
226+
Message: err.Error(),
227+
}
228+
}
229+
}
218230
if tasksToRun["convertNotes"] {
219231
progress <- 0.9
220232
err = tasks.ConvertNotes(ctx, projectIdInt)
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package tasks
2+
3+
import (
4+
lakeModels "github.com/merico-dev/lake/models"
5+
"github.com/merico-dev/lake/models/domainlayer/code"
6+
"github.com/merico-dev/lake/models/domainlayer/didgen"
7+
gitlabModels "github.com/merico-dev/lake/plugins/gitlab/models"
8+
"gorm.io/gorm/clause"
9+
)
10+
11+
func ConvertMergeRequestCommits(projectId int) error {
12+
gitlabMergeRequestCommit := &gitlabModels.GitlabMergeRequestCommit{}
13+
cursor, err := lakeModels.Db.Model(&gitlabMergeRequestCommit).
14+
Joins(`left join gitlab_merge_requests on gitlab_merge_requests.gitlab_id = gitlab_merge_request_commits.merge_request_id`).
15+
Where("gitlab_merge_requests.project_id = ?", projectId).
16+
Order("merge_request_id ASC").Rows()
17+
if err != nil {
18+
return err
19+
}
20+
defer cursor.Close()
21+
var pullRequestId int
22+
domainPullRequestId := ""
23+
domainIdGenerator := didgen.NewDomainIdGenerator(&gitlabModels.GitlabMergeRequest{})
24+
25+
for cursor.Next() {
26+
err = lakeModels.Db.ScanRows(cursor, gitlabMergeRequestCommit)
27+
28+
if pullRequestId != gitlabMergeRequestCommit.MergeRequestId {
29+
domainPullRequestId = domainIdGenerator.Generate(gitlabMergeRequestCommit.MergeRequestId)
30+
err := lakeModels.Db.Where("pull_request_id = ?",
31+
domainPullRequestId).Delete(&code.PullRequestCommit{}).Error
32+
if err != nil {
33+
return err
34+
}
35+
pullRequestId = gitlabMergeRequestCommit.MergeRequestId
36+
}
37+
if err != nil {
38+
return err
39+
}
40+
41+
domainPrcommit := &code.PullRequestCommit{
42+
CommitSha: gitlabMergeRequestCommit.CommitSha,
43+
PullRequestId: domainPullRequestId,
44+
}
45+
46+
err = lakeModels.Db.Clauses(clause.OnConflict{
47+
DoNothing: true,
48+
}).Create(domainPrcommit).Error
49+
if err != nil {
50+
return err
51+
}
52+
}
53+
return nil
54+
}

0 commit comments

Comments
 (0)