Merge pull request #1470 from merico-dev/v0.9-gitlab-merge-request-commits-convert
feat: convert merge request commits
diff --git a/plugins/gitlab/gitlab.go b/plugins/gitlab/gitlab.go
index fb3cda2..aed4440 100644
--- a/plugins/gitlab/gitlab.go
+++ b/plugins/gitlab/gitlab.go
@@ -3,11 +3,12 @@
import (
"context"
"fmt"
- "github.com/merico-dev/lake/config"
- errors "github.com/merico-dev/lake/errors"
"os"
"strconv"
+ "github.com/merico-dev/lake/config"
+ errors "github.com/merico-dev/lake/errors"
+
"github.com/merico-dev/lake/logger" // A pseudo type for Plugin Interface implementation
lakeModels "github.com/merico-dev/lake/models"
"github.com/merico-dev/lake/plugins/core"
@@ -88,17 +89,18 @@
}
if len(tasksToRun) == 0 {
tasksToRun = map[string]bool{
- "collectPipelines": true,
- "collectCommits": true,
- "CollectTags": true,
- "collectMrs": true,
- "collectMrNotes": true,
- "collectMrCommits": true,
- "enrichMrs": true,
- "convertProjects": true,
- "convertMrs": true,
- "convertCommits": true,
- "convertNotes": true,
+ "collectPipelines": true,
+ "collectCommits": true,
+ "CollectTags": true,
+ "collectMrs": true,
+ "collectMrNotes": true,
+ "collectMrCommits": true,
+ "enrichMrs": true,
+ "convertProjects": true,
+ "convertMrs": true,
+ "convertCommits": true,
+ "convertMrsCommits": true,
+ "convertNotes": true,
}
}
@@ -215,6 +217,16 @@
}
}
}
+ if tasksToRun["convertMrsCommits"] {
+ progress <- 0.85
+ err = tasks.ConvertMergeRequestCommits(projectIdInt)
+ if err != nil {
+ return &errors.SubTaskError{
+ SubTaskName: "convertMrsCommits",
+ Message: err.Error(),
+ }
+ }
+ }
if tasksToRun["convertNotes"] {
progress <- 0.9
err = tasks.ConvertNotes(ctx, projectIdInt)
diff --git a/plugins/gitlab/tasks/gitlab_merge_request_commits_converter.go b/plugins/gitlab/tasks/gitlab_merge_request_commits_converter.go
new file mode 100644
index 0000000..d04ecb4
--- /dev/null
+++ b/plugins/gitlab/tasks/gitlab_merge_request_commits_converter.go
@@ -0,0 +1,54 @@
+package tasks
+
+import (
+ lakeModels "github.com/merico-dev/lake/models"
+ "github.com/merico-dev/lake/models/domainlayer/code"
+ "github.com/merico-dev/lake/models/domainlayer/didgen"
+ gitlabModels "github.com/merico-dev/lake/plugins/gitlab/models"
+ "gorm.io/gorm/clause"
+)
+
+func ConvertMergeRequestCommits(projectId int) error {
+ gitlabMergeRequestCommit := &gitlabModels.GitlabMergeRequestCommit{}
+ cursor, err := lakeModels.Db.Model(&gitlabMergeRequestCommit).
+ Joins(`left join gitlab_merge_requests on gitlab_merge_requests.gitlab_id = gitlab_merge_request_commits.merge_request_id`).
+ Where("gitlab_merge_requests.project_id = ?", projectId).
+ Order("merge_request_id ASC").Rows()
+ if err != nil {
+ return err
+ }
+ defer cursor.Close()
+ var pullRequestId int
+ domainPullRequestId := ""
+ domainIdGenerator := didgen.NewDomainIdGenerator(&gitlabModels.GitlabMergeRequest{})
+
+ for cursor.Next() {
+ err = lakeModels.Db.ScanRows(cursor, gitlabMergeRequestCommit)
+
+ if pullRequestId != gitlabMergeRequestCommit.MergeRequestId {
+ domainPullRequestId = domainIdGenerator.Generate(gitlabMergeRequestCommit.MergeRequestId)
+ err := lakeModels.Db.Where("pull_request_id = ?",
+ domainPullRequestId).Delete(&code.PullRequestCommit{}).Error
+ if err != nil {
+ return err
+ }
+ pullRequestId = gitlabMergeRequestCommit.MergeRequestId
+ }
+ if err != nil {
+ return err
+ }
+
+ domainPrcommit := &code.PullRequestCommit{
+ CommitSha: gitlabMergeRequestCommit.CommitSha,
+ PullRequestId: domainPullRequestId,
+ }
+
+ err = lakeModels.Db.Clauses(clause.OnConflict{
+ DoNothing: true,
+ }).Create(domainPrcommit).Error
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}