local_install.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. "fmt"
  7. "strings"
  8. "github.com/Jguer/yay/v12/pkg/db"
  9. "github.com/Jguer/yay/v12/pkg/dep"
  10. "github.com/Jguer/yay/v12/pkg/multierror"
  11. "github.com/Jguer/yay/v12/pkg/runtime"
  12. "github.com/Jguer/yay/v12/pkg/settings"
  13. "github.com/Jguer/yay/v12/pkg/settings/parser"
  14. "github.com/Jguer/yay/v12/pkg/sync"
  15. "github.com/leonelquinteros/gotext"
  16. "github.com/pkg/errors"
  17. )
  18. func installLocalPKGBUILD(
  19. ctx context.Context,
  20. run *runtime.Runtime,
  21. cmdArgs *parser.Arguments,
  22. dbExecutor db.Executor,
  23. ) error {
  24. noCheck := strings.Contains(run.Cfg.MFlags, "--nocheck")
  25. grapher := dep.NewGrapher(dbExecutor, run.Cfg, run.AURClient, run.CmdBuilder, false, settings.NoConfirm,
  26. cmdArgs.ExistsDouble("d", "nodeps"), noCheck, cmdArgs.ExistsArg("needed"),
  27. run.Logger.Child("grapher"))
  28. if len(cmdArgs.Targets) < 1 {
  29. return errors.New(gotext.Get("no target directories specified"))
  30. }
  31. graph, err := grapher.GraphFromSrcInfoDirs(ctx, nil, cmdArgs.Targets)
  32. if err != nil {
  33. return err
  34. }
  35. opService := sync.NewOperationService(ctx, dbExecutor, run)
  36. multiErr := &multierror.MultiError{}
  37. targets := graph.TopoSortedLayerMap(func(name string, ii *dep.InstallInfo) error {
  38. if ii.Source == dep.Missing {
  39. multiErr.Add(fmt.Errorf("%w: %s %s", ErrPackagesNotFound, name, ii.Version))
  40. }
  41. return nil
  42. })
  43. if err := multiErr.Return(); err != nil {
  44. return err
  45. }
  46. return opService.Run(ctx, run, cmdArgs, targets, []string{})
  47. }