This is an automated email from the ASF dual-hosted git repository.

abeizn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 286f39448 feat: add new table ref_commits for the refdiff plugin 
(#3801)
286f39448 is described below

commit 286f39448b3a97f4e98e0d36576d3979ed48a866
Author: abeizn <[email protected]>
AuthorDate: Thu Nov 24 20:40:17 2022 +0800

    feat: add new table ref_commits for the refdiff plugin (#3801)
    
    * feat: add new table ref_commits for the refdiff plugin
---
 models/domainlayer/code/commits_diff.go            | 15 ++++++-
 models/domainlayer/domaininfo/domaininfo.go        |  3 +-
 .../20221109_modfiy_commits_diffs.go               | 18 +++++++-
 .../e2e/project_deployment_commit_diff_test.go     |  4 +-
 plugins/refdiff/tasks/commit_diff_calculator.go    | 49 +++++++++++++++++-----
 .../project_deployment_commit_diff_calculator.go   |  6 +--
 6 files changed, 76 insertions(+), 19 deletions(-)

diff --git a/models/domainlayer/code/commits_diff.go 
b/models/domainlayer/code/commits_diff.go
index 8fc83632f..a6b546b6b 100644
--- a/models/domainlayer/code/commits_diff.go
+++ b/models/domainlayer/code/commits_diff.go
@@ -28,11 +28,22 @@ func (CommitsDiff) TableName() string {
        return "commits_diffs"
 }
 
-type FinishedCommitsDiffs struct {
+type RefCommit struct {
+       NewRefId     string `gorm:"primaryKey;type:varchar(255)"`
+       OldRefId     string `gorm:"primaryKey;type:varchar(255)"`
+       NewCommitSha string `gorm:"type:varchar(40)"`
+       OldCommitSha string `gorm:"type:varchar(40)"`
+}
+
+func (RefCommit) TableName() string {
+       return "ref_commits"
+}
+
+type FinishedCommitsDiff struct {
        NewCommitSha string `gorm:"primaryKey;type:varchar(40)"`
        OldCommitSha string `gorm:"primaryKey;type:varchar(40)"`
 }
 
-func (FinishedCommitsDiffs) TableName() string {
+func (FinishedCommitsDiff) TableName() string {
        return "finished_commits_diffs"
 }
diff --git a/models/domainlayer/domaininfo/domaininfo.go 
b/models/domainlayer/domaininfo/domaininfo.go
index f4a9d529c..3450923dd 100644
--- a/models/domainlayer/domaininfo/domaininfo.go
+++ b/models/domainlayer/domaininfo/domaininfo.go
@@ -42,7 +42,8 @@ func GetDomainTablesInfo() []Tabler {
                &code.PullRequestLabel{},
                &code.Ref{},
                &code.CommitsDiff{},
-               &code.FinishedCommitsDiffs{},
+               &code.RefCommit{},
+               &code.FinishedCommitsDiff{},
                &code.RefsPrCherrypick{},
                &code.Repo{},
                &code.RepoCommit{},
diff --git a/models/migrationscripts/20221109_modfiy_commits_diffs.go 
b/models/migrationscripts/20221109_modfiy_commits_diffs.go
index 1c35662aa..9860db737 100644
--- a/models/migrationscripts/20221109_modfiy_commits_diffs.go
+++ b/models/migrationscripts/20221109_modfiy_commits_diffs.go
@@ -52,9 +52,9 @@ func (RefsCommitsDiff20221109) TableName() string {
 }
 
 type CommitsDiff20221109 struct {
-       CommitSha    string `gorm:"primaryKey;type:varchar(40)"`
        NewCommitSha string `gorm:"primaryKey;type:varchar(40)"`
        OldCommitSha string `gorm:"primaryKey;type:varchar(40)"`
+       CommitSha    string `gorm:"primaryKey;type:varchar(40)"`
        SortingIndex int
 }
 
@@ -62,6 +62,17 @@ func (CommitsDiff20221109) TableName() string {
        return "commits_diffs"
 }
 
+type RefCommits20221109 struct {
+       NewRefId     string `gorm:"primaryKey;type:varchar(255)"`
+       OldRefId     string `gorm:"primaryKey;type:varchar(255)"`
+       NewCommitSha string `gorm:"type:varchar(40)"`
+       OldCommitSha string `gorm:"type:varchar(40)"`
+}
+
+func (RefCommits20221109) TableName() string {
+       return "ref_commits"
+}
+
 func (script *modifyCommitsDiffs) Up(basicRes core.BasicRes) errors.Error {
        db := basicRes.GetDal()
        // create table
@@ -70,6 +81,11 @@ func (script *modifyCommitsDiffs) Up(basicRes core.BasicRes) 
errors.Error {
                return err
        }
 
+       err = db.AutoMigrate(&RefCommits20221109{})
+       if err != nil {
+               return err
+       }
+
        err = db.AutoMigrate(&FinishedCommitsDiffs20221109{})
        if err != nil {
                return err
diff --git a/plugins/refdiff/e2e/project_deployment_commit_diff_test.go 
b/plugins/refdiff/e2e/project_deployment_commit_diff_test.go
index 3de043e0a..5b5028f58 100644
--- a/plugins/refdiff/e2e/project_deployment_commit_diff_test.go
+++ b/plugins/refdiff/e2e/project_deployment_commit_diff_test.go
@@ -50,14 +50,14 @@ func TestRepoDataFlow(t *testing.T) {
 
        // verify extraction
        dataflowTester.FlushTabler(&code.CommitsDiff{})
-       dataflowTester.FlushTabler(&code.FinishedCommitsDiffs{})
+       dataflowTester.FlushTabler(&code.FinishedCommitsDiff{})
 
        dataflowTester.Subtask(tasks.CalculateProjectDeploymentCommitsDiffMeta, 
taskData)
        dataflowTester.VerifyTableWithOptions(&code.CommitsDiff{}, 
e2ehelper.TableOptions{
                CSVRelPath: "./snapshot_tables/commits_diffs.csv",
        })
 
-       dataflowTester.VerifyTableWithOptions(&code.FinishedCommitsDiffs{}, 
e2ehelper.TableOptions{
+       dataflowTester.VerifyTableWithOptions(&code.FinishedCommitsDiff{}, 
e2ehelper.TableOptions{
                CSVRelPath: "./snapshot_tables/finished_commits_diffs.csv",
        })
 }
diff --git a/plugins/refdiff/tasks/commit_diff_calculator.go 
b/plugins/refdiff/tasks/commit_diff_calculator.go
index a6ba0b13d..98795c679 100644
--- a/plugins/refdiff/tasks/commit_diff_calculator.go
+++ b/plugins/refdiff/tasks/commit_diff_calculator.go
@@ -18,6 +18,7 @@ limitations under the License.
 package tasks
 
 import (
+       "fmt"
        "reflect"
 
        "github.com/apache/incubator-devlake/errors"
@@ -40,25 +41,43 @@ func CalculateCommitsDiff(taskCtx core.SubTaskContext) 
errors.Error {
        }
 
        // get all data from finish_commits_diffs
-       commitPairs := data.Options.AllPairs
-       var ExistFinishedCommitDiff []code.FinishedCommitsDiffs
-       err := db.All(&ExistFinishedCommitDiff,
+       commitPairsSrc := data.Options.AllPairs
+       var commitPairs RefCommitPairs
+       var existFinishedCommitDiff []code.FinishedCommitsDiff
+       err := db.All(&existFinishedCommitDiff,
                dal.Select("*"),
                dal.From("finished_commits_diffs"),
        )
        if err != nil {
                return err
        }
-       for i := 0; i < len(commitPairs); i++ {
-               pair := commitPairs[i]
-               for _, item := range ExistFinishedCommitDiff {
+
+       refCommit := &code.RefCommit{}
+       for _, pair := range commitPairsSrc {
+               newRefId := fmt.Sprintf("%s:%s", repoId, pair[2])
+               oldRefId := fmt.Sprintf("%s:%s", repoId, pair[3])
+               isAppend := true
+               isRefAppend := true
+               for _, item := range existFinishedCommitDiff {
                        if pair[0] == item.NewCommitSha && pair[1] == 
item.OldCommitSha {
-                               commitPairs = append(commitPairs[:i], 
commitPairs[i+1:]...)
-                               i--
+                               isAppend = false
+                               if pair[2] == newRefId && pair[3] == oldRefId {
+                                       isRefAppend = false
+                               }
                                break
                        }
                }
+               if isAppend {
+                       commitPairs = append(commitPairs, pair)
+               }
+               if isRefAppend {
+                       refCommit.NewCommitSha = pair[0]
+                       refCommit.OldCommitSha = pair[1]
+                       refCommit.NewRefId = newRefId
+                       refCommit.OldRefId = oldRefId
+               }
        }
+
        if len(commitPairs) == 0 {
                logger.Info("commit pair has been produced.")
                return nil
@@ -98,7 +117,7 @@ func CalculateCommitsDiff(taskCtx core.SubTaskContext) 
errors.Error {
 
        // calculate diffs for commits pairs and store them into database
        commitsDiff := &code.CommitsDiff{}
-       finishedCommitDiff := &code.FinishedCommitsDiffs{}
+       finishedCommitDiff := &code.FinishedCommitsDiff{}
        lenCommitPairs := len(commitPairs)
        taskCtx.SetProgress(0, lenCommitPairs)
 
@@ -111,6 +130,7 @@ func CalculateCommitsDiff(taskCtx core.SubTaskContext) 
errors.Error {
                // ref might advance, keep commit sha for debugging
                commitsDiff.NewCommitSha = pair[0]
                commitsDiff.OldCommitSha = pair[1]
+
                finishedCommitDiff.NewCommitSha = pair[0]
                finishedCommitDiff.OldCommitSha = pair[1]
 
@@ -126,7 +146,8 @@ func CalculateCommitsDiff(taskCtx core.SubTaskContext) 
errors.Error {
                lostSha, oldCount, newCount := 
commitNodeGraph.CalculateLostSha(pair[1], pair[0])
 
                commitsDiffs := []code.CommitsDiff{}
-               finishedCommitDiffs := []code.FinishedCommitsDiffs{}
+               refCommits := []code.RefCommit{}
+               finishedCommitDiffs := []code.FinishedCommitsDiff{}
 
                commitsDiff.SortingIndex = 1
                for _, sha := range lostSha {
@@ -154,6 +175,14 @@ func CalculateCommitsDiff(taskCtx core.SubTaskContext) 
errors.Error {
                        }
                }
 
+               refCommits = append(refCommits, *refCommit)
+               if len(refCommits) > 0 {
+                       err = db.CreateIfNotExist(refCommits)
+                       if err != nil {
+                               return err
+                       }
+               }
+
                finishedCommitDiffs = append(finishedCommitDiffs, 
*finishedCommitDiff)
                if len(finishedCommitDiffs) > 0 {
                        err = db.CreateIfNotExist(finishedCommitDiffs)
diff --git a/plugins/refdiff/tasks/project_deployment_commit_diff_calculator.go 
b/plugins/refdiff/tasks/project_deployment_commit_diff_calculator.go
index 0f07c31fa..990c7dfd1 100644
--- a/plugins/refdiff/tasks/project_deployment_commit_diff_calculator.go
+++ b/plugins/refdiff/tasks/project_deployment_commit_diff_calculator.go
@@ -27,7 +27,7 @@ import (
        "github.com/apache/incubator-devlake/plugins/refdiff/utils"
 )
 
-func CommitDiffConvertor(pipelineCommitShaList []string, 
existFinishedCommitDiff []code.FinishedCommitsDiffs) (commitPairs 
[]code.CommitsDiff, finishedCommitDiffs []code.FinishedCommitsDiffs) {
+func CommitDiffConvertor(pipelineCommitShaList []string, 
existFinishedCommitDiff []code.FinishedCommitsDiff) (commitPairs 
[]code.CommitsDiff, finishedCommitDiffs []code.FinishedCommitsDiff) {
        for i := 0; i < len(pipelineCommitShaList)-1; i++ {
                for _, item := range existFinishedCommitDiff {
                        if pipelineCommitShaList[i+1] == item.NewCommitSha && 
pipelineCommitShaList[i] == item.OldCommitSha {
@@ -36,7 +36,7 @@ func CommitDiffConvertor(pipelineCommitShaList []string, 
existFinishedCommitDiff
                        }
                }
                commitPairs = append(commitPairs, 
code.CommitsDiff{NewCommitSha: pipelineCommitShaList[i+1], OldCommitSha: 
pipelineCommitShaList[i]})
-               finishedCommitDiffs = append(finishedCommitDiffs, 
code.FinishedCommitsDiffs{NewCommitSha: pipelineCommitShaList[i+1], 
OldCommitSha: pipelineCommitShaList[i]})
+               finishedCommitDiffs = append(finishedCommitDiffs, 
code.FinishedCommitsDiff{NewCommitSha: pipelineCommitShaList[i+1], 
OldCommitSha: pipelineCommitShaList[i]})
        }
        return commitPairs, finishedCommitDiffs
 }
@@ -62,7 +62,7 @@ func CalculateProjectDeploymentCommitsDiff(taskCtx 
core.SubTaskContext) errors.E
        }
        defer cursorScope.Close()
 
-       var existFinishedCommitDiff []code.FinishedCommitsDiffs
+       var existFinishedCommitDiff []code.FinishedCommitsDiff
        err = db.All(&existFinishedCommitDiff,
                dal.Select("*"),
                dal.From("finished_commits_diffs"),

Reply via email to