sync.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package main
  2. import (
  3. "context"
  4. "os"
  5. "path/filepath"
  6. "github.com/Jguer/yay/v11/pkg/db"
  7. "github.com/Jguer/yay/v11/pkg/dep"
  8. "github.com/Jguer/yay/v11/pkg/metadata"
  9. "github.com/Jguer/yay/v11/pkg/settings"
  10. "github.com/Jguer/yay/v11/pkg/settings/parser"
  11. "github.com/Jguer/yay/v11/pkg/text"
  12. "github.com/leonelquinteros/gotext"
  13. "github.com/pkg/errors"
  14. )
  15. func syncInstall(ctx context.Context,
  16. config *settings.Configuration,
  17. cmdArgs *parser.Arguments, dbExecutor db.Executor,
  18. ) error {
  19. aurCache, err := metadata.NewAURCache(filepath.Join(config.BuildDir, "aur.json"))
  20. if err != nil {
  21. return errors.Wrap(err, gotext.Get("failed to retrieve aur Cache"))
  22. }
  23. grapher := dep.NewGrapher(dbExecutor, aurCache, false, settings.NoConfirm, os.Stdout)
  24. graph, err := grapher.GraphFromTargets(cmdArgs.Targets)
  25. if err != nil {
  26. return err
  27. }
  28. topoSorted := graph.TopoSortedLayerMap()
  29. preparer := &Preparer{
  30. dbExecutor: dbExecutor,
  31. cmdBuilder: config.Runtime.CmdBuilder,
  32. config: config,
  33. }
  34. installer := &Installer{dbExecutor: dbExecutor}
  35. if err = preparer.Present(os.Stdout, topoSorted); err != nil {
  36. return err
  37. }
  38. cleanFunc := preparer.ShouldCleanMakeDeps(ctx)
  39. if cleanFunc != nil {
  40. installer.AddPostInstallHook(cleanFunc)
  41. }
  42. pkgBuildDirs, err := preparer.PrepareWorkspace(ctx, topoSorted)
  43. if err != nil {
  44. return err
  45. }
  46. err = installer.Install(ctx, cmdArgs, topoSorted, pkgBuildDirs)
  47. if err != nil {
  48. if errHook := installer.RunPostInstallHooks(ctx); errHook != nil {
  49. text.Errorln(errHook)
  50. }
  51. return err
  52. }
  53. return installer.RunPostInstallHooks(ctx)
  54. }