From 083df3c7aa6ddb17a6217ea087d50b6c6eff6961 Mon Sep 17 00:00:00 2001 From: Maxim Slipenko Date: Tue, 11 Feb 2025 12:59:10 +0300 Subject: [PATCH] wip --- build.go | 28 +++++++++++-- internal/shutils/handlers/fakeroot.go | 2 +- internal/translations/default.pot | 56 +++++++++++++++----------- internal/translations/po/ru/default.po | 56 +++++++++++++++----------- pkg/build/build.go | 20 ++++++++- scripts/install.sh | 19 +++++++++ 6 files changed, 127 insertions(+), 54 deletions(-) diff --git a/build.go b/build.go index a033182..988b913 100644 --- a/build.go +++ b/build.go @@ -23,6 +23,7 @@ import ( "log/slog" "os" "path/filepath" + "strings" "github.com/leonelquinteros/gotext" "github.com/urfave/cli/v2" @@ -48,6 +49,11 @@ func BuildCmd() *cli.Command { Value: "alr.sh", Usage: gotext.Get("Path to the build script"), }, + &cli.StringFlag{ + Name: "script-package", + Aliases: []string{"sp"}, + Usage: gotext.Get("Specify package in script (for multi package script only)"), + }, &cli.StringFlag{ Name: "package", Aliases: []string{"p"}, @@ -79,18 +85,32 @@ func BuildCmd() *cli.Command { switch { case c.IsSet("script"): script = c.String("script") + packageName = c.String("script-package") case c.IsSet("package"): - // TODO: refactor + // TODO: handle multiple packages packageInput := c.String("package") - pkgs, _, _ := rs.FindPkgs(ctx, []string{packageInput}) - pkg := pkgs[packageInput] + + arr := strings.Split(packageInput, "/") + var packageSearch string + if len(arr) == 2 { + packageSearch = arr[1] + } else { + packageSearch = arr[0] + } + + pkgs, _, _ := rs.FindPkgs(ctx, []string{packageSearch}) + pkg, ok := pkgs[packageSearch] + if len(pkg) < 1 || !ok { + slog.Error(gotext.Get("Package not found")) + os.Exit(1) + } + if pkg[0].BasePkgName != "" { script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].BasePkgName, "alr.sh") packageName = pkg[0].Name } else { script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].Name, "alr.sh") } - default: script = filepath.Join(repoDir, "alr.sh") } diff --git a/internal/shutils/handlers/fakeroot.go b/internal/shutils/handlers/fakeroot.go index b8d02c5..bc0090b 100644 --- a/internal/shutils/handlers/fakeroot.go +++ b/internal/shutils/handlers/fakeroot.go @@ -29,9 +29,9 @@ import ( "syscall" "time" + "gitea.plemya-x.ru/Plemya-x/fakeroot" "mvdan.cc/sh/v3/expand" "mvdan.cc/sh/v3/interp" - "gitea.plemya-x.ru/Plemya-x/fakeroot" ) // FakerootExecHandler was extracted from github.com/mvdan/sh/interp/handler.go diff --git a/internal/translations/default.pot b/internal/translations/default.pot index 9b9b614..21b6ec6 100644 --- a/internal/translations/default.pot +++ b/internal/translations/default.pot @@ -9,48 +9,56 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: build.go:43 +#: build.go:44 msgid "Build a local package" msgstr "" -#: build.go:49 +#: build.go:50 msgid "Path to the build script" msgstr "" -#: build.go:54 +#: build.go:55 +msgid "Specify package in script (for multi package script only)" +msgstr "" + +#: build.go:60 msgid "Name of the package to build and its repo (example: default/go-bin)" msgstr "" -#: build.go:59 +#: build.go:65 msgid "" "Build package from scratch even if there's an already built package available" msgstr "" -#: build.go:69 +#: build.go:75 msgid "Error db init" msgstr "" -#: build.go:102 +#: build.go:104 +msgid "Package not found" +msgstr "" + +#: build.go:122 msgid "Error pulling repositories" msgstr "" -#: build.go:110 +#: build.go:130 msgid "Unable to detect a supported package manager on the system" msgstr "" -#: build.go:116 +#: build.go:136 msgid "Error parsing os release" msgstr "" -#: build.go:137 +#: build.go:157 msgid "Error building package" msgstr "" -#: build.go:144 +#: build.go:164 msgid "Error getting working directory" msgstr "" -#: build.go:153 +#: build.go:173 msgid "Error moving the package" msgstr "" @@ -321,57 +329,57 @@ msgstr "" msgid "Compressing package" msgstr "" -#: pkg/build/build.go:341 +#: pkg/build/build.go:359 msgid "" "Your system's CPU architecture doesn't match this package. Do you want to " "build anyway?" msgstr "" -#: pkg/build/build.go:355 +#: pkg/build/build.go:373 msgid "This package is already installed" msgstr "" -#: pkg/build/build.go:379 +#: pkg/build/build.go:397 msgid "Installing build dependencies" msgstr "" -#: pkg/build/build.go:390 +#: pkg/build/build.go:408 msgid "Installing dependencies" msgstr "" -#: pkg/build/build.go:431 +#: pkg/build/build.go:449 msgid "The checksums array must be the same length as sources" msgstr "" -#: pkg/build/build.go:482 +#: pkg/build/build.go:500 msgid "Would you like to remove the build dependencies?" msgstr "" -#: pkg/build/build.go:519 +#: pkg/build/build.go:537 msgid "Executing version()" msgstr "" -#: pkg/build/build.go:539 +#: pkg/build/build.go:557 msgid "Updating version" msgstr "" -#: pkg/build/build.go:544 +#: pkg/build/build.go:562 msgid "Executing prepare()" msgstr "" -#: pkg/build/build.go:554 +#: pkg/build/build.go:572 msgid "Executing build()" msgstr "" -#: pkg/build/build.go:570 pkg/build/build.go:598 +#: pkg/build/build.go:588 pkg/build/build.go:616 msgid "Executing %s()" msgstr "" -#: pkg/build/build.go:657 +#: pkg/build/build.go:675 msgid "Error installing native packages" msgstr "" -#: pkg/build/build.go:683 +#: pkg/build/build.go:701 msgid "Error installing package" msgstr "" diff --git a/internal/translations/po/ru/default.po b/internal/translations/po/ru/default.po index c31e583..b89a540 100644 --- a/internal/translations/po/ru/default.po +++ b/internal/translations/po/ru/default.po @@ -16,49 +16,57 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Gtranslator 47.1\n" -#: build.go:43 +#: build.go:44 msgid "Build a local package" msgstr "Сборка локального пакета" -#: build.go:49 +#: build.go:50 msgid "Path to the build script" msgstr "Путь к скрипту сборки" -#: build.go:54 +#: build.go:55 +msgid "Specify package in script (for multi package script only)" +msgstr "" + +#: build.go:60 msgid "Name of the package to build and its repo (example: default/go-bin)" msgstr "Имя пакета для сборки и его репозиторий (пример: default/go-bin)" -#: build.go:59 +#: build.go:65 msgid "" "Build package from scratch even if there's an already built package available" msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет" -#: build.go:69 +#: build.go:75 msgid "Error db init" msgstr "" -#: build.go:102 +#: build.go:104 +msgid "Package not found" +msgstr "" + +#: build.go:122 msgid "Error pulling repositories" msgstr "Ошибка при извлечении репозиториев" -#: build.go:110 +#: build.go:130 msgid "Unable to detect a supported package manager on the system" msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе" -#: build.go:116 +#: build.go:136 #, fuzzy msgid "Error parsing os release" msgstr "Ошибка при разборе файла выпуска операционной системы" -#: build.go:137 +#: build.go:157 msgid "Error building package" msgstr "Ошибка при сборке пакета" -#: build.go:144 +#: build.go:164 msgid "Error getting working directory" msgstr "Ошибка при получении рабочего каталога" -#: build.go:153 +#: build.go:173 msgid "Error moving the package" msgstr "Ошибка при перемещении пакета" @@ -336,7 +344,7 @@ msgstr "Сборка метаданных пакета" msgid "Compressing package" msgstr "Сжатие пакета" -#: pkg/build/build.go:341 +#: pkg/build/build.go:359 msgid "" "Your system's CPU architecture doesn't match this package. Do you want to " "build anyway?" @@ -344,52 +352,52 @@ msgstr "" "Архитектура процессора вашей системы не соответствует этому пакету. Вы все " "равно хотите выполнить сборку?" -#: pkg/build/build.go:355 +#: pkg/build/build.go:373 msgid "This package is already installed" msgstr "Этот пакет уже установлен" -#: pkg/build/build.go:379 +#: pkg/build/build.go:397 msgid "Installing build dependencies" msgstr "Установка зависимостей сборки" -#: pkg/build/build.go:390 +#: pkg/build/build.go:408 msgid "Installing dependencies" msgstr "Установка зависимостей" -#: pkg/build/build.go:431 +#: pkg/build/build.go:449 msgid "The checksums array must be the same length as sources" msgstr "Массив контрольных сумм должен быть той же длины, что и источники" -#: pkg/build/build.go:482 +#: pkg/build/build.go:500 msgid "Would you like to remove the build dependencies?" msgstr "Хотели бы вы удалить зависимости сборки?" -#: pkg/build/build.go:519 +#: pkg/build/build.go:537 msgid "Executing version()" msgstr "Исполнение версия()" -#: pkg/build/build.go:539 +#: pkg/build/build.go:557 msgid "Updating version" msgstr "Обновление версии" -#: pkg/build/build.go:544 +#: pkg/build/build.go:562 msgid "Executing prepare()" msgstr "Исполнение prepare()" -#: pkg/build/build.go:554 +#: pkg/build/build.go:572 msgid "Executing build()" msgstr "Исполнение build()" -#: pkg/build/build.go:570 pkg/build/build.go:598 +#: pkg/build/build.go:588 pkg/build/build.go:616 #, fuzzy msgid "Executing %s()" msgstr "Исполнение files()" -#: pkg/build/build.go:657 +#: pkg/build/build.go:675 msgid "Error installing native packages" msgstr "Ошибка при установке нативных пакетов" -#: pkg/build/build.go:683 +#: pkg/build/build.go:701 msgid "Error installing package" msgstr "Ошибка при установке пакета" diff --git a/pkg/build/build.go b/pkg/build/build.go index 56cd4b0..46fd9f5 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -266,14 +266,32 @@ func (b *Builder) executeFirstPass( } dec := decoder.New(b.info, runner) // Создаём новый декодер + + type packages struct { + BasePkgName string `sh:"basepkg_name"` + Names []string `sh:"name"` + } + + var pkgs packages + err = dec.DecodeVars(&pkgs) + if err != nil { + return nil, err + } + if len(pkgs.Names) == 0 { + return nil, errors.New("package name is missing") + } var vars types.BuildVars - if b.opts.Package == "" { + if len(pkgs.Names) == 1 { err = dec.DecodeVars(&vars) // Декодируем переменные if err != nil { return nil, err } return &vars, nil } + if b.opts.Package == "" { + return nil, errors.New("script has multiple packages but package is not specified") + } + var preVars types.BuildVarsPre funcName := fmt.Sprintf("meta_%s", b.opts.Package) meta, ok := dec.GetFuncSub(funcName) diff --git a/scripts/install.sh b/scripts/install.sh index 1fd7a72..c642b4a 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1,3 +1,22 @@ +# This file was originally part of the project "LURE - Linux User REpository", created by Elara Musayelyan. +# It has been modified as part of "ALR - Any Linux Repository" by Евгений Храмов. +# +# 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 . + info() { echo $'\x1b[32m[ИНФО]\x1b[0m' $@ }