@@ -12,49 +12,48 @@ import (
1212)
1313
1414func IssueFromArg (apiClient * api.Client , baseRepoFn func () (ghrepo.Interface , error ), arg string ) (* api.Issue , ghrepo.Interface , error ) {
15- issue , baseRepo , err := issueFromURL (apiClient , arg )
16- if err != nil {
17- return nil , nil , err
18- }
19- if issue != nil {
20- return issue , baseRepo , nil
21- }
22-
23- baseRepo , err = baseRepoFn ()
24- if err != nil {
25- return nil , nil , fmt .Errorf ("could not determine base repo: %w" , err )
15+ issueNumber , baseRepo := issueMetadataFromURL (arg )
16+
17+ if issueNumber == 0 {
18+ var err error
19+ issueNumber , err = strconv .Atoi (strings .TrimPrefix (arg , "#" ))
20+ if err != nil {
21+ return nil , nil , fmt .Errorf ("invalid issue format: %q" , arg )
22+ }
2623 }
2724
28- issueNumber , err := strconv .Atoi (strings .TrimPrefix (arg , "#" ))
29- if err != nil {
30- return nil , nil , fmt .Errorf ("invalid issue format: %q" , arg )
25+ if baseRepo == nil {
26+ var err error
27+ baseRepo , err = baseRepoFn ()
28+ if err != nil {
29+ return nil , nil , fmt .Errorf ("could not determine base repo: %w" , err )
30+ }
3131 }
3232
33- issue , err = issueFromNumber (apiClient , baseRepo , issueNumber )
33+ issue , err : = issueFromNumber (apiClient , baseRepo , issueNumber )
3434 return issue , baseRepo , err
3535}
3636
3737var issueURLRE = regexp .MustCompile (`^/([^/]+)/([^/]+)/issues/(\d+)` )
3838
39- func issueFromURL ( apiClient * api. Client , s string ) (* api. Issue , ghrepo.Interface , error ) {
39+ func issueMetadataFromURL ( s string ) (int , ghrepo.Interface ) {
4040 u , err := url .Parse (s )
4141 if err != nil {
42- return nil , nil , nil
42+ return 0 , nil
4343 }
4444
4545 if u .Scheme != "https" && u .Scheme != "http" {
46- return nil , nil , nil
46+ return 0 , nil
4747 }
4848
4949 m := issueURLRE .FindStringSubmatch (u .Path )
5050 if m == nil {
51- return nil , nil , nil
51+ return 0 , nil
5252 }
5353
5454 repo := ghrepo .NewWithHost (m [1 ], m [2 ], u .Hostname ())
5555 issueNumber , _ := strconv .Atoi (m [3 ])
56- issue , err := issueFromNumber (apiClient , repo , issueNumber )
57- return issue , repo , err
56+ return issueNumber , repo
5857}
5958
6059func issueFromNumber (apiClient * api.Client , repo ghrepo.Interface , issueNumber int ) (* api.Issue , error ) {
0 commit comments