(args []string)
| 393 | } |
| 394 | |
| 395 | func runReviewComments(args []string) error { |
| 396 | fs := flag.NewFlagSet(commandName+" review-comments", flag.ContinueOnError) |
| 397 | fs.SetOutput(os.Stderr) |
| 398 | |
| 399 | hashFlag := fs.String("hash", "", "Hash or unhash URL") |
| 400 | apiOrigin := fs.String("api-origin", defaultReviewOrigin(), "Unhash API origin") |
| 401 | asJSON := fs.Bool("json", false, "Print raw JSON instead of markdown summary") |
| 402 | |
| 403 | if err := fs.Parse(normalizeArgs(args)); err != nil { |
| 404 | if errors.Is(err, flag.ErrHelp) { |
| 405 | return nil |
| 406 | } |
| 407 | return err |
| 408 | } |
| 409 | |
| 410 | selector := strings.TrimSpace(*hashFlag) |
| 411 | if selector == "" { |
| 412 | rest := fs.Args() |
| 413 | if len(rest) > 0 { |
| 414 | selector = strings.TrimSpace(rest[0]) |
| 415 | } |
| 416 | } |
| 417 | if selector == "" { |
| 418 | printUsage() |
| 419 | return errors.New("missing hash or review URL") |
| 420 | } |
| 421 | |
| 422 | hash := normalizeHashSelector(selector) |
| 423 | if hash == "" { |
| 424 | return fmt.Errorf("could not parse hash from %q", selector) |
| 425 | } |
| 426 | |
| 427 | comments, err := fetchReviewComments(*apiOrigin, hash) |
| 428 | if err != nil { |
| 429 | return err |
| 430 | } |
| 431 | |
| 432 | if *asJSON { |
| 433 | out, err := json.MarshalIndent(comments, "", " ") |
| 434 | if err != nil { |
| 435 | return fmt.Errorf("encode feedback json: %w", err) |
| 436 | } |
| 437 | fmt.Printf("%s\n", out) |
| 438 | return nil |
| 439 | } |
| 440 | |
| 441 | fmt.Print(renderFeedbackMarkdown(hash, comments)) |
| 442 | return nil |
| 443 | } |
| 444 | |
| 445 | func defaultReviewOrigin() string { |
| 446 | origin := strings.TrimSpace(os.Getenv("UNHASH_API_ORIGIN")) |
no test coverage detected