local_install.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Experimental code for install local with dependency refactoring
  2. // Not at feature parity with install.go
  3. package main
  4. import (
  5. "context"
  6. "os"
  7. "path/filepath"
  8. "github.com/Jguer/yay/v11/pkg/db"
  9. "github.com/Jguer/yay/v11/pkg/dep"
  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/Jguer/yay/v11/pkg/topo"
  14. gosrc "github.com/Morganamilo/go-srcinfo"
  15. "github.com/leonelquinteros/gotext"
  16. "github.com/pkg/errors"
  17. )
  18. var ErrInstallRepoPkgs = errors.New(gotext.Get("error installing repo packages"))
  19. func installLocalPKGBUILD(
  20. ctx context.Context,
  21. config *settings.Configuration,
  22. cmdArgs *parser.Arguments,
  23. dbExecutor db.Executor,
  24. ) error {
  25. aurCache := config.Runtime.AURCache
  26. if len(cmdArgs.Targets) < 1 {
  27. return errors.New(gotext.Get("no target directories specified"))
  28. }
  29. grapher := dep.NewGrapher(dbExecutor, aurCache, false, settings.NoConfirm, os.Stdout)
  30. graph := topo.New[string, *dep.InstallInfo]()
  31. for _, target := range cmdArgs.Targets {
  32. var errG error
  33. pkgbuild, err := gosrc.ParseFile(filepath.Join(target, ".SRCINFO"))
  34. if err != nil {
  35. return errors.Wrap(err, gotext.Get("failed to parse .SRCINFO"))
  36. }
  37. graph, errG = grapher.GraphFromSrcInfo(ctx, graph, target, pkgbuild)
  38. if errG != nil {
  39. return err
  40. }
  41. }
  42. topoSorted := graph.TopoSortedLayerMap()
  43. preparer := &Preparer{
  44. dbExecutor: dbExecutor,
  45. cmdBuilder: config.Runtime.CmdBuilder,
  46. config: config,
  47. }
  48. installer := &Installer{dbExecutor: dbExecutor}
  49. pkgBuildDirs, err := preparer.Run(ctx, os.Stdout, topoSorted)
  50. if err != nil {
  51. return err
  52. }
  53. if cleanFunc := preparer.ShouldCleanMakeDeps(); cleanFunc != nil {
  54. installer.AddPostInstallHook(cleanFunc)
  55. }
  56. if cleanAURDirsFunc := preparer.ShouldCleanAURDirs(pkgBuildDirs); cleanAURDirsFunc != nil {
  57. installer.AddPostInstallHook(cleanAURDirsFunc)
  58. }
  59. srcinfoOp := srcinfoOperator{dbExecutor: dbExecutor}
  60. srcinfos, err := srcinfoOp.Run(pkgBuildDirs)
  61. if err != nil {
  62. return err
  63. }
  64. if err = installer.Install(ctx, cmdArgs, topoSorted, pkgBuildDirs, srcinfos); err != nil {
  65. if errHook := installer.RunPostInstallHooks(ctx); errHook != nil {
  66. text.Errorln(errHook)
  67. }
  68. return err
  69. }
  70. return installer.RunPostInstallHooks(ctx)
  71. }