@@ -6,16 +6,19 @@ import (
66 "fmt"
77 "sort"
88 "strings"
9+ "time"
910
1011 "github.com/cli/cli/internal/ghrepo"
1112)
1213
1314// Repository contains information about a GitHub repo
1415type Repository struct {
15- ID string
16- Name string
17- URL string
18- Owner RepositoryOwner
16+ ID string
17+ Name string
18+ URL string
19+ CloneURL string
20+ CreatedAt time.Time
21+ Owner RepositoryOwner
1922
2023 IsPrivate bool
2124 HasIssuesEnabled bool
@@ -60,7 +63,6 @@ func (r Repository) ViewerCanPush() bool {
6063 }
6164}
6265
63- // GitHubRepo looks up the node ID of a named repository
6466func GitHubRepo (client * Client , repo ghrepo.Interface ) (* Repository , error ) {
6567 query := `
6668 query($owner: String!, $name: String!) {
@@ -79,12 +81,8 @@ func GitHubRepo(client *Client, repo ghrepo.Interface) (*Repository, error) {
7981 }{}
8082 err := client .GraphQL (query , variables , & result )
8183
82- if err != nil || result .Repository .ID == "" {
83- newErr := fmt .Errorf ("failed to determine repository ID for '%s'" , ghrepo .FullName (repo ))
84- if err != nil {
85- newErr = fmt .Errorf ("%s: %w" , newErr , err )
86- }
87- return nil , newErr
84+ if err != nil {
85+ return nil , err
8886 }
8987
9088 return & result .Repository , nil
@@ -98,7 +96,7 @@ type RepoNetworkResult struct {
9896
9997// RepoNetwork inspects the relationship between multiple GitHub repositories
10098func RepoNetwork (client * Client , repos []ghrepo.Interface ) (RepoNetworkResult , error ) {
101- queries := []string {}
99+ queries := make ( []string , 0 , len ( repos ))
102100 for i , repo := range repos {
103101 queries = append (queries , fmt .Sprintf (`
104102 repo_%03d: repository(owner: %q, name: %q) {
@@ -113,8 +111,8 @@ func RepoNetwork(client *Client, repos []ghrepo.Interface) (RepoNetworkResult, e
113111 // Since the query is constructed dynamically, we can't parse a response
114112 // format using a static struct. Instead, hold the raw JSON data until we
115113 // decide how to parse it manually.
116- graphqlResult := map [string ]* json.RawMessage {}
117- result := RepoNetworkResult {}
114+ graphqlResult := make ( map [string ]* json.RawMessage )
115+ var result RepoNetworkResult
118116
119117 err := client .GraphQL (fmt .Sprintf (`
120118 fragment repo on Repository {
@@ -151,7 +149,7 @@ func RepoNetwork(client *Client, repos []ghrepo.Interface) (RepoNetworkResult, e
151149 return result , err
152150 }
153151
154- keys := []string {}
152+ keys := make ( []string , 0 , len ( graphqlResult ))
155153 for key := range graphqlResult {
156154 keys = append (keys , key )
157155 }
@@ -176,8 +174,8 @@ func RepoNetwork(client *Client, repos []ghrepo.Interface) (RepoNetworkResult, e
176174 result .Repositories = append (result .Repositories , nil )
177175 continue
178176 }
179- repo := Repository {}
180- decoder := json .NewDecoder (bytes .NewReader ([] byte ( * jsonMessage ) ))
177+ var repo Repository
178+ decoder := json .NewDecoder (bytes .NewReader (* jsonMessage ))
181179 if err := decoder .Decode (& repo ); err != nil {
182180 return result , err
183181 }
@@ -191,9 +189,11 @@ func RepoNetwork(client *Client, repos []ghrepo.Interface) (RepoNetworkResult, e
191189
192190// repositoryV3 is the repository result from GitHub API v3
193191type repositoryV3 struct {
194- NodeID string
195- Name string
196- Owner struct {
192+ NodeID string
193+ Name string
194+ CreatedAt time.Time `json:"created_at"`
195+ CloneURL string `json:"clone_url"`
196+ Owner struct {
197197 Login string
198198 }
199199}
@@ -209,8 +209,10 @@ func ForkRepo(client *Client, repo ghrepo.Interface) (*Repository, error) {
209209 }
210210
211211 return & Repository {
212- ID : result .NodeID ,
213- Name : result .Name ,
212+ ID : result .NodeID ,
213+ Name : result .Name ,
214+ CloneURL : result .CloneURL ,
215+ CreatedAt : result .CreatedAt ,
214216 Owner : RepositoryOwner {
215217 Login : result .Owner .Login ,
216218 },
0 commit comments