From 33c055242a1f3149aa0f001f8d47f9bd2143214e Mon Sep 17 00:00:00 2001 From: Erzhan Torokulov Date: Wed, 26 Apr 2023 23:56:09 +0600 Subject: [PATCH 1/4] feat: add "src repos {add|update|delete}-metadata -repo-name` flag support --- cmd/src/repos.go | 12 ++++++++++++ cmd/src/repos_add_metadata.go | 22 +++++++++++++--------- cmd/src/repos_delete_metadata.go | 19 +++++++++++-------- cmd/src/repos_update_metadata.go | 22 +++++++++++++--------- 4 files changed, 49 insertions(+), 26 deletions(-) diff --git a/cmd/src/repos.go b/cmd/src/repos.go index 5e935b8f4b..920327ebe0 100644 --- a/cmd/src/repos.go +++ b/cmd/src/repos.go @@ -6,6 +6,8 @@ import ( "fmt" "time" + "github.com/sourcegraph/sourcegraph/lib/errors" + "github.com/sourcegraph/src-cli/internal/api" ) @@ -125,3 +127,13 @@ func fetchRepositoryID(ctx context.Context, client api.Client, repoName string) } return result.Repository.ID, nil } + +func getRepoIdOrError(ctx context.Context, client api.Client, id *string, repoName *string) (*string, error) { + if *id != "" { + return id, nil + } else if *repoName != "" { + repoID, err := fetchRepositoryID(ctx, client, *repoName) + return &repoID, err + } + return nil, errors.New("error: repo or repoName is required") +} diff --git a/cmd/src/repos_add_metadata.go b/cmd/src/repos_add_metadata.go index da01650a73..b903918d8a 100644 --- a/cmd/src/repos_add_metadata.go +++ b/cmd/src/repos_add_metadata.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/sourcegraph/sourcegraph/lib/errors" + "github.com/sourcegraph/src-cli/internal/api" ) @@ -29,19 +30,17 @@ Examples: fmt.Println(usage) } var ( - repoFlag = flagSet.String("repo", "", `The ID of the repo to add the key-value pair metadata to (required)`) - keyFlag = flagSet.String("key", "", `The name of the metadata key to add (required)`) - valueFlag = flagSet.String("value", "", `The metadata value associated with the metadata key. Defaults to null.`) - apiFlags = api.NewFlags(flagSet) + repoFlag = flagSet.String("repo", "", `The ID of the repo to add the key-value pair metadata to (required)`) + repoNameFlag = flagSet.String("repo-name", "", `The ID of the repo to add the key-value pair metadata to (required)`) + keyFlag = flagSet.String("key", "", `The name of the metadata key to add (required)`) + valueFlag = flagSet.String("value", "", `The metadata value associated with the metadata key. Defaults to null.`) + apiFlags = api.NewFlags(flagSet) ) handler := func(args []string) error { if err := flagSet.Parse(args); err != nil { return err } - if *repoFlag == "" { - return errors.New("error: repo is required") - } keyFlag = nil valueFlag = nil @@ -61,6 +60,11 @@ Examples: } client := cfg.apiClient(apiFlags, flagSet.Output()) + ctx := context.Background() + repoID, err := getRepoIdOrError(ctx, client, repoFlag, repoNameFlag) + if err != nil { + return err + } query := `mutation addRepoMetadata( $repo: ID!, @@ -77,10 +81,10 @@ Examples: }` if ok, err := client.NewRequest(query, map[string]interface{}{ - "repo": *repoFlag, + "repo": *repoID, "key": *keyFlag, "value": valueFlag, - }).Do(context.Background(), nil); err != nil || !ok { + }).Do(ctx, nil); err != nil || !ok { return err } diff --git a/cmd/src/repos_delete_metadata.go b/cmd/src/repos_delete_metadata.go index 178b7ac0c8..f085aba302 100644 --- a/cmd/src/repos_delete_metadata.go +++ b/cmd/src/repos_delete_metadata.go @@ -28,18 +28,16 @@ Examples: fmt.Println(usage) } var ( - repoFlag = flagSet.String("repo", "", `The ID of the repo with the key-value pair metadata to be deleted (required)`) - keyFlag = flagSet.String("key", "", `The name of the metadata key to be deleted (required)`) - apiFlags = api.NewFlags(flagSet) + repoFlag = flagSet.String("repo", "", `The ID of the repo with the key-value pair metadata to be deleted (required)`) + repoNameFlag = flagSet.String("repo-name", "", `The ID of the repo to add the key-value pair metadata to (required)`) + keyFlag = flagSet.String("key", "", `The name of the metadata key to be deleted (required)`) + apiFlags = api.NewFlags(flagSet) ) handler := func(args []string) error { if err := flagSet.Parse(args); err != nil { return err } - if *repoFlag == "" { - return errors.New("error: repo is required") - } keyFlag = nil flagSet.Visit(func(f *flag.Flag) { @@ -53,6 +51,11 @@ Examples: } client := cfg.apiClient(apiFlags, flagSet.Output()) + ctx := context.Background() + repoID, err := getRepoIdOrError(ctx, client, repoFlag, repoNameFlag) + if err != nil { + return err + } query := `mutation deleteRepoMetadata( $repo: ID!, @@ -67,9 +70,9 @@ Examples: }` if ok, err := client.NewRequest(query, map[string]interface{}{ - "repo": *repoFlag, + "repo": *repoID, "key": *keyFlag, - }).Do(context.Background(), nil); err != nil || !ok { + }).Do(ctx, nil); err != nil || !ok { return err } diff --git a/cmd/src/repos_update_metadata.go b/cmd/src/repos_update_metadata.go index f79922dc70..f83192bff5 100644 --- a/cmd/src/repos_update_metadata.go +++ b/cmd/src/repos_update_metadata.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/sourcegraph/sourcegraph/lib/errors" + "github.com/sourcegraph/src-cli/internal/api" ) @@ -29,19 +30,17 @@ Examples: fmt.Println(usage) } var ( - repoFlag = flagSet.String("repo", "", `The ID of the repo with the metadata key to be updated (required)`) - keyFlag = flagSet.String("key", "", `The name of the metadata key to be updated (required)`) - valueFlag = flagSet.String("value", "", `The new metadata value of the metadata key to be set. Defaults to null.`) - apiFlags = api.NewFlags(flagSet) + repoFlag = flagSet.String("repo", "", `The ID of the repo with the metadata key to be updated (required)`) + repoNameFlag = flagSet.String("repo-name", "", `The ID of the repo to add the key-value pair metadata to (required)`) + keyFlag = flagSet.String("key", "", `The name of the metadata key to be updated (required)`) + valueFlag = flagSet.String("value", "", `The new metadata value of the metadata key to be set. Defaults to null.`) + apiFlags = api.NewFlags(flagSet) ) handler := func(args []string) error { if err := flagSet.Parse(args); err != nil { return err } - if *repoFlag == "" { - return errors.New("error: repo is required") - } keyFlag = nil valueFlag = nil @@ -61,6 +60,11 @@ Examples: } client := cfg.apiClient(apiFlags, flagSet.Output()) + ctx := context.Background() + repoID, err := getRepoIdOrError(ctx, client, repoFlag, repoNameFlag) + if err != nil { + return err + } query := `mutation updateMetadata( $repo: ID!, @@ -77,10 +81,10 @@ Examples: }` if ok, err := client.NewRequest(query, map[string]interface{}{ - "repo": *repoFlag, + "repo": *repoID, "key": *keyFlag, "value": valueFlag, - }).Do(context.Background(), nil); err != nil || !ok { + }).Do(ctx, nil); err != nil || !ok { return err } From 29bbee37a40cf1229ba459de6defbbb02a87b1e6 Mon Sep 17 00:00:00 2001 From: Erzhan Torokulov Date: Wed, 26 Apr 2023 23:57:49 +0600 Subject: [PATCH 2/4] chore(vscode): add cody.codebase setting to use with Cody extension --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8b2f950a82..5cb6acc364 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,5 +8,6 @@ "go.useLanguageServer": true, "gopls": { "local": "github.com/sourcegraph/src-cli" - } + }, + "cody.codebase": "github.com/sourcegraph/src-cli", } From 8987f0db5dc2f5048f7aaf03e4ca2b797f5aeaeb Mon Sep 17 00:00:00 2001 From: Erzhan Torokulov Date: Thu, 27 Apr 2023 11:57:45 +0600 Subject: [PATCH 3/4] fixup! chore(vscode): add cody.codebase setting to use with Cody extension --- cmd/src/repos_add_metadata.go | 4 ++-- cmd/src/repos_delete_metadata.go | 4 ++-- cmd/src/repos_update_metadata.go | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/src/repos_add_metadata.go b/cmd/src/repos_add_metadata.go index b903918d8a..66356880cf 100644 --- a/cmd/src/repos_add_metadata.go +++ b/cmd/src/repos_add_metadata.go @@ -30,8 +30,8 @@ Examples: fmt.Println(usage) } var ( - repoFlag = flagSet.String("repo", "", `The ID of the repo to add the key-value pair metadata to (required)`) - repoNameFlag = flagSet.String("repo-name", "", `The ID of the repo to add the key-value pair metadata to (required)`) + repoFlag = flagSet.String("repo", "", `The ID of the repo to add the key-value pair metadata to (required if -repo-name is not specified)`) + repoNameFlag = flagSet.String("repo-name", "", `The name of the repo to add the key-value pair metadata to (required if -repo is not specified)`) keyFlag = flagSet.String("key", "", `The name of the metadata key to add (required)`) valueFlag = flagSet.String("value", "", `The metadata value associated with the metadata key. Defaults to null.`) apiFlags = api.NewFlags(flagSet) diff --git a/cmd/src/repos_delete_metadata.go b/cmd/src/repos_delete_metadata.go index f085aba302..612120cff4 100644 --- a/cmd/src/repos_delete_metadata.go +++ b/cmd/src/repos_delete_metadata.go @@ -28,8 +28,8 @@ Examples: fmt.Println(usage) } var ( - repoFlag = flagSet.String("repo", "", `The ID of the repo with the key-value pair metadata to be deleted (required)`) - repoNameFlag = flagSet.String("repo-name", "", `The ID of the repo to add the key-value pair metadata to (required)`) + repoFlag = flagSet.String("repo", "", `The ID of the repo with the key-value pair metadata to be deleted (required if -repo-name is not specified)`) + repoNameFlag = flagSet.String("repo-name", "", `The name of the repo to add the key-value pair metadata to (required if -repo is not specified)`) keyFlag = flagSet.String("key", "", `The name of the metadata key to be deleted (required)`) apiFlags = api.NewFlags(flagSet) ) diff --git a/cmd/src/repos_update_metadata.go b/cmd/src/repos_update_metadata.go index f83192bff5..75889f9590 100644 --- a/cmd/src/repos_update_metadata.go +++ b/cmd/src/repos_update_metadata.go @@ -30,8 +30,8 @@ Examples: fmt.Println(usage) } var ( - repoFlag = flagSet.String("repo", "", `The ID of the repo with the metadata key to be updated (required)`) - repoNameFlag = flagSet.String("repo-name", "", `The ID of the repo to add the key-value pair metadata to (required)`) + repoFlag = flagSet.String("repo", "", `The ID of the repo with the metadata key to be updated (required if -repo-name is not specified)`) + repoNameFlag = flagSet.String("repo-name", "", `The name of the repo to add the key-value pair metadata to (required if -repo is not specified)`) keyFlag = flagSet.String("key", "", `The name of the metadata key to be updated (required)`) valueFlag = flagSet.String("value", "", `The new metadata value of the metadata key to be set. Defaults to null.`) apiFlags = api.NewFlags(flagSet) From b8f67b96b862a78f7f02f3c0a89e99025c6d3b25 Mon Sep 17 00:00:00 2001 From: Erzhan Torokulov Date: Thu, 27 Apr 2023 11:58:05 +0600 Subject: [PATCH 4/4] update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b062bdb1fe..ab09244f7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to `src-cli` are documented in this file. ### Added - `src validate install` can check executor connections [#974](https://github.com/sourcegraph/src-cli/pull/974) - `src validate install` can send test SMTP message [#973](https://github.com/sourcegraph/src-cli/pull/973) +- `src repos {add|update|delete}-metadata -repo-name` flag support [#977](https://github.com/sourcegraph/src-cli/pull/977) ### Changed - Renamed `src repo {add|update|delete}-kvp` to `repo {add|update|delete}-metadata` [#972](https://github.com/sourcegraph/src-cli/pull/972)