diff --git a/api/queries_repo.go b/api/queries_repo.go index b1e41370d..c9d8b46f9 100644 --- a/api/queries_repo.go +++ b/api/queries_repo.go @@ -230,6 +230,25 @@ func (r Repository) ViewerCanTriage() bool { } } +func FetchRepository(client *Client, repo ghrepo.Interface, fields []string) (*Repository, error) { + query := fmt.Sprintf(`query RepositoryInfo($owner: String!, $name: String!) { + repository(owner: $owner, name: $name) {%s} + }`, RepositoryGraphQL(fields)) + + variables := map[string]interface{}{ + "owner": repo.RepoOwner(), + "name": repo.RepoName(), + } + + var result struct { + Repository Repository + } + if err := client.GraphQL(repo.RepoHost(), query, variables, &result); err != nil { + return nil, err + } + return InitRepoHostname(&result.Repository, repo.RepoHost()), nil +} + func GitHubRepo(client *Client, repo ghrepo.Interface) (*Repository, error) { query := ` fragment repo on Repository { diff --git a/go.mod b/go.mod index 89885a50a..e04f06576 100644 --- a/go.mod +++ b/go.mod @@ -47,3 +47,5 @@ require ( replace github.com/shurcooL/graphql => github.com/cli/shurcooL-graphql v0.0.0-20200707151639-0f7232a2bf7e replace golang.org/x/crypto => github.com/cli/crypto v0.0.0-20210929142629-6be313f59b03 + +replace github.com/cli/cli/v2/pkg/cmd/repo/rename => /cli/cli/v2/pkg/cmd/repo/rename \ No newline at end of file diff --git a/pkg/cmd/repo/rename/http.go b/pkg/cmd/repo/rename/http.go new file mode 100644 index 000000000..f20f487c8 --- /dev/null +++ b/pkg/cmd/repo/rename/http.go @@ -0,0 +1,2 @@ +package rename + diff --git a/pkg/cmd/repo/rename/rename.go b/pkg/cmd/repo/rename/rename.go index 11597b618..b02c5d332 100644 --- a/pkg/cmd/repo/rename/rename.go +++ b/pkg/cmd/repo/rename/rename.go @@ -3,10 +3,15 @@ package rename import ( "fmt" "net/http" - "strings" + + // "strings" "github.com/cli/cli/v2/api" + "github.com/cli/cli/v2/internal/config" "github.com/cli/cli/v2/internal/ghinstance" + + // "github.com/cli/cli/v2/internal/ghinstance" + "github.com/cli/cli/v2/internal/ghrepo" "github.com/cli/cli/v2/pkg/cmdutil" "github.com/cli/cli/v2/pkg/iostreams" @@ -16,20 +21,23 @@ import ( type RenameOptions struct{ HttpClient func() (*http.Client, error) IO *iostreams.IOStreams + Config func() (config.Config, error) RepoName string } -func MewCmcRename(f *cmdutil.Factory, runf func(*RenameOptions) error) *cobra.Command { +func NewCmdRename(f *cmdutil.Factory, runf func(*RenameOptions) error) *cobra.Command { opts:= &RenameOptions { IO: f.IOStreams, HttpClient: f.HttpClient, } cmd := &cobra.Command{ - Use: "rename ", Short: "Rename a repository", Long: "Rename a GitHub repository", - Args: cmdutil.ExactArgs(2, "cannot rename: repository argument required"), + Args: cmdutil.ExactArgs(1, "cannot rename: repository argument required"), RunE: func (cmd *cobra.Command, args []string) error { opts.RepoName = args[0] if runf != nil { @@ -43,31 +51,32 @@ func MewCmcRename(f *cmdutil.Factory, runf func(*RenameOptions) error) *cobra.Co func renameRun(opts *RenameOptions) error { - cs := opts.IO.ColorScheme() + // cs := opts.IO.ColorScheme() httpClient, err := opts.HttpClient() if err != nil { return err } apiClient := api.NewClientFromHTTP(httpClient); - var toRename ghrepo.Interface - - repoURL := opts.RepoName - - if !strings.Contains(repoURL, "/") { - currentUser, err := api.CurrentLoginName(apiClient, ghinstance.Default()) - if err != nil { - return err - } - repoURL = currentUser + "/" + repoURL + username, err := api.CurrentLoginName(apiClient, ghinstance.Default()) + if err != nil { + return err } - toRename, err = ghrepo.FromFullName(repoURL) + toRename, err := ghrepo.FromFullName(opts.RepoName) if err != nil { return fmt.Errorf("argument error: %w", err) } fields := []string{"name", "owner", "id"} + repo, err := api.FetchRepository(apiClient, toRename, fields) + if err != nil { + return err + } - repo, err := + if username != repo.Owner.Login { + return fmt.Errorf("you do not own this repository"); + } + + return nil } \ No newline at end of file diff --git a/pkg/cmd/repo/repo.go b/pkg/cmd/repo/repo.go index 252c322e9..608d0a2ff 100644 --- a/pkg/cmd/repo/repo.go +++ b/pkg/cmd/repo/repo.go @@ -10,6 +10,7 @@ import ( repoListCmd "github.com/cli/cli/v2/pkg/cmd/repo/list" repoSyncCmd "github.com/cli/cli/v2/pkg/cmd/repo/sync" repoViewCmd "github.com/cli/cli/v2/pkg/cmd/repo/view" + repoRenameCmd "github.com/cli/cli/v2/pkg/cmd/repo/rename" "github.com/cli/cli/v2/pkg/cmdutil" "github.com/spf13/cobra" ) @@ -42,6 +43,7 @@ func NewCmdRepo(f *cmdutil.Factory) *cobra.Command { cmd.AddCommand(repoSyncCmd.NewCmdSync(f, nil)) cmd.AddCommand(creditsCmd.NewCmdRepoCredits(f, nil)) cmd.AddCommand(gardenCmd.NewCmdGarden(f, nil)) + cmd.AddCommand(repoRenameCmd.NewCmdRename(f, nil)) return cmd }