main.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package main
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "os"
  7. "path/filepath"
  8. "github.com/Jguer/yay/v12/pkg/db/ialpm"
  9. "github.com/Jguer/yay/v12/pkg/dep"
  10. "github.com/Jguer/yay/v12/pkg/runtime"
  11. "github.com/Jguer/yay/v12/pkg/settings"
  12. "github.com/Jguer/yay/v12/pkg/settings/parser"
  13. "github.com/Jguer/yay/v12/pkg/text"
  14. "github.com/Jguer/aur/metadata"
  15. "github.com/leonelquinteros/gotext"
  16. )
  17. func handleCmd(logger *text.Logger) error {
  18. cfg, err := settings.NewConfig(logger, settings.GetConfigPath(), "")
  19. if err != nil {
  20. return err
  21. }
  22. cmdArgs := parser.MakeArguments()
  23. if errP := cfg.ParseCommandLine(cmdArgs); errP != nil {
  24. return errP
  25. }
  26. run, err := runtime.NewRuntime(cfg, cmdArgs, "1.0.0")
  27. if err != nil {
  28. return err
  29. }
  30. dbExecutor, err := ialpm.NewExecutor(run.PacmanConf, logger)
  31. if err != nil {
  32. return err
  33. }
  34. aurCache, err := metadata.New(
  35. metadata.WithCacheFilePath(
  36. filepath.Join(cfg.BuildDir, "aur.json")))
  37. if err != nil {
  38. return fmt.Errorf("%s: %w", gotext.Get("failed to retrieve aur Cache"), err)
  39. }
  40. grapher := dep.NewGrapher(dbExecutor, aurCache, true, settings.NoConfirm,
  41. cmdArgs.ExistsDouble("d", "nodeps"), false, false,
  42. run.Logger.Child("grapher"))
  43. return graphPackage(context.Background(), grapher, cmdArgs.Targets)
  44. }
  45. func main() {
  46. fallbackLog := text.NewLogger(os.Stdout, os.Stderr, os.Stdin, false, "fallback")
  47. if err := handleCmd(fallbackLog); err != nil {
  48. fallbackLog.Errorln(err)
  49. os.Exit(1)
  50. }
  51. }
  52. func graphPackage(
  53. ctx context.Context,
  54. grapher *dep.Grapher,
  55. targets []string,
  56. ) error {
  57. if len(targets) != 1 {
  58. return errors.New(gotext.Get("only one target is allowed"))
  59. }
  60. graph, err := grapher.GraphFromAUR(ctx, nil, []string{targets[0]})
  61. if err != nil {
  62. return err
  63. }
  64. fmt.Fprintln(os.Stdout, graph.String())
  65. fmt.Fprintln(os.Stdout, "\nlayers map\n", graph.TopoSortedLayerMap(nil))
  66. return nil
  67. }