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"
"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")
}

@ -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

@ -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 ""

@ -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 "Ошибка при установке пакета"

@ -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)

@ -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() {
echo $'\x1b[32m[ИНФО]\x1b[0m' $@
}