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", } 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) 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..66356880cf 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 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) ) 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..612120cff4 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 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) ) 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..75889f9590 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 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) ) 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 }