feat: Add label display to bd show and bd list
- Populate labels in bd list human-readable output (direct mode) - Populate labels in bd list JSON output (direct and daemon modes) - Populate labels in daemon RPC handlers (handleList, handleShow) - handleShow now returns full IssueDetails with labels/deps/dependents - Labels displayed with 'Labels: [label1, label2]' format Closes bd-164 Amp-Thread-ID: https://ampcode.com/threads/T-30cd607d-c509-4a8c-9cac-c2aea2ad75c6 Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
@@ -90,6 +90,9 @@ var listCmd = &cobra.Command{
|
|||||||
if issue.Assignee != "" {
|
if issue.Assignee != "" {
|
||||||
fmt.Printf(" Assignee: %s\n", issue.Assignee)
|
fmt.Printf(" Assignee: %s\n", issue.Assignee)
|
||||||
}
|
}
|
||||||
|
if len(issue.Labels) > 0 {
|
||||||
|
fmt.Printf(" Labels: %v\n", issue.Labels)
|
||||||
|
}
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -114,17 +117,27 @@ var listCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if jsonOutput {
|
if jsonOutput {
|
||||||
|
// Populate labels for JSON output
|
||||||
|
for _, issue := range issues {
|
||||||
|
issue.Labels, _ = store.GetLabels(ctx, issue.ID)
|
||||||
|
}
|
||||||
outputJSON(issues)
|
outputJSON(issues)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("\nFound %d issues:\n\n", len(issues))
|
fmt.Printf("\nFound %d issues:\n\n", len(issues))
|
||||||
for _, issue := range issues {
|
for _, issue := range issues {
|
||||||
|
// Load labels for display
|
||||||
|
labels, _ := store.GetLabels(ctx, issue.ID)
|
||||||
|
|
||||||
fmt.Printf("%s [P%d] [%s] %s\n", issue.ID, issue.Priority, issue.IssueType, issue.Status)
|
fmt.Printf("%s [P%d] [%s] %s\n", issue.ID, issue.Priority, issue.IssueType, issue.Status)
|
||||||
fmt.Printf(" %s\n", issue.Title)
|
fmt.Printf(" %s\n", issue.Title)
|
||||||
if issue.Assignee != "" {
|
if issue.Assignee != "" {
|
||||||
fmt.Printf(" Assignee: %s\n", issue.Assignee)
|
fmt.Printf(" Assignee: %s\n", issue.Assignee)
|
||||||
}
|
}
|
||||||
|
if len(labels) > 0 {
|
||||||
|
fmt.Printf(" Labels: %v\n", labels)
|
||||||
|
}
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -909,6 +909,12 @@ func (s *Server) handleList(req *Request) Response {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Populate labels for each issue
|
||||||
|
for _, issue := range issues {
|
||||||
|
labels, _ := store.GetLabels(ctx, issue.ID)
|
||||||
|
issue.Labels = labels
|
||||||
|
}
|
||||||
|
|
||||||
data, _ := json.Marshal(issues)
|
data, _ := json.Marshal(issues)
|
||||||
return Response{
|
return Response{
|
||||||
Success: true,
|
Success: true,
|
||||||
@@ -942,7 +948,27 @@ func (s *Server) handleShow(req *Request) Response {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data, _ := json.Marshal(issue)
|
// Populate labels, dependencies, and dependents
|
||||||
|
labels, _ := store.GetLabels(ctx, issue.ID)
|
||||||
|
deps, _ := store.GetDependencies(ctx, issue.ID)
|
||||||
|
dependents, _ := store.GetDependents(ctx, issue.ID)
|
||||||
|
|
||||||
|
// Create detailed response with related data
|
||||||
|
type IssueDetails struct {
|
||||||
|
*types.Issue
|
||||||
|
Labels []string `json:"labels,omitempty"`
|
||||||
|
Dependencies []*types.Issue `json:"dependencies,omitempty"`
|
||||||
|
Dependents []*types.Issue `json:"dependents,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
details := &IssueDetails{
|
||||||
|
Issue: issue,
|
||||||
|
Labels: labels,
|
||||||
|
Dependencies: deps,
|
||||||
|
Dependents: dependents,
|
||||||
|
}
|
||||||
|
|
||||||
|
data, _ := json.Marshal(details)
|
||||||
return Response{
|
return Response{
|
||||||
Success: true,
|
Success: true,
|
||||||
Data: data,
|
Data: data,
|
||||||
|
|||||||
Reference in New Issue
Block a user