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

klesh 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 512857e61 feat: impl make plan v200 for gitlab (#3793)
512857e61 is described below

commit 512857e6114f3d0d50beaa40e8b885959cd2b84b
Author: mappjzc <[email protected]>
AuthorDate: Thu Nov 24 17:30:24 2022 +0800

    feat: impl make plan v200 for gitlab (#3793)
    
    impl make plan v200 for gitlab
    
    Nddtfjiang <[email protected]>
---
 plugins/gitlab/api/blueprint.go      |  3 +-
 plugins/gitlab/api/blueprint_v200.go | 80 ++++++++++++++++++++++++++++++++++++
 plugins/gitlab/impl/impl.go          | 26 ++++++++----
 utils/callframes.go                  | 15 +++++++
 4 files changed, 114 insertions(+), 10 deletions(-)

diff --git a/plugins/gitlab/api/blueprint.go b/plugins/gitlab/api/blueprint.go
index d10ffbb38..178fc4fd4 100644
--- a/plugins/gitlab/api/blueprint.go
+++ b/plugins/gitlab/api/blueprint.go
@@ -21,13 +21,14 @@ import (
        "context"
        "encoding/json"
        "fmt"
-       "github.com/apache/incubator-devlake/errors"
        "io"
        "net/http"
        "net/url"
        "strings"
        "time"
 
+       "github.com/apache/incubator-devlake/errors"
+
        "github.com/apache/incubator-devlake/models/domainlayer/didgen"
        "github.com/apache/incubator-devlake/plugins/core"
        "github.com/apache/incubator-devlake/plugins/gitlab/models"
diff --git a/plugins/gitlab/api/blueprint_v200.go 
b/plugins/gitlab/api/blueprint_v200.go
new file mode 100644
index 000000000..3109c5994
--- /dev/null
+++ b/plugins/gitlab/api/blueprint_v200.go
@@ -0,0 +1,80 @@
+/*
+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 api
+
+import (
+       "github.com/apache/incubator-devlake/errors"
+       "github.com/go-playground/validator/v10"
+
+       "github.com/apache/incubator-devlake/models/domainlayer/code"
+       "github.com/apache/incubator-devlake/models/domainlayer/didgen"
+       "github.com/apache/incubator-devlake/models/domainlayer/ticket"
+       "github.com/apache/incubator-devlake/plugins/core"
+       "github.com/apache/incubator-devlake/plugins/gitlab/models"
+       "github.com/apache/incubator-devlake/plugins/helper"
+)
+
+func MakeDataSourcePipelinePlanV200(connectionId uint64, scopes 
[]*core.BlueprintScopeV200) (pp core.PipelinePlan, sc []core.Scope, err 
errors.Error) {
+       pp = make(core.PipelinePlan, 0, 1)
+       sc = make([]core.Scope, 0, 3*len(scopes))
+       err = nil
+
+       connectionHelper := helper.NewConnectionHelper(BasicRes, 
validator.New())
+
+       // get the connection info for url
+       connection := &models.GitlabConnection{}
+       err = connectionHelper.FirstById(connection, connectionId)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       ps := make(core.PipelineStage, 0, len(scopes))
+       for _, scope := range scopes {
+               var board ticket.Board
+               var repo code.Repo
+
+               id := 
didgen.NewDomainIdGenerator(&models.GitlabProject{}).Generate(connectionId, 
scope.Id)
+
+               repo.Id = id
+               repo.Name = scope.Name
+
+               board.Id = id
+               board.Name = scope.Name
+
+               sc = append(sc, &repo)
+               sc = append(sc, &board)
+
+               ps = append(ps, &core.PipelineTask{
+                       Plugin: "gitlab",
+                       Options: map[string]interface{}{
+                               "name": scope.Name,
+                       },
+               })
+
+               ps = append(ps, &core.PipelineTask{
+                       Plugin: "gitextractor",
+                       Options: map[string]interface{}{
+                               "url": connection.Endpoint + scope.Name,
+                       },
+               })
+       }
+
+       pp = append(pp, ps)
+
+       return pp, sc, nil
+}
diff --git a/plugins/gitlab/impl/impl.go b/plugins/gitlab/impl/impl.go
index 350656e23..388205635 100644
--- a/plugins/gitlab/impl/impl.go
+++ b/plugins/gitlab/impl/impl.go
@@ -21,25 +21,29 @@ import (
        "fmt"
 
        "github.com/apache/incubator-devlake/errors"
-
        "github.com/apache/incubator-devlake/plugins/core"
        "github.com/apache/incubator-devlake/plugins/gitlab/api"
        "github.com/apache/incubator-devlake/plugins/gitlab/models"
        
"github.com/apache/incubator-devlake/plugins/gitlab/models/migrationscripts"
        "github.com/apache/incubator-devlake/plugins/gitlab/tasks"
        "github.com/apache/incubator-devlake/plugins/helper"
+
        "github.com/spf13/viper"
        "gorm.io/gorm"
 )
 
-var _ core.PluginMeta = (*Gitlab)(nil)
-var _ core.PluginInit = (*Gitlab)(nil)
-var _ core.PluginTask = (*Gitlab)(nil)
-var _ core.PluginApi = (*Gitlab)(nil)
-var _ core.PluginModel = (*Gitlab)(nil)
-var _ core.PluginMigration = (*Gitlab)(nil)
-var _ core.PluginBlueprintV100 = (*Gitlab)(nil)
-var _ core.CloseablePluginTask = (*Gitlab)(nil)
+type GitlabImpl interface {
+       core.PluginMeta
+       core.PluginInit
+       core.PluginTask
+       core.PluginModel
+       core.PluginMigration
+       core.PluginBlueprintV100
+       core.DataSourcePluginBlueprintV200
+       core.CloseablePluginTask
+}
+
+var _ GitlabImpl = (*Gitlab)(nil)
 
 type Gitlab string
 
@@ -48,6 +52,10 @@ func (plugin Gitlab) Init(config *viper.Viper, logger 
core.Logger, db *gorm.DB)
        return nil
 }
 
+func (plugin Gitlab) MakeDataSourcePipelinePlanV200(connectionId uint64, 
scopes []*core.BlueprintScopeV200) (pp core.PipelinePlan, sc []core.Scope, err 
errors.Error) {
+       return api.MakeDataSourcePipelinePlanV200(connectionId, scopes)
+}
+
 func (plugin Gitlab) GetTablesInfo() []core.Tabler {
        return []core.Tabler{
                &models.GitlabConnection{},
diff --git a/utils/callframes.go b/utils/callframes.go
index 59e6b251a..db8862cc2 100644
--- a/utils/callframes.go
+++ b/utils/callframes.go
@@ -23,6 +23,21 @@ import (
        "strings"
 )
 
+// RecoverToError call the recover to catch the panic and changed it to be an 
error
+func RecoverToError() error {
+       if r := recover(); r != nil {
+               switch e := r.(type) {
+               case error:
+                       return e
+               case string:
+                       return fmt.Errorf("%s", e)
+               default:
+                       return fmt.Errorf("%v", e)
+               }
+       }
+       return nil
+}
+
 // GatherCallFrames FIXME ...
 func GatherCallFrames(delta int) string {
        var name, file string

Reply via email to