fix: removeAlreadyInstalled before FindPkgs
This commit is contained in:
		| @@ -65,6 +65,7 @@ import ( | ||||
| // Один содержит пути к собранным пакетам, другой - имена собранных пакетов. | ||||
| func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string, error) { | ||||
| 	log := loggerctx.From(ctx) | ||||
| 	reposInstance := repos.GetInstance(ctx) | ||||
|  | ||||
| 	info, err := distro.ParseOSRelease(ctx) | ||||
| 	if err != nil { | ||||
| @@ -133,12 +134,12 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
|  | ||||
| 	buildDeps, err := installBuildDeps(ctx, vars, opts, installed) // Устанавливаем зависимости для сборки | ||||
| 	buildDeps, err := installBuildDeps(ctx, reposInstance, vars, opts) // Устанавливаем зависимости для сборки | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
|  | ||||
| 	err = installOptDeps(ctx, vars, opts, installed) // Устанавливаем опциональные зависимости | ||||
| 	err = installOptDeps(ctx, reposInstance, vars, opts) // Устанавливаем опциональные зависимости | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| @@ -329,18 +330,25 @@ func performChecks(ctx context.Context, vars *types.BuildVars, interactive bool, | ||||
| 	return true, nil | ||||
| } | ||||
|  | ||||
| type PackageFinder interface { | ||||
| 	FindPkgs(ctx context.Context, pkgs []string) (map[string][]db.Package, []string, error) | ||||
| } | ||||
|  | ||||
| // Функция installBuildDeps устанавливает все зависимости сборки, которые еще не установлены, и возвращает | ||||
| // срез, содержащий имена всех установленных пакетов. | ||||
| func installBuildDeps(ctx context.Context, vars *types.BuildVars, opts types.BuildOpts, installed map[string]string) ([]string, error) { | ||||
| func installBuildDeps(ctx context.Context, repos PackageFinder, vars *types.BuildVars, opts types.BuildOpts) ([]string, error) { | ||||
| 	log := loggerctx.From(ctx) | ||||
| 	var buildDeps []string | ||||
| 	if len(vars.BuildDepends) > 0 { | ||||
| 		found, notFound, err := repos.FindPkgs(ctx, vars.BuildDepends) // Находим пакеты-зависимости | ||||
| 		deps, err := removeAlreadyInstalled(opts, vars.BuildDepends) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
|  | ||||
| 		found = removeAlreadyInstalled(found, installed) // Убираем уже установленные зависимости | ||||
| 		found, notFound, err := repos.FindPkgs(ctx, deps) // Находим пакеты-зависимости | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
|  | ||||
| 		log.Info("Installing build dependencies").Send() // Логгируем установку зависимостей | ||||
|  | ||||
| @@ -353,9 +361,13 @@ func installBuildDeps(ctx context.Context, vars *types.BuildVars, opts types.Bui | ||||
|  | ||||
| // Функция installOptDeps спрашивает у пользователя, какие, если таковые имеются, опциональные зависимости он хочет установить. | ||||
| // Если пользователь решает установить какие-либо опциональные зависимости, выполняется их установка. | ||||
| func installOptDeps(ctx context.Context, vars *types.BuildVars, opts types.BuildOpts, installed map[string]string) error { | ||||
| 	if len(vars.OptDepends) > 0 { | ||||
| 		optDeps, err := cliutils.ChooseOptDepends(ctx, vars.OptDepends, "install", opts.Interactive) // Пользователя просят выбрать опциональные зависимости | ||||
| func installOptDeps(ctx context.Context, repos PackageFinder, vars *types.BuildVars, opts types.BuildOpts) error { | ||||
| 	optDeps, err := removeAlreadyInstalled(opts, vars.OptDepends) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if len(optDeps) > 0 { | ||||
| 		optDeps, err := cliutils.ChooseOptDepends(ctx, optDeps, "install", opts.Interactive) // Пользователя просят выбрать опциональные зависимости | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| @@ -369,7 +381,6 @@ func installOptDeps(ctx context.Context, vars *types.BuildVars, opts types.Build | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		found = removeAlreadyInstalled(found, installed) // Убираем уже установленные зависимости | ||||
| 		flattened := cliutils.FlattenPkgs(ctx, found, "install", opts.Interactive) | ||||
| 		InstallPkgs(ctx, flattened, notFound, opts) // Устанавливаем выбранные пакеты | ||||
| 	} | ||||
| @@ -836,21 +847,22 @@ func setVersion(ctx context.Context, r *interp.Runner, to string) error { | ||||
| 	return r.Run(ctx, fl) | ||||
| } | ||||
|  | ||||
| // Функция removeAlreadyInstalled возвращает карту без каких-либо зависимостей, которые уже установлены. | ||||
| func removeAlreadyInstalled(found map[string][]db.Package, installed map[string]string) map[string][]db.Package { | ||||
| 	filteredPackages := make(map[string][]db.Package) | ||||
| // Returns not installed dependencies | ||||
| func removeAlreadyInstalled(opts types.BuildOpts, dependencies []string) ([]string, error) { | ||||
| 	filteredPackages := []string{} | ||||
|  | ||||
| 	for name, pkgList := range found { | ||||
| 		filteredPkgList := []db.Package{} | ||||
| 		for _, pkg := range pkgList { | ||||
| 			if _, isInstalled := installed[pkg.Name]; !isInstalled { | ||||
| 				filteredPkgList = append(filteredPkgList, pkg) | ||||
| 			} | ||||
| 	for _, dep := range dependencies { | ||||
| 		installed, err := opts.Manager.IsInstalled(dep) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		filteredPackages[name] = filteredPkgList | ||||
| 		if installed { | ||||
| 			continue | ||||
| 		} | ||||
| 		filteredPackages = append(filteredPackages, dep) | ||||
| 	} | ||||
|  | ||||
| 	return filteredPackages | ||||
| 	return filteredPackages, nil | ||||
| } | ||||
|  | ||||
| // Функция packageNames возвращает имена всех предоставленных пакетов. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user