diff --git a/assets/coverage-badge.svg b/assets/coverage-badge.svg index 339faa1..4257307 100644 --- a/assets/coverage-badge.svg +++ b/assets/coverage-badge.svg @@ -11,7 +11,7 @@ coverage coverage - 19.9% - 19.9% + 19.8% + 19.8% diff --git a/internal/build/build.go b/internal/build/build.go index fe23276..ae3b732 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -214,6 +214,8 @@ type CheckerExecutor interface { type InstallerExecutor interface { InstallLocal(paths []string, opts *manager.Opts) error Install(pkgs []string, opts *manager.Opts) error + Remove(pkgs []string, opts *manager.Opts) error + RemoveAlreadyInstalled(pkgs []string) ([]string, error) } @@ -408,7 +410,7 @@ func (b *Builder) BuildPackage( sources, checksums = removeDuplicatesSources(sources, checksums) slog.Debug("installBuildDeps") - alrBuildDeps, err := b.installBuildDeps(ctx, input, buildDepends) + alrBuildDeps, installedBuildDeps, err := b.installBuildDeps(ctx, input, buildDepends) if err != nil { return nil, err } @@ -477,9 +479,39 @@ func (b *Builder) BuildPackage( builtDeps = removeDuplicates(append(builtDeps, res...)) + err = b.removeBuildDeps(ctx, input, installedBuildDeps) + if err != nil { + return nil, err + } + return builtDeps, nil } +func (b *Builder) removeBuildDeps(ctx context.Context, input interface { + BuildOptsProvider +}, deps []string, +) error { + if len(deps) > 0 { + remove, err := cliutils.YesNoPrompt(ctx, gotext.Get("Would you like to remove the build dependencies?"), input.BuildOpts().Interactive, false) + if err != nil { + return err + } + + if remove { + err = b.installerExecutor.Remove( + deps, + &manager.Opts{ + NoConfirm: !input.BuildOpts().Interactive, + }, + ) + if err != nil { + return err + } + } + } + return nil +} + type InstallPkgsArgs struct { BuildArgs AlrPkgs []alrsh.Package @@ -608,20 +640,22 @@ func (i *Builder) installBuildDeps( PkgFormatProvider }, pkgs []string, -) ([]*BuiltDep, error) { +) ([]*BuiltDep, []string, error) { var builtDeps []*BuiltDep + var deps []string + var err error if len(pkgs) > 0 { - deps, err := i.installerExecutor.RemoveAlreadyInstalled(pkgs) + deps, err = i.installerExecutor.RemoveAlreadyInstalled(pkgs) if err != nil { - return nil, err + return nil, nil, err } builtDeps, err = i.InstallPkgs(ctx, input, deps) // Устанавливаем выбранные пакеты if err != nil { - return nil, err + return nil, nil, err } } - return builtDeps, nil + return builtDeps, deps, nil } func (i *Builder) installOptDeps( diff --git a/internal/build/installer.go b/internal/build/installer.go index d416db1..eba512e 100644 --- a/internal/build/installer.go +++ b/internal/build/installer.go @@ -36,6 +36,10 @@ func (i *Installer) Install(pkgs []string, opts *manager.Opts) error { return i.mgr.Install(opts, pkgs...) } +func (i *Installer) Remove(pkgs []string, opts *manager.Opts) error { + return i.mgr.Remove(opts, pkgs...) +} + func (i *Installer) RemoveAlreadyInstalled(pkgs []string) ([]string, error) { filteredPackages := []string{} diff --git a/internal/build/safe_installer.go b/internal/build/safe_installer.go index b911b19..e7c8447 100644 --- a/internal/build/safe_installer.go +++ b/internal/build/safe_installer.go @@ -70,6 +70,17 @@ func (s *InstallerRPCServer) Install(args *InstallArgs, reply *struct{}) error { return s.Impl.Install(args.PackagesOrPaths, args.Opts) } +func (r *InstallerRPC) Remove(pkgs []string, opts *manager.Opts) error { + return r.client.Call("Plugin.Remove", &InstallArgs{ + PackagesOrPaths: pkgs, + Opts: opts, + }, nil) +} + +func (s *InstallerRPCServer) Remove(args *InstallArgs, reply *struct{}) error { + return s.Impl.Remove(args.PackagesOrPaths, args.Opts) +} + func (r *InstallerRPC) RemoveAlreadyInstalled(paths []string) ([]string, error) { var val []string err := r.client.Call("Plugin.RemoveAlreadyInstalled", paths, &val) diff --git a/internal/translations/default.pot b/internal/translations/default.pot index c63ca19..deb25fe 100644 --- a/internal/translations/default.pot +++ b/internal/translations/default.pot @@ -174,19 +174,23 @@ msgstr "" msgid "Error removing packages" msgstr "" -#: internal/build/build.go:376 +#: internal/build/build.go:378 msgid "Building package" msgstr "" -#: internal/build/build.go:405 +#: internal/build/build.go:407 msgid "The checksums array must be the same length as sources" msgstr "" -#: internal/build/build.go:447 +#: internal/build/build.go:449 msgid "Downloading sources" msgstr "" -#: internal/build/build.go:539 +#: internal/build/build.go:495 +msgid "Would you like to remove the build dependencies?" +msgstr "" + +#: internal/build/build.go:571 msgid "Installing dependencies" msgstr "" diff --git a/internal/translations/po/ru/default.po b/internal/translations/po/ru/default.po index 06aee9b..69d242f 100644 --- a/internal/translations/po/ru/default.po +++ b/internal/translations/po/ru/default.po @@ -181,19 +181,23 @@ msgstr "Для команды remove ожидался хотя бы 1 аргум msgid "Error removing packages" msgstr "Ошибка при удалении пакетов" -#: internal/build/build.go:376 +#: internal/build/build.go:378 msgid "Building package" msgstr "Сборка пакета" -#: internal/build/build.go:405 +#: internal/build/build.go:407 msgid "The checksums array must be the same length as sources" msgstr "Массив контрольных сумм должен быть той же длины, что и источники" -#: internal/build/build.go:447 +#: internal/build/build.go:449 msgid "Downloading sources" msgstr "Скачивание источников" -#: internal/build/build.go:539 +#: internal/build/build.go:495 +msgid "Would you like to remove the build dependencies?" +msgstr "Хотели бы вы удалить зависимости сборки?" + +#: internal/build/build.go:571 msgid "Installing dependencies" msgstr "Установка зависимостей" @@ -663,9 +667,6 @@ msgstr "Здесь нечего делать." #~ msgid "Installing build dependencies" #~ msgstr "Установка зависимостей сборки" -#~ msgid "Would you like to remove the build dependencies?" -#~ msgstr "Хотели бы вы удалить зависимости сборки?" - #~ msgid "Error installing native packages" #~ msgstr "Ошибка при установке нативных пакетов"