8000 feat(api): cdsctl project repository-manager -h · ovh/cds@f44b650 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit f44b650

Browse files
authored
feat(api): cdsctl project repository-manager -h
need force to re-enable it, next pr Signed-off-by: Yvonnick Esnault <yvonnick.esnault@corp.ovh.com>
1 parent 10a909e commit f44b650

File tree

9 files changed

+102
-19
lines changed

9 files changed

+102
-19
lines changed

cli/cdsctl/admin_errors.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import (
99
)
1010

1111
var adminErrorsCmd = cli.Command{
12-
Name: "errors",
13-
Short: "Manage CDS errors",
12+
Name: "errors",
13+
Aliases: []string{"error"},
14+
Short: "Manage CDS errors",
1415
}
1516

1617
func adminErrors() *cobra.Command {

cli/cdsctl/admin_hooks.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ import (
1313
)
1414

1515
var adminHooksCmd = cli.Command{
16-
Name: "hooks",
17-
Short: "Manage CDS Hooks tasks",
16+
Name: "hooks",
17+
Aliases: []string{"hook"},
18+
Short: "Manage CDS Hooks tasks",
1819
}
1920

2021
func adminHooks() *cobra.Command {

cli/cdsctl/project.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func projectCommands() []*cobra.Command {
2929
projectGroup(),
3030
projectVariable(),
3131
projectIntegration(),
32+
projectRepositoryManager(),
3233
}
3334
}
3435

cli/cdsctl/project_integration.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ import (
55
"os"
66
"path/filepath"
77

8+
"github.com/spf13/cobra"
9+
810
"github.com/ovh/cds/cli"
911
"github.com/ovh/cds/sdk/exportentities"
10-
"github.com/spf13/cobra"
1112
)
1213

1314
var projectIntegrationCmd = cli.Command{
1415
Name: "integration",
15-
Short: "Manage CDS integration integrations",
16+
Short: "Manage CDS integrations",
1617
}
1718

1819
func projectIntegration() *cobra.Command {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package main
2+
3+
import (
4+
"github.com/spf13/cobra"
5+
6+
"github.com/ovh/cds/cli"
7+
)
8+
9+
var projectRepositoryManagerCmd = cli.Command{
10+
Name: "repository-manager",
11+
Short: "Manage CDS repository managers",
12+
}
13+
14+
func projectRepositoryManager() *cobra.Command {
15+
return cli.NewCommand(projectRepositoryManagerCmd, nil, []*cobra.Command{
16+
cli.NewListCommand(projectRepositoryManagerListCmd, projectRepositoryManagerListFunc, nil, withAllCommandModifiers()...),
17+
cli.NewDeleteCommand(projectRepositoryManagerDeleteCmd, projectRepositoryManagerDeleteFunc, nil, withAllCommandModifiers()...),
18+
})
19+
}
20+
21+
var projectRepositoryManagerListCmd = cli.Command{
22+
Name: "list",
23+
Short: "List repository managers available on a project",
24+
Ctx: []cli.Arg{
25+
{Name: _ProjectKey},
26+
},
27+
}
28+
29+
func projectRepositoryManagerListFunc(v cli.Values) (cli.ListResult, error) {
30+
pfs, err := client.ProjectRepositoryManagerList(v.GetString(_ProjectKey))
31+
return cli.AsListResult(pfs), err
32+
}
33+
34+
var projectRepositoryManagerDeleteCmd = cli.Command{
35+
Name: "delete",
36+
Short: "Delete a repository manager from a project",
37+
Ctx: []cli.Arg{
38+
{Name: _ProjectKey},
39+
},
40+
Args: []cli.Arg{
41+
{Name: "name"},
42+
},
43+
}
44+
45+
func projectRepositoryManagerDeleteFunc(v cli.Values) error {
46+
return client.ProjectRepositoryManagerDelete(v.GetString(_ProjectKey), v.GetString("name"), v.GetBool("force"))
47+
}

engine/api/repositories_manager.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ func (api *API) repositoriesManagerAuthorizeHandler() service.Handler {
7979
"project_key": proj.Key,
8080
"last_modified": strconv.FormatInt(time.Now().Unix(), 10),
8181
"repositories_manager": rmName,
82-
"url": url,
83-
"request_token": token,
84-
"username": deprecatedGetUser(ctx).Username,
82+
"url": url,
83+
"request_token": token,
84+
"username": deprecatedGetUser(ctx).Username,
8585
}
8686

8787
if token != "" {
@@ -320,6 +320,8 @@ func (api *API) deleteRepositoriesManagerHandler() service.Handler {
320320
projectKey := vars[permProjectKey]
321321
rmName := vars["name"]
322322

323+
force := FormBool(r, "force")
324+
323325
p, errl := project.Load(api.mustDB(), api.Cache, projectKey, deprecatedGetUser(ctx))
324326
if errl != nil {
325327
return sdk.WrapError(errl, "deleteRepositoriesManagerHandler> Cannot load project %s", projectKey)
@@ -337,14 +339,16 @@ func (api *API) deleteRepositoriesManagerHandler() service.Handler {
337339
}
338340
defer tx.Rollback()
339341

340-
// Check that the VCS is not used by an application before removing it
341-
apps, err := application.LoadAll(tx, api.Cache, projectKey)
342-
if err != nil {
343-
return err
344-
}
345-
for _, app := range apps {
346-
if app.VCSServer == rmName {
347-
return sdk.WithStack(sdk.ErrVCSUsedByApplication)
342+
if !force {
343+
// Check that the VCS is not used by an application before removing it
344+
apps, err := application.LoadAll(tx, api.Cache, projectKey)
345+
if err != nil {
346+
return err
347+
}
348+
for _, app := range apps {
349+
if app.VCSServer == rmName {
350+
return sdk.WithStack(sdk.ErrVCSUsedByApplication)
351+
}
348352
}
349353
}
350354

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package cdsclient
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/ovh/cds/sdk"
8+
)
9+
10+
func (c *client) ProjectRepositoryManagerList(projectKey string) ([]sdk.ProjectVCSServer, error) {
11+
path := fmt.Sprintf("/project/%s/repositories_manager", projectKey)
12+
var s []sdk.ProjectVCSServer
13+
if _, err := c.GetJSON(context.Background(), path, &s); err != nil {
14+
return s, err
15+
}
16+
return s, nil
17+
}
18+
19+
func (c *client) ProjectRepositoryManagerDelete(projectKey string, repomanagerName string, force bool) error {
20+
path := fmt.Sprintf("/project/%s/repositories_manager/%s", projectKey, repomanagerName)
21+
var s sdk.ProjectVCSServer
22+
if _, err := c.DeleteJSON(context.Background(), path, &s); err != nil {
23+
return err
24+
}
25+
return nil
26+
}

sdk/cdsclient/interface.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ type ProjectClient interface {
206206
ProjectIntegrationGet(projectKey string, integrationName string, clearPassword bool) (sdk.ProjectIntegration, error)
207207
ProjectIntegrationList(projectKey string) ([]sdk.ProjectIntegration, error)
208208
ProjectIntegrationDelete(projectKey string, integrationName string) error
209+
ProjectRepositoryManagerList(projectKey string) ([]sdk.ProjectVCSServer, error)
210+
ProjectRepositoryManagerDelete(projectKey string, repoManagerName string, force bool) error
209211
}
210212

211213
// ProjectKeysClient exposes project keys related functions

sdk/project.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ func (proj Project) GetIntegrationByID(id int64) *ProjectIntegration {
160160

161161
// ProjectVCSServer represents associations between a project and a vcs server
162162
type ProjectVCSServer struct {
163-
Name string `json:"name" yaml:"name" db:"-" cli:"-"`
164-
Username string `json:"username" yaml:"username" db:"-" cli:"-"`
163+
Name string `json:"name" yaml:"name" db:"-" cli:"name"`
164+
Username string `json:"username" yaml:"username" db:"-" cli:"username"`
165165
Data map[string]string `json:"-" yaml:"data" db:"-" cli:"-"`
166166
}
167167

0 commit comments

Comments
 (0)
0