This commit is contained in:
Maxim Slipenko 2025-02-11 12:59:10 +03:00
parent 100739c419
commit 083df3c7aa
6 changed files with 127 additions and 54 deletions

@ -23,6 +23,7 @@ import (
"log/slog" "log/slog"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"github.com/leonelquinteros/gotext" "github.com/leonelquinteros/gotext"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@ -48,6 +49,11 @@ func BuildCmd() *cli.Command {
Value: "alr.sh", Value: "alr.sh",
Usage: gotext.Get("Path to the build script"), 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{ &cli.StringFlag{
Name: "package", Name: "package",
Aliases: []string{"p"}, Aliases: []string{"p"},
@ -79,18 +85,32 @@ func BuildCmd() *cli.Command {
switch { switch {
case c.IsSet("script"): case c.IsSet("script"):
script = c.String("script") script = c.String("script")
packageName = c.String("script-package")
case c.IsSet("package"): case c.IsSet("package"):
// TODO: refactor // TODO: handle multiple packages
packageInput := c.String("package") 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 != "" { if pkg[0].BasePkgName != "" {
script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].BasePkgName, "alr.sh") script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].BasePkgName, "alr.sh")
packageName = pkg[0].Name packageName = pkg[0].Name
} else { } else {
script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].Name, "alr.sh") script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].Name, "alr.sh")
} }
default: default:
script = filepath.Join(repoDir, "alr.sh") script = filepath.Join(repoDir, "alr.sh")
} }

@ -29,9 +29,9 @@ import (
"syscall" "syscall"
"time" "time"
"gitea.plemya-x.ru/Plemya-x/fakeroot"
"mvdan.cc/sh/v3/expand" "mvdan.cc/sh/v3/expand"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
"gitea.plemya-x.ru/Plemya-x/fakeroot"
) )
// FakerootExecHandler was extracted from github.com/mvdan/sh/interp/handler.go // FakerootExecHandler was extracted from github.com/mvdan/sh/interp/handler.go

@ -9,48 +9,56 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: build.go:43 #: build.go:44
msgid "Build a local package" msgid "Build a local package"
msgstr "" msgstr ""
#: build.go:49 #: build.go:50
msgid "Path to the build script" msgid "Path to the build script"
msgstr "" 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)" msgid "Name of the package to build and its repo (example: default/go-bin)"
msgstr "" msgstr ""
#: build.go:59 #: build.go:65
msgid "" msgid ""
"Build package from scratch even if there's an already built package available" "Build package from scratch even if there's an already built package available"
msgstr "" msgstr ""
#: build.go:69 #: build.go:75
msgid "Error db init" msgid "Error db init"
msgstr "" msgstr ""
#: build.go:102 #: build.go:104
msgid "Package not found"
msgstr ""
#: build.go:122
msgid "Error pulling repositories" msgid "Error pulling repositories"
msgstr "" msgstr ""
#: build.go:110 #: build.go:130
msgid "Unable to detect a supported package manager on the system" msgid "Unable to detect a supported package manager on the system"
msgstr "" msgstr ""
#: build.go:116 #: build.go:136
msgid "Error parsing os release" msgid "Error parsing os release"
msgstr "" msgstr ""
#: build.go:137 #: build.go:157
msgid "Error building package" msgid "Error building package"
msgstr "" msgstr ""
#: build.go:144 #: build.go:164
msgid "Error getting working directory" msgid "Error getting working directory"
msgstr "" msgstr ""
#: build.go:153 #: build.go:173
msgid "Error moving the package" msgid "Error moving the package"
msgstr "" msgstr ""
@ -321,57 +329,57 @@ msgstr ""
msgid "Compressing package" msgid "Compressing package"
msgstr "" msgstr ""
#: pkg/build/build.go:341 #: pkg/build/build.go:359
msgid "" msgid ""
"Your system's CPU architecture doesn't match this package. Do you want to " "Your system's CPU architecture doesn't match this package. Do you want to "
"build anyway?" "build anyway?"
msgstr "" msgstr ""
#: pkg/build/build.go:355 #: pkg/build/build.go:373
msgid "This package is already installed" msgid "This package is already installed"
msgstr "" msgstr ""
#: pkg/build/build.go:379 #: pkg/build/build.go:397
msgid "Installing build dependencies" msgid "Installing build dependencies"
msgstr "" msgstr ""
#: pkg/build/build.go:390 #: pkg/build/build.go:408
msgid "Installing dependencies" msgid "Installing dependencies"
msgstr "" msgstr ""
#: pkg/build/build.go:431 #: pkg/build/build.go:449
msgid "The checksums array must be the same length as sources" msgid "The checksums array must be the same length as sources"
msgstr "" msgstr ""
#: pkg/build/build.go:482 #: pkg/build/build.go:500
msgid "Would you like to remove the build dependencies?" msgid "Would you like to remove the build dependencies?"
msgstr "" msgstr ""
#: pkg/build/build.go:519 #: pkg/build/build.go:537
msgid "Executing version()" msgid "Executing version()"
msgstr "" msgstr ""
#: pkg/build/build.go:539 #: pkg/build/build.go:557
msgid "Updating version" msgid "Updating version"
msgstr "" msgstr ""
#: pkg/build/build.go:544 #: pkg/build/build.go:562
msgid "Executing prepare()" msgid "Executing prepare()"
msgstr "" msgstr ""
#: pkg/build/build.go:554 #: pkg/build/build.go:572
msgid "Executing build()" msgid "Executing build()"
msgstr "" msgstr ""
#: pkg/build/build.go:570 pkg/build/build.go:598 #: pkg/build/build.go:588 pkg/build/build.go:616
msgid "Executing %s()" msgid "Executing %s()"
msgstr "" msgstr ""
#: pkg/build/build.go:657 #: pkg/build/build.go:675
msgid "Error installing native packages" msgid "Error installing native packages"
msgstr "" msgstr ""
#: pkg/build/build.go:683 #: pkg/build/build.go:701
msgid "Error installing package" msgid "Error installing package"
msgstr "" msgstr ""

@ -16,49 +16,57 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Gtranslator 47.1\n" "X-Generator: Gtranslator 47.1\n"
#: build.go:43 #: build.go:44
msgid "Build a local package" msgid "Build a local package"
msgstr "Сборка локального пакета" msgstr "Сборка локального пакета"
#: build.go:49 #: build.go:50
msgid "Path to the build script" msgid "Path to the build script"
msgstr "Путь к скрипту сборки" 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)" msgid "Name of the package to build and its repo (example: default/go-bin)"
msgstr "Имя пакета для сборки и его репозиторий (пример: default/go-bin)" msgstr "Имя пакета для сборки и его репозиторий (пример: default/go-bin)"
#: build.go:59 #: build.go:65
msgid "" msgid ""
"Build package from scratch even if there's an already built package available" "Build package from scratch even if there's an already built package available"
msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет" msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет"
#: build.go:69 #: build.go:75
msgid "Error db init" msgid "Error db init"
msgstr "" msgstr ""
#: build.go:102 #: build.go:104
msgid "Package not found"
msgstr ""
#: build.go:122
msgid "Error pulling repositories" msgid "Error pulling repositories"
msgstr "Ошибка при извлечении репозиториев" msgstr "Ошибка при извлечении репозиториев"
#: build.go:110 #: build.go:130
msgid "Unable to detect a supported package manager on the system" msgid "Unable to detect a supported package manager on the system"
msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе" msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе"
#: build.go:116 #: build.go:136
#, fuzzy #, fuzzy
msgid "Error parsing os release" msgid "Error parsing os release"
msgstr "Ошибка при разборе файла выпуска операционной системы" msgstr "Ошибка при разборе файла выпуска операционной системы"
#: build.go:137 #: build.go:157
msgid "Error building package" msgid "Error building package"
msgstr "Ошибка при сборке пакета" msgstr "Ошибка при сборке пакета"
#: build.go:144 #: build.go:164
msgid "Error getting working directory" msgid "Error getting working directory"
msgstr "Ошибка при получении рабочего каталога" msgstr "Ошибка при получении рабочего каталога"
#: build.go:153 #: build.go:173
msgid "Error moving the package" msgid "Error moving the package"
msgstr "Ошибка при перемещении пакета" msgstr "Ошибка при перемещении пакета"
@ -336,7 +344,7 @@ msgstr "Сборка метаданных пакета"
msgid "Compressing package" msgid "Compressing package"
msgstr "Сжатие пакета" msgstr "Сжатие пакета"
#: pkg/build/build.go:341 #: pkg/build/build.go:359
msgid "" msgid ""
"Your system's CPU architecture doesn't match this package. Do you want to " "Your system's CPU architecture doesn't match this package. Do you want to "
"build anyway?" "build anyway?"
@ -344,52 +352,52 @@ msgstr ""
"Архитектура процессора вашей системы не соответствует этому пакету. Вы все " "Архитектура процессора вашей системы не соответствует этому пакету. Вы все "
"равно хотите выполнить сборку?" "равно хотите выполнить сборку?"
#: pkg/build/build.go:355 #: pkg/build/build.go:373
msgid "This package is already installed" msgid "This package is already installed"
msgstr "Этот пакет уже установлен" msgstr "Этот пакет уже установлен"
#: pkg/build/build.go:379 #: pkg/build/build.go:397
msgid "Installing build dependencies" msgid "Installing build dependencies"
msgstr "Установка зависимостей сборки" msgstr "Установка зависимостей сборки"
#: pkg/build/build.go:390 #: pkg/build/build.go:408
msgid "Installing dependencies" msgid "Installing dependencies"
msgstr "Установка зависимостей" msgstr "Установка зависимостей"
#: pkg/build/build.go:431 #: pkg/build/build.go:449
msgid "The checksums array must be the same length as sources" msgid "The checksums array must be the same length as sources"
msgstr "Массив контрольных сумм должен быть той же длины, что и источники" msgstr "Массив контрольных сумм должен быть той же длины, что и источники"
#: pkg/build/build.go:482 #: pkg/build/build.go:500
msgid "Would you like to remove the build dependencies?" msgid "Would you like to remove the build dependencies?"
msgstr "Хотели бы вы удалить зависимости сборки?" msgstr "Хотели бы вы удалить зависимости сборки?"
#: pkg/build/build.go:519 #: pkg/build/build.go:537
msgid "Executing version()" msgid "Executing version()"
msgstr "Исполнение версия()" msgstr "Исполнение версия()"
#: pkg/build/build.go:539 #: pkg/build/build.go:557
msgid "Updating version" msgid "Updating version"
msgstr "Обновление версии" msgstr "Обновление версии"
#: pkg/build/build.go:544 #: pkg/build/build.go:562
msgid "Executing prepare()" msgid "Executing prepare()"
msgstr "Исполнение prepare()" msgstr "Исполнение prepare()"
#: pkg/build/build.go:554 #: pkg/build/build.go:572
msgid "Executing build()" msgid "Executing build()"
msgstr "Исполнение build()" msgstr "Исполнение build()"
#: pkg/build/build.go:570 pkg/build/build.go:598 #: pkg/build/build.go:588 pkg/build/build.go:616
#, fuzzy #, fuzzy
msgid "Executing %s()" msgid "Executing %s()"
msgstr "Исполнение files()" msgstr "Исполнение files()"
#: pkg/build/build.go:657 #: pkg/build/build.go:675
msgid "Error installing native packages" msgid "Error installing native packages"
msgstr "Ошибка при установке нативных пакетов" msgstr "Ошибка при установке нативных пакетов"
#: pkg/build/build.go:683 #: pkg/build/build.go:701
msgid "Error installing package" msgid "Error installing package"
msgstr "Ошибка при установке пакета" msgstr "Ошибка при установке пакета"

@ -266,14 +266,32 @@ func (b *Builder) executeFirstPass(
} }
dec := decoder.New(b.info, runner) // Создаём новый декодер 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 var vars types.BuildVars
if b.opts.Package == "" { if len(pkgs.Names) == 1 {
err = dec.DecodeVars(&vars) // Декодируем переменные err = dec.DecodeVars(&vars) // Декодируем переменные
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &vars, nil return &vars, nil
} }
if b.opts.Package == "" {
return nil, errors.New("script has multiple packages but package is not specified")
}
var preVars types.BuildVarsPre var preVars types.BuildVarsPre
funcName := fmt.Sprintf("meta_%s", b.opts.Package) funcName := fmt.Sprintf("meta_%s", b.opts.Package)
meta, ok := dec.GetFuncSub(funcName) meta, ok := dec.GetFuncSub(funcName)

@ -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 <http://www.gnu.org/licenses/>.
info() { info() {
echo $'\x1b[32m[ИНФО]\x1b[0m' $@ echo $'\x1b[32m[ИНФО]\x1b[0m' $@
} }