main.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "strings"
  7. "github.com/Jguer/yay/v11/pkg/db/ialpm"
  8. "github.com/Jguer/yay/v11/pkg/dep"
  9. "github.com/Jguer/yay/v11/pkg/metadata"
  10. "github.com/Jguer/yay/v11/pkg/settings"
  11. "github.com/Jguer/yay/v11/pkg/settings/parser"
  12. "github.com/Jguer/yay/v11/pkg/text"
  13. "github.com/leonelquinteros/gotext"
  14. "github.com/pkg/errors"
  15. )
  16. func splitDep(dep string) (pkg, mod, ver string) {
  17. split := strings.FieldsFunc(dep, func(c rune) bool {
  18. match := c == '>' || c == '<' || c == '='
  19. if match {
  20. mod += string(c)
  21. }
  22. return match
  23. })
  24. if len(split) == 0 {
  25. return "", "", ""
  26. }
  27. if len(split) == 1 {
  28. return split[0], "", ""
  29. }
  30. return split[0], mod, split[1]
  31. }
  32. func handleCmd() error {
  33. config, err := settings.NewConfig("")
  34. if err != nil {
  35. return err
  36. }
  37. cmdArgs := parser.MakeArguments()
  38. if err := config.ParseCommandLine(cmdArgs); err != nil {
  39. return err
  40. }
  41. pacmanConf, _, err := settings.RetrievePacmanConfig(cmdArgs, config.PacmanConf)
  42. if err != nil {
  43. return err
  44. }
  45. dbExecutor, err := ialpm.NewExecutor(pacmanConf)
  46. if err != nil {
  47. return err
  48. }
  49. aurCache, err := metadata.NewAURCache(filepath.Join(config.BuildDir, "aur.json"))
  50. if err != nil {
  51. return errors.Wrap(err, gotext.Get("failed to retrieve aur Cache"))
  52. }
  53. grapher := dep.NewGrapher(dbExecutor, aurCache, true, settings.NoConfirm, os.Stdout)
  54. return graphPackage(grapher, cmdArgs.Targets)
  55. }
  56. func main() {
  57. if err := handleCmd(); err != nil {
  58. text.Errorln(err)
  59. os.Exit(1)
  60. }
  61. }
  62. func graphPackage(
  63. grapher *dep.Grapher,
  64. targets []string,
  65. ) error {
  66. if len(targets) != 1 {
  67. return errors.New(gotext.Get("only one target is allowed"))
  68. }
  69. graph, err := grapher.GraphFromAURCache([]string{targets[0]})
  70. if err != nil {
  71. return err
  72. }
  73. fmt.Fprintln(os.Stdout, graph.String())
  74. fmt.Fprintln(os.Stdout, graph.TopoSortedLayers())
  75. fmt.Fprintln(os.Stdout, graph.TopoSorted())
  76. return nil
  77. }