Address code review findings: - Extract resolveIssueRef into shared.ResolveIssueRef (was duplicated between create.go and edit.go) - Extract issue type nameāID resolution into shared.ResolveIssueTypeName (was duplicated between create applyIssueTypes and edit applyEditIssueType) - Fix double import of issue/shared in view.go Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package shared
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/cli/cli/v2/api"
|
|
"github.com/cli/cli/v2/internal/ghrepo"
|
|
)
|
|
|
|
// ResolveIssueRef parses an issue reference (number or URL) and returns its node ID.
|
|
func ResolveIssueRef(client *api.Client, baseRepo ghrepo.Interface, ref string) (string, error) {
|
|
number, repo, err := ParseIssueFromArg(ref)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
targetRepo := baseRepo
|
|
if r, ok := repo.Value(); ok {
|
|
targetRepo = r
|
|
}
|
|
|
|
return api.IssueNodeID(client, targetRepo, number)
|
|
}
|
|
|
|
// ResolveIssueTypeName resolves an issue type name to its ID by fetching
|
|
// available types from the repository. Returns an error listing available
|
|
// types if the name is not found.
|
|
func ResolveIssueTypeName(client *api.Client, repo ghrepo.Interface, typeName string) (string, error) {
|
|
issueTypes, err := api.RepoIssueTypes(client, repo)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
typeNames := make([]string, len(issueTypes))
|
|
for i, t := range issueTypes {
|
|
typeNames[i] = t.Name
|
|
if strings.EqualFold(t.Name, typeName) {
|
|
return t.ID, nil
|
|
}
|
|
}
|
|
|
|
return "", fmt.Errorf("type %q not found; available types: %s", typeName, strings.Join(typeNames, ", "))
|
|
}
|