feat: v0.3.0c — add labels, milestones, wiki, issue dependencies
New commands: - fgj label list/create/edit/delete - fgj milestone list/view/create/edit/delete - fgj wiki list/view/create/edit/delete Enhanced: - fgj issue edit --add-dependency/--remove-dependency
This commit is contained in:
parent
7ee5a61910
commit
95da06c003
7 changed files with 1206 additions and 3 deletions
37
cmd/issue.go
37
cmd/issue.go
|
|
@ -2,6 +2,7 @@ package cmd
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
|
@ -98,6 +99,8 @@ func init() {
|
|||
issueEditCmd.Flags().StringP("state", "s", "", "New state for the issue (open or closed)")
|
||||
issueEditCmd.Flags().StringSlice("add-label", nil, "Labels to add (can be specified multiple times)")
|
||||
issueEditCmd.Flags().StringSlice("remove-label", nil, "Labels to remove (can be specified multiple times)")
|
||||
issueEditCmd.Flags().Int64Slice("add-dependency", nil, "Issue numbers to add as dependencies (can be specified multiple times)")
|
||||
issueEditCmd.Flags().Int64Slice("remove-dependency", nil, "Issue numbers to remove as dependencies (can be specified multiple times)")
|
||||
}
|
||||
|
||||
func runIssueList(cmd *cobra.Command, args []string) error {
|
||||
|
|
@ -372,6 +375,8 @@ func runIssueEdit(cmd *cobra.Command, args []string) error {
|
|||
stateStr, _ := cmd.Flags().GetString("state")
|
||||
addLabelNames, _ := cmd.Flags().GetStringSlice("add-label")
|
||||
removeLabelNames, _ := cmd.Flags().GetStringSlice("remove-label")
|
||||
addDeps, _ := cmd.Flags().GetInt64Slice("add-dependency")
|
||||
removeDeps, _ := cmd.Flags().GetInt64Slice("remove-dependency")
|
||||
|
||||
issueNumber, err := strconv.ParseInt(args[0], 10, 64)
|
||||
if err != nil {
|
||||
|
|
@ -383,8 +388,8 @@ func runIssueEdit(cmd *cobra.Command, args []string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if title == "" && body == "" && stateStr == "" && len(addLabelNames) == 0 && len(removeLabelNames) == 0 {
|
||||
return fmt.Errorf("at least one of --title, --body, --state, --add-label, or --remove-label must be provided")
|
||||
if title == "" && body == "" && stateStr == "" && len(addLabelNames) == 0 && len(removeLabelNames) == 0 && len(addDeps) == 0 && len(removeDeps) == 0 {
|
||||
return fmt.Errorf("at least one of --title, --body, --state, --add-label, --remove-label, --add-dependency, or --remove-dependency must be provided")
|
||||
}
|
||||
|
||||
cfg, err := config.Load()
|
||||
|
|
@ -453,6 +458,34 @@ func runIssueEdit(cmd *cobra.Command, args []string) error {
|
|||
}
|
||||
}
|
||||
|
||||
for _, depNumber := range addDeps {
|
||||
depIssue, _, err := client.GetIssue(owner, name, depNumber)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get issue #%d: %w", depNumber, err)
|
||||
}
|
||||
depBody := map[string]int64{"id": depIssue.ID}
|
||||
path := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/dependencies", owner, name, issueNumber)
|
||||
_, err = client.DoJSON(http.MethodPost, path, depBody, nil)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to add dependency #%d: %w", depNumber, err)
|
||||
}
|
||||
fmt.Printf("Added dependency: #%d depends on #%d\n", issueNumber, depNumber)
|
||||
}
|
||||
|
||||
for _, depNumber := range removeDeps {
|
||||
depIssue, _, err := client.GetIssue(owner, name, depNumber)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get issue #%d: %w", depNumber, err)
|
||||
}
|
||||
depBody := map[string]int64{"id": depIssue.ID}
|
||||
path := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/dependencies", owner, name, issueNumber)
|
||||
_, err = client.DoJSON(http.MethodDelete, path, depBody, nil)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to remove dependency #%d: %w", depNumber, err)
|
||||
}
|
||||
fmt.Printf("Removed dependency: #%d no longer depends on #%d\n", issueNumber, depNumber)
|
||||
}
|
||||
|
||||
fmt.Printf("Issue #%d updated\n", issueNumber)
|
||||
|
||||
return nil
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue