depencies.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package main
  2. import "strings"
  3. // BuildDependencies finds packages, on the second run
  4. // compares with a baselist and avoids searching those
  5. func buildDependencies(baselist []string) func(toCheck []string, isBaseList bool, last bool) (repo []string, notFound []string) {
  6. localDb, err := AlpmHandle.LocalDb()
  7. if err != nil {
  8. panic(err)
  9. }
  10. dbList, err := AlpmHandle.SyncDbs()
  11. if err != nil {
  12. panic(err)
  13. }
  14. f := func(c rune) bool {
  15. return c == '>' || c == '<' || c == '=' || c == ' '
  16. }
  17. return func(toCheck []string, isBaseList bool, close bool) (repo []string, notFound []string) {
  18. if close {
  19. return
  20. }
  21. Loop:
  22. for _, dep := range toCheck {
  23. if !isBaseList {
  24. for _, base := range baselist {
  25. if base == dep {
  26. continue Loop
  27. }
  28. }
  29. }
  30. if _, erp := localDb.PkgCache().FindSatisfier(dep); erp == nil {
  31. continue
  32. } else if pkg, erp := dbList.FindSatisfier(dep); erp == nil {
  33. repo = append(repo, pkg.Name())
  34. } else {
  35. field := strings.FieldsFunc(dep, f)
  36. notFound = append(notFound, field[0])
  37. }
  38. }
  39. return
  40. }
  41. }
  42. // DepSatisfier receives a string slice, returns a slice of packages found in
  43. // repos and one of packages not found in repos. Leaves out installed packages.
  44. func depSatisfier(toCheck []string) (repo []string, notFound []string, err error) {
  45. localDb, err := AlpmHandle.LocalDb()
  46. if err != nil {
  47. return
  48. }
  49. dbList, err := AlpmHandle.SyncDbs()
  50. if err != nil {
  51. return
  52. }
  53. f := func(c rune) bool {
  54. return c == '>' || c == '<' || c == '=' || c == ' '
  55. }
  56. for _, dep := range toCheck {
  57. if _, erp := localDb.PkgCache().FindSatisfier(dep); erp == nil {
  58. continue
  59. } else if pkg, erp := dbList.FindSatisfier(dep); erp == nil {
  60. repo = append(repo, pkg.Name())
  61. } else {
  62. field := strings.FieldsFunc(dep, f)
  63. notFound = append(notFound, field[0])
  64. }
  65. }
  66. err = nil
  67. return
  68. }