sync.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package main
  2. import (
  3. "context"
  4. "os"
  5. "github.com/Jguer/yay/v11/pkg/db"
  6. "github.com/Jguer/yay/v11/pkg/dep"
  7. "github.com/Jguer/yay/v11/pkg/settings"
  8. "github.com/Jguer/yay/v11/pkg/settings/parser"
  9. "github.com/Jguer/yay/v11/pkg/text"
  10. )
  11. func syncInstall(ctx context.Context,
  12. config *settings.Configuration,
  13. cmdArgs *parser.Arguments,
  14. dbExecutor db.Executor,
  15. ) error {
  16. aurCache := config.Runtime.AURCache
  17. if cmdArgs.ExistsArg("u", "sysupgrade") {
  18. var errSysUp error
  19. // All of the installs are done as explicit installs, this should be move to a grapher method
  20. _, errSysUp = addUpgradeTargetsToArgs(ctx, dbExecutor, cmdArgs, []string{}, cmdArgs)
  21. if errSysUp != nil {
  22. return errSysUp
  23. }
  24. }
  25. grapher := dep.NewGrapher(dbExecutor, aurCache, false, settings.NoConfirm, os.Stdout)
  26. graph, err := grapher.GraphFromTargets(cmdArgs.Targets)
  27. if err != nil {
  28. return err
  29. }
  30. topoSorted := graph.TopoSortedLayerMap()
  31. preparer := &Preparer{
  32. dbExecutor: dbExecutor,
  33. cmdBuilder: config.Runtime.CmdBuilder,
  34. config: config,
  35. }
  36. installer := &Installer{dbExecutor: dbExecutor}
  37. if err = preparer.Present(os.Stdout, topoSorted); err != nil {
  38. return err
  39. }
  40. cleanFunc := preparer.ShouldCleanMakeDeps(ctx)
  41. if cleanFunc != nil {
  42. installer.AddPostInstallHook(cleanFunc)
  43. }
  44. pkgBuildDirs, err := preparer.PrepareWorkspace(ctx, topoSorted)
  45. if err != nil {
  46. return err
  47. }
  48. err = installer.Install(ctx, cmdArgs, topoSorted, pkgBuildDirs)
  49. if err != nil {
  50. if errHook := installer.RunPostInstallHooks(ctx); errHook != nil {
  51. text.Errorln(errHook)
  52. }
  53. return err
  54. }
  55. return installer.RunPostInstallHooks(ctx)
  56. }