Files
BrowserOS/packages/browseros/tools/patch/cmd/diff.go
2026-05-04 18:16:23 -07:00

60 lines
1.6 KiB
Go

package cmd
import (
"fmt"
"strings"
"github.com/browseros-ai/BrowserOS/packages/browseros/tools/patch/internal/engine"
"github.com/browseros-ai/BrowserOS/packages/browseros/tools/patch/internal/ui"
"github.com/spf13/cobra"
)
func init() {
var src string
command := &cobra.Command{
Use: "diff [checkout]",
Annotations: map[string]string{"group": "Core:"},
Short: "Preview patch differences for a checkout",
Example: ` browseros-patch diff ch1
browseros-patch diff --src /path/to/chromium/src`,
Args: cobra.MaximumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
ws, err := resolveWorkspace(cmd, args, src)
if err != nil {
return err
}
info, err := repoInfo()
if err != nil {
return err
}
status, err := engine.InspectWorkspace(cmd.Context(), engine.InspectWorkspaceOptions{
Workspace: ws,
Repo: info,
Progress: commandProgress(cmd),
})
if err != nil {
return err
}
return renderResult(status, func() {
fmt.Println(ui.Title(fmt.Sprintf("%s patch diff", ws.Name)))
printGroup("Needs apply", status.NeedsApply)
printGroup("Needs update", status.NeedsUpdate)
printGroup("Orphaned", status.Orphaned)
})
},
}
command.Flags().StringVar(&src, "src", "", srcFlagUsage)
rootCmd.AddCommand(command)
}
func printGroup(title string, items []string) {
if len(items) == 0 {
fmt.Printf("%s %s\n", ui.Muted(title+":"), ui.Muted("none"))
return
}
fmt.Printf("%s\n", ui.Header(title+":"))
for _, item := range items {
fmt.Printf(" %s\n", strings.TrimSpace(item))
}
}