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

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


The following commit(s) were added to refs/heads/fix#6718 by this push:
     new 630102f83 fix: gitextractor fails when branch name is too long
630102f83 is described below

commit 630102f83be9b4544ea6d7e819796d282e2cb230
Author: abeizn <[email protected]>
AuthorDate: Tue Jan 16 15:27:13 2024 +0800

    fix: gitextractor fails when branch name is too long
---
 backend/core/models/domainlayer/code/ref.go        |   5 +-
 backend/core/models/domainlayer/domainlayer.go     |   5 +
 .../20240116_modify_refs_id_length.go              | 109 +++++++++++++++++++++
 .../core/models/migrationscripts/archived/base.go  |   5 +
 backend/core/models/migrationscripts/register.go   |   1 +
 backend/plugins/gitextractor/parser/repo.go        |  10 +-
 6 files changed, 128 insertions(+), 7 deletions(-)

diff --git a/backend/core/models/domainlayer/code/ref.go 
b/backend/core/models/domainlayer/code/ref.go
index c1d717d0f..c487f7eec 100644
--- a/backend/core/models/domainlayer/code/ref.go
+++ b/backend/core/models/domainlayer/code/ref.go
@@ -18,12 +18,13 @@ limitations under the License.
 package code
 
 import (
-       "github.com/apache/incubator-devlake/core/models/domainlayer"
        "time"
+
+       "github.com/apache/incubator-devlake/core/models/domainlayer"
 )
 
 type Ref struct {
-       domainlayer.DomainEntity
+       domainlayer.DomainEntityExtension
        RepoId      string `gorm:"type:varchar(255)"`
        Name        string `gorm:"type:varchar(255)"`
        CommitSha   string `gorm:"type:varchar(40)"`
diff --git a/backend/core/models/domainlayer/domainlayer.go 
b/backend/core/models/domainlayer/domainlayer.go
index 5ade4907a..a57dbfd65 100644
--- a/backend/core/models/domainlayer/domainlayer.go
+++ b/backend/core/models/domainlayer/domainlayer.go
@@ -26,6 +26,11 @@ type DomainEntity struct {
        common.NoPKModel
 }
 
+type DomainEntityExtension struct {
+       Id string `json:"id" gorm:"primaryKey;type:varchar(500);comment:This 
key is generated based on details from the original plugin"` // format: 
<Plugin>:<Entity>:<PK0>:<PK1>
+       common.NoPKModel
+}
+
 func NewDomainEntity(id string) DomainEntity {
        return DomainEntity{
                Id:        id,
diff --git 
a/backend/core/models/migrationscripts/20240116_modify_refs_id_length.go 
b/backend/core/models/migrationscripts/20240116_modify_refs_id_length.go
new file mode 100644
index 000000000..7c8812d05
--- /dev/null
+++ b/backend/core/models/migrationscripts/20240116_modify_refs_id_length.go
@@ -0,0 +1,109 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package migrationscripts
+
+import (
+       "time"
+
+       "github.com/apache/incubator-devlake/core/context"
+       "github.com/apache/incubator-devlake/core/dal"
+       "github.com/apache/incubator-devlake/core/errors"
+       
"github.com/apache/incubator-devlake/core/models/migrationscripts/archived"
+       "github.com/apache/incubator-devlake/core/plugin"
+       "github.com/apache/incubator-devlake/helpers/migrationhelper"
+)
+
+var _ plugin.MigrationScript = (*modifyRefsIdLength)(nil)
+
+type modifyRefsIdLength struct{}
+
+type ref20240116_old struct {
+       archived.DomainEntity
+       RepoId      string `gorm:"type:varchar(255)"`
+       Name        string `gorm:"type:varchar(255)"`
+       CommitSha   string `gorm:"type:varchar(40)"`
+       IsDefault   bool
+       RefType     string `gorm:"type:varchar(255)"`
+       CreatedDate *time.Time
+}
+
+type ref20240116 struct {
+       archived.DomainEntityExtension
+       RepoId      string `gorm:"type:varchar(255)"`
+       Name        string `gorm:"type:varchar(255)"`
+       CommitSha   string `gorm:"type:varchar(40)"`
+       IsDefault   bool
+       RefType     string `gorm:"type:varchar(255)"`
+       CreatedDate *time.Time
+}
+
+func (ref20240116) TableName() string {
+       return "refs"
+}
+
+func (script *modifyRefsIdLength) Up(basicRes context.BasicRes) errors.Error {
+       db := basicRes.GetDal()
+       // dbUrl := basicRes.GetConfig("DB_URL")
+       // if dbUrl == "" {
+       //      return errors.BadInput.New("DB_URL is required")
+       // }
+       // u, err1 := url.Parse(dbUrl)
+       // if err1 != nil {
+       //      return errors.Convert(err1)
+       // }
+       // if u.Scheme == "mysql" {
+       //      if err := db.Exec("ALTER TABLE refs DROP PRIMARY KEY"); err != 
nil {
+       //              return err
+       //      }
+       // } else {
+       //      if err := db.Exec("ALTER TABLE _tool_sonarqube_file_metrics 
DROP CONSTRAINT _tool_sonarqube_file_metrics_pkey"); err != nil {
+       //              return err
+       //      }
+       // }
+
+       err := migrationhelper.ChangeColumnsType[ref20240116](
+               basicRes,
+               script,
+               ref20240116{}.TableName(),
+               []string{"id"},
+               func(tmpColumnParams []interface{}) errors.Error {
+                       return db.UpdateColumn(
+                               &ref20240116{},
+                               "id",
+                               dal.DalClause{Expr: " ? ", Params: 
tmpColumnParams},
+                               dal.Where("? IS NOT NULL", tmpColumnParams...),
+                       )
+               },
+       )
+       if err != nil {
+               return err
+       }
+
+       if err := db.Exec("ALTER TABLE refs ADD PRIMARY KEY (id)"); err != nil {
+               return err
+       }
+       return nil
+}
+
+func (*modifyRefsIdLength) Version() uint64 {
+       return 20240116155126
+}
+
+func (*modifyRefsIdLength) Name() string {
+       return "modify refs id length from 255 to 500"
+}
diff --git a/backend/core/models/migrationscripts/archived/base.go 
b/backend/core/models/migrationscripts/archived/base.go
index 86bfeef06..02e7f69c6 100644
--- a/backend/core/models/migrationscripts/archived/base.go
+++ b/backend/core/models/migrationscripts/archived/base.go
@@ -28,6 +28,11 @@ type DomainEntity struct {
        NoPKModel
 }
 
+type DomainEntityExtension struct {
+       Id string `json:"id" gorm:"primaryKey;type:varchar(500);comment:This 
key is generated based on details from the original plugin"` // format: 
<Plugin>:<Entity>:<PK0>:<PK1>
+       NoPKModel
+}
+
 type Model struct {
        ID        uint64    `gorm:"primaryKey" json:"id"`
        CreatedAt time.Time `json:"createdAt"`
diff --git a/backend/core/models/migrationscripts/register.go 
b/backend/core/models/migrationscripts/register.go
index 74377d7d0..7e2d70af8 100644
--- a/backend/core/models/migrationscripts/register.go
+++ b/backend/core/models/migrationscripts/register.go
@@ -105,5 +105,6 @@ func All() []plugin.MigrationScript {
                new(addCommitMsgtoPipelineCommit),
                new(modfiyFieldsSort),
                new(modifyIssueLeadTimeMinutesToUint),
+               new(modifyRefsIdLength),
        }
 }
diff --git a/backend/plugins/gitextractor/parser/repo.go 
b/backend/plugins/gitextractor/parser/repo.go
index 411c183e4..46db33b9e 100644
--- a/backend/plugins/gitextractor/parser/repo.go
+++ b/backend/plugins/gitextractor/parser/repo.go
@@ -199,11 +199,11 @@ func (r *GitRepo) CollectBranches(subtaskCtx 
plugin.SubTaskContext) errors.Error
                                sha = oid.String()
                        }
                        ref := &code.Ref{
-                               DomainEntity: domainlayer.DomainEntity{Id: 
fmt.Sprintf("%s:%s", r.id, name)},
-                               RepoId:       r.id,
-                               Name:         name,
-                               CommitSha:    sha,
-                               RefType:      BRANCH,
+                               DomainEntityExtension: 
domainlayer.DomainEntityExtension{Id: fmt.Sprintf("%s:%s", r.id, name)},
+                               RepoId:                r.id,
+                               Name:                  name,
+                               CommitSha:             sha,
+                               RefType:               BRANCH,
                        }
                        ref.IsDefault, err1 = branch.IsHead()
                        if err1 != nil && err1.Error() != TypeNotMatchError {

Reply via email to