local_install.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. "strings"
  9. "github.com/Jguer/yay/v11/pkg/db"
  10. "github.com/Jguer/yay/v11/pkg/dep"
  11. "github.com/Jguer/yay/v11/pkg/multierror"
  12. "github.com/Jguer/yay/v11/pkg/settings"
  13. "github.com/Jguer/yay/v11/pkg/settings/parser"
  14. "github.com/Jguer/yay/v11/pkg/topo"
  15. gosrc "github.com/Morganamilo/go-srcinfo"
  16. "github.com/leonelquinteros/gotext"
  17. "github.com/pkg/errors"
  18. )
  19. var ErrInstallRepoPkgs = errors.New(gotext.Get("error installing repo packages"))
  20. func installLocalPKGBUILD(
  21. ctx context.Context,
  22. config *settings.Configuration,
  23. cmdArgs *parser.Arguments,
  24. dbExecutor db.Executor,
  25. ) error {
  26. aurCache := config.Runtime.AURCache
  27. noCheck := strings.Contains(config.MFlags, "--nocheck")
  28. if len(cmdArgs.Targets) < 1 {
  29. return errors.New(gotext.Get("no target directories specified"))
  30. }
  31. grapher := dep.NewGrapher(dbExecutor, aurCache, false, settings.NoConfirm, os.Stdout, cmdArgs.ExistsDouble("d", "nodeps"), noCheck)
  32. graph := topo.New[string, *dep.InstallInfo]()
  33. for _, target := range cmdArgs.Targets {
  34. var errG error
  35. pkgbuild, err := gosrc.ParseFile(filepath.Join(target, ".SRCINFO"))
  36. if err != nil {
  37. return errors.Wrap(err, gotext.Get("failed to parse .SRCINFO"))
  38. }
  39. graph, errG = grapher.GraphFromSrcInfo(ctx, graph, target, pkgbuild)
  40. if errG != nil {
  41. return err
  42. }
  43. }
  44. opService := NewOperationService(ctx, config, dbExecutor)
  45. multiErr := &multierror.MultiError{}
  46. targets := graph.TopoSortedLayerMap(func(name string, ii *dep.InstallInfo) error {
  47. if ii.Source == dep.Missing {
  48. multiErr.Add(errors.New(gotext.Get("could not find %s%s", name, ii.Version)))
  49. }
  50. return nil
  51. })
  52. if err := multiErr.Return(); err != nil {
  53. return err
  54. }
  55. return opService.Run(ctx, cmdArgs, targets)
  56. }