Compare commits

..

No commits in common. "bd79d56776819e2f702a1ff1dd41392c6660822d" and "4b53e819d8bec442b215b16e2c5e061efec0d425" have entirely different histories.

8 changed files with 32 additions and 137 deletions

@ -100,11 +100,11 @@ func e2eSpawn(runnable e2e.Runnable, command e2e.Command, timeout time.Duration,
var ALL_SYSTEMS []string = []string{ var ALL_SYSTEMS []string = []string{
"ubuntu-24.04", "ubuntu-24.04",
// "alt-sisyphus", "alt-sisyphus",
// "archlinux", "archlinux",
// "alpine", //"alpine",
// "opensuse-leap", "opensuse-leap",
// "redos-8", "redos-8",
} }
var COMMON_SYSTEMS []string = []string{ var COMMON_SYSTEMS []string = []string{
@ -155,7 +155,6 @@ func dockerMultipleRun(t *testing.T, name string, ids []string, f func(t *testin
Volumes: []string{ Volumes: []string{
"./alr:/usr/bin/alr", "./alr:/usr/bin/alr",
}, },
Privileged: true,
}, },
) )
assert.NoError(t, e2e.StartAndWaitReady(runnable)) assert.NoError(t, e2e.StartAndWaitReady(runnable))

@ -1,7 +1,5 @@
FROM ubuntu:24.10 FROM ubuntu:24.10
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates sudo RUN apt update && apt install -y ca-certificates
RUN useradd -m -s /bin/bash alr-user && \ RUN useradd -m -s /bin/bash alr-user
echo "alr-user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/alr-user && \
chmod 0440 /etc/sudoers.d/alr-user
USER alr-user USER alr-user
ENTRYPOINT ["tail", "-f", "/dev/null"] ENTRYPOINT ["tail", "-f", "/dev/null"]

@ -1,40 +0,0 @@
// ALR - Any Linux Repository
// Copyright (C) 2025 Евгений Храмов
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//go:build e2e
package e2etests_test
import (
"testing"
"github.com/alecthomas/assert/v2"
"github.com/efficientgo/e2e"
)
func TestE2EIssue32Interactive(t *testing.T) {
dockerMultipleRun(
t,
"issue-32-interactive",
COMMON_SYSTEMS,
func(t *testing.T, r e2e.Runnable) {
err := r.Exec(e2e.NewCommand(
"alr", "--interactive=false", "remove", "ca-certificates",
))
assert.NoError(t, err)
},
)
}

@ -1,55 +0,0 @@
// ALR - Any Linux Repository
// Copyright (C) 2025 Евгений Храмов
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//go:build e2e
package e2etests_test
import (
"testing"
"github.com/alecthomas/assert/v2"
"github.com/efficientgo/e2e"
)
func TestE2EIssue50InstallMultiple(t *testing.T) {
dockerMultipleRun(
t,
"issue-50-install-multiple",
COMMON_SYSTEMS,
func(t *testing.T, r e2e.Runnable) {
err := r.Exec(e2e.NewCommand(
"alr",
"addrepo",
"--name",
"alr-repo",
"--url",
"https://gitea.plemya-x.ru/Maks1mS/repo-for-tests.git",
))
assert.NoError(t, err)
err = r.Exec(e2e.NewCommand(
"alr", "in", "foo-pkg", "bar-pkg",
))
assert.NoError(t, err)
err = r.Exec(e2e.NewCommand("cat", "/opt/foo"))
assert.NoError(t, err)
err = r.Exec(e2e.NewCommand("cat", "/opt/bar"))
assert.NoError(t, err)
},
)
}

@ -169,10 +169,7 @@ func RemoveCmd() *cli.Command {
os.Exit(1) os.Exit(1)
} }
err := mgr.Remove(&manager.Opts{ err := mgr.Remove(nil, c.Args().Slice()...)
AsRoot: true,
NoConfirm: !c.Bool("interactive"),
}, c.Args().Slice()...)
if err != nil { if err != nil {
slog.Error(gotext.Get("Error removing packages"), "err", err) slog.Error(gotext.Get("Error removing packages"), "err", err)
os.Exit(1) os.Exit(1)

@ -170,7 +170,7 @@ msgstr ""
msgid "Command remove expected at least 1 argument, got %d" msgid "Command remove expected at least 1 argument, got %d"
msgstr "" msgstr ""
#: install.go:177 #: install.go:174
msgid "Error removing packages" msgid "Error removing packages"
msgstr "" msgstr ""
@ -375,39 +375,39 @@ msgstr ""
msgid "Installing build dependencies" msgid "Installing build dependencies"
msgstr "" msgstr ""
#: pkg/build/build.go:521 #: pkg/build/build.go:517
msgid "Installing dependencies" msgid "Installing dependencies"
msgstr "" msgstr ""
#: pkg/build/build.go:602 #: pkg/build/build.go:598
msgid "Would you like to remove the build dependencies?" msgid "Would you like to remove the build dependencies?"
msgstr "" msgstr ""
#: pkg/build/build.go:665 #: pkg/build/build.go:661
msgid "Executing prepare()" msgid "Executing prepare()"
msgstr "" msgstr ""
#: pkg/build/build.go:675 #: pkg/build/build.go:671
msgid "Executing build()" msgid "Executing build()"
msgstr "" msgstr ""
#: pkg/build/build.go:705 pkg/build/build.go:725 #: pkg/build/build.go:701 pkg/build/build.go:721
msgid "Executing %s()" msgid "Executing %s()"
msgstr "" msgstr ""
#: pkg/build/build.go:784 #: pkg/build/build.go:780
msgid "Error installing native packages" msgid "Error installing native packages"
msgstr "" msgstr ""
#: pkg/build/build.go:808 #: pkg/build/build.go:804
msgid "Error installing package" msgid "Error installing package"
msgstr "" msgstr ""
#: pkg/build/build.go:867 #: pkg/build/build.go:863
msgid "AutoProv is not implemented for this package format, so it's skipped" msgid "AutoProv is not implemented for this package format, so it's skipped"
msgstr "" msgstr ""
#: pkg/build/build.go:878 #: pkg/build/build.go:874
msgid "AutoReq is not implemented for this package format, so it's skipped" msgid "AutoReq is not implemented for this package format, so it's skipped"
msgstr "" msgstr ""

@ -178,7 +178,7 @@ msgstr "Удалить установленный пакет"
msgid "Command remove expected at least 1 argument, got %d" msgid "Command remove expected at least 1 argument, got %d"
msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d" msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d"
#: install.go:177 #: install.go:174
msgid "Error removing packages" msgid "Error removing packages"
msgstr "Ошибка при удалении пакетов" msgstr "Ошибка при удалении пакетов"
@ -389,40 +389,40 @@ msgstr "Этот пакет уже установлен"
msgid "Installing build dependencies" msgid "Installing build dependencies"
msgstr "Установка зависимостей сборки" msgstr "Установка зависимостей сборки"
#: pkg/build/build.go:521 #: pkg/build/build.go:517
msgid "Installing dependencies" msgid "Installing dependencies"
msgstr "Установка зависимостей" msgstr "Установка зависимостей"
#: pkg/build/build.go:602 #: pkg/build/build.go:598
msgid "Would you like to remove the build dependencies?" msgid "Would you like to remove the build dependencies?"
msgstr "Хотели бы вы удалить зависимости сборки?" msgstr "Хотели бы вы удалить зависимости сборки?"
#: pkg/build/build.go:665 #: pkg/build/build.go:661
msgid "Executing prepare()" msgid "Executing prepare()"
msgstr "Исполнение prepare()" msgstr "Исполнение prepare()"
#: pkg/build/build.go:675 #: pkg/build/build.go:671
msgid "Executing build()" msgid "Executing build()"
msgstr "Исполнение build()" msgstr "Исполнение build()"
#: pkg/build/build.go:705 pkg/build/build.go:725 #: pkg/build/build.go:701 pkg/build/build.go:721
msgid "Executing %s()" msgid "Executing %s()"
msgstr "Исполнение %s()" msgstr "Исполнение %s()"
#: pkg/build/build.go:784 #: pkg/build/build.go:780
msgid "Error installing native packages" msgid "Error installing native packages"
msgstr "Ошибка при установке нативных пакетов" msgstr "Ошибка при установке нативных пакетов"
#: pkg/build/build.go:808 #: pkg/build/build.go:804
msgid "Error installing package" msgid "Error installing package"
msgstr "Ошибка при установке пакета" msgstr "Ошибка при установке пакета"
#: pkg/build/build.go:867 #: pkg/build/build.go:863
msgid "AutoProv is not implemented for this package format, so it's skipped" msgid "AutoProv is not implemented for this package format, so it's skipped"
msgstr "" msgstr ""
"AutoProv не реализовано для этого формата пакета, поэтому будет пропущено" "AutoProv не реализовано для этого формата пакета, поэтому будет пропущено"
#: pkg/build/build.go:878 #: pkg/build/build.go:874
msgid "AutoReq is not implemented for this package format, so it's skipped" msgid "AutoReq is not implemented for this package format, so it's skipped"
msgstr "" msgstr ""
"AutoReq не реализовано для этого формата пакета, поэтому будет пропущено" "AutoReq не реализовано для этого формата пакета, поэтому будет пропущено"

@ -489,17 +489,13 @@ func (b *Builder) getBuildersForPackages(pkgs []db.Package) []*Builder {
} }
pkgsMap := make(map[string]*item) pkgsMap := make(map[string]*item)
for _, pkg := range pkgs { for _, pkg := range pkgs {
name := pkg.BasePkgName if pkgsMap[pkg.BasePkgName] == nil {
if name == "" { pkgsMap[pkg.BasePkgName] = &item{
name = pkg.Name
}
if pkgsMap[name] == nil {
pkgsMap[name] = &item{
pkg: &pkg, pkg: &pkg,
} }
} }
pkgsMap[name].packages = append( pkgsMap[pkg.BasePkgName].packages = append(
pkgsMap[name].packages, pkgsMap[pkg.BasePkgName].packages,
pkg.Name, pkg.Name,
) )
} }