diff --git a/assets/i18n-ru-badge.svg b/assets/i18n-ru-badge.svg index 2a5d418..b447b28 100644 --- a/assets/i18n-ru-badge.svg +++ b/assets/i18n-ru-badge.svg @@ -12,7 +12,7 @@ ru translate ru translate - 100.00% - 100.00% + 97.00% + 97.00% diff --git a/internal/build/build.go b/internal/build/build.go index e8037f7..f9ee734 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -565,79 +565,173 @@ func (b *Builder) BuildALRDeps( }, depends []string, ) (buildDeps []*BuiltDep, repoDeps []string, err error) { - if len(depends) > 0 { - slog.Info(gotext.Get("Installing dependencies")) - - found, notFound, err := b.repos.FindPkgs(ctx, depends) // Поиск зависимостей - if err != nil { - return nil, nil, fmt.Errorf("failed FindPkgs: %w", err) - } - repoDeps = notFound - - // Если для некоторых пакетов есть несколько опций, упрощаем их все в один срез - // Для зависимостей указываем isDependency = true - pkgs := cliutils.FlattenPkgsWithContext( - ctx, - found, - "install", - input.BuildOpts().Interactive, - true, - ) - - pkgs, err = b.installerExecutor.FilterPackagesByVersion(ctx, pkgs, input.OSRelease()) - if err != nil { - return nil, nil, fmt.Errorf("failed to filter packages by version: %w", err) - } - - type item struct { - pkg *alrsh.Package - packages []string - } - pkgsMap := make(map[string]*item) - for _, pkg := range pkgs { - name := pkg.BasePkgName - if name == "" { - name = pkg.Name - } - if pkgsMap[name] == nil { - pkgsMap[name] = &item{ - pkg: &pkg, - } - } - pkgsMap[name].packages = append( - pkgsMap[name].packages, - pkg.Name, - ) - } - - for basePkgName := range pkgsMap { - pkg := pkgsMap[basePkgName].pkg - res, err := b.BuildPackageFromDb( - ctx, - &BuildPackageFromDbArgs{ - Package: pkg, - Packages: pkgsMap[basePkgName].packages, - BuildArgs: BuildArgs{ - Opts: input.BuildOpts(), - Info: input.OSRelease(), - PkgFormat_: input.PkgFormat(), - }, - }, - ) - if err != nil { - return nil, nil, fmt.Errorf("failed build package from db: %w", err) - } - - buildDeps = append(buildDeps, res...) - } + if len(depends) == 0 { + return nil, nil, nil + } + + slog.Info(gotext.Get("Installing dependencies")) + + // Шаг 1: Рекурсивно разрешаем ВСЕ зависимости + depTree, systemDeps, err := b.ResolveDependencyTree(ctx, input, depends) + if err != nil { + return nil, nil, fmt.Errorf("failed to resolve dependency tree: %w", err) + } + + // Системные зависимости возвращаем как repoDeps + repoDeps = systemDeps + + // Шаг 2: Собираем список всех пакетов из дерева для топологической сортировки + allFound := make(map[string][]alrsh.Package) + for baseName, node := range depTree { + allFound[baseName] = []alrsh.Package{*node.Package} + } + + // Шаг 3: Топологическая сортировка (от корней к листьям) + sortedPkgs, err := TopologicalSort(depTree, allFound) + if err != nil { + return nil, nil, fmt.Errorf("failed to sort dependencies: %w", err) + } + + // Шаг 4: Собираем пакеты в правильном порядке, проверяя кеш + for _, basePkgName := range sortedPkgs { + node := depTree[basePkgName] + if node == nil { + continue + } + + pkg := node.Package + + // Находим ВСЕ подпакеты с этим BasePkgName + allSubpkgs, err := b.findAllSubpackages(ctx, basePkgName, pkg.Repository) + if err != nil { + return nil, nil, fmt.Errorf("failed to find subpackages for %s: %w", basePkgName, err) + } + + // Проверяем кеш для ВСЕХ подпакетов + scriptInfo := b.scriptResolver.ResolveScript(ctx, pkg) + buildInput := &BuildInput{ + script: scriptInfo.Script, + repository: scriptInfo.Repository, + packages: allSubpkgs, + pkgFormat: input.PkgFormat(), + opts: input.BuildOpts(), + info: input.OSRelease(), + } + + cachedDeps, allInCache, err := b.checkCacheForAllSubpackages(ctx, buildInput, basePkgName, allSubpkgs) + if err != nil { + return nil, nil, err + } + + if allInCache { + // Все подпакеты в кеше, используем их + buildDeps = append(buildDeps, cachedDeps...) + continue + } + + // Собираем пакет (без рекурсивной сборки зависимостей, так как они уже собраны) + res, err := b.BuildPackageFromDb( + ctx, + &BuildPackageFromDbArgs{ + Package: pkg, + Packages: allSubpkgs, + BuildArgs: BuildArgs{ + Opts: input.BuildOpts(), + Info: input.OSRelease(), + PkgFormat_: input.PkgFormat(), + }, + }, + ) + if err != nil { + return nil, nil, fmt.Errorf("failed build package from db: %w", err) + } + + buildDeps = append(buildDeps, res...) } - repoDeps = removeDuplicates(repoDeps) buildDeps = removeDuplicates(buildDeps) return buildDeps, repoDeps, nil } +// findAllSubpackages находит все подпакеты для базового пакета +func (b *Builder) findAllSubpackages(ctx context.Context, basePkgName, repository string) ([]string, error) { + // Запрашиваем все пакеты с этим basepkg_name + pkgs, _, err := b.repos.FindPkgs(ctx, []string{basePkgName}) + if err != nil { + return nil, err + } + + var subpkgs []string + seen := make(map[string]bool) + + for _, pkgList := range pkgs { + for _, pkg := range pkgList { + // Проверяем, что это пакет из нужного репозитория + if pkg.Repository == repository { + pkgBase := pkg.BasePkgName + if pkgBase == "" { + pkgBase = pkg.Name + } + + // Добавляем только если это пакет с нужным BasePkgName + if pkgBase == basePkgName && !seen[pkg.Name] { + subpkgs = append(subpkgs, pkg.Name) + seen[pkg.Name] = true + } + } + } + } + + return subpkgs, nil +} + +// checkCacheForAllSubpackages проверяет кеш для всех подпакетов +func (b *Builder) checkCacheForAllSubpackages( + ctx context.Context, + buildInput *BuildInput, + basePkgName string, + subpkgs []string, +) ([]*BuiltDep, bool, error) { + var cachedDeps []*BuiltDep + allInCache := true + + // Получаем информацию обо всех подпакетах + pkgsInfo, _, err := b.repos.FindPkgs(ctx, subpkgs) + if err != nil { + return nil, false, fmt.Errorf("failed to find subpackages info: %w", err) + } + + for _, pkgName := range subpkgs { + var pkgForCheck *alrsh.Package + + // Находим Package для подпакета + if pkgList, ok := pkgsInfo[pkgName]; ok && len(pkgList) > 0 { + pkgForCheck = &pkgList[0] + } + + if pkgForCheck != nil { + pkgPath, found, err := b.cacheExecutor.CheckForBuiltPackage(ctx, buildInput, pkgForCheck) + if err != nil { + return nil, false, fmt.Errorf("failed to check cache: %w", err) + } + + if found { + slog.Info(gotext.Get("Using cached package"), "name", pkgName, "path", pkgPath) + cachedDeps = append(cachedDeps, &BuiltDep{ + Name: pkgName, + Path: pkgPath, + }) + } else { + allInCache = false + break + } + } + } + + return cachedDeps, allInCache && len(cachedDeps) > 0, nil +} + func (i *Builder) installBuildDeps( ctx context.Context, input interface { diff --git a/internal/build/cache.go b/internal/build/cache.go index 2453090..ac5c474 100644 --- a/internal/build/cache.go +++ b/internal/build/cache.go @@ -40,7 +40,12 @@ func (c *Cache) CheckForBuiltPackage( return "", false, err } - pkgPath := filepath.Join(getBaseDir(c.cfg, vars.Name), filename) + // Для подпакетов используем BasePkgName, чтобы искать в правильной директории + baseName := vars.BasePkgName + if baseName == "" { + baseName = vars.Name + } + pkgPath := filepath.Join(getBaseDir(c.cfg, baseName), filename) _, err = os.Stat(pkgPath) if err != nil { diff --git a/internal/build/dependency_tree.go b/internal/build/dependency_tree.go new file mode 100644 index 0000000..0612ef5 --- /dev/null +++ b/internal/build/dependency_tree.go @@ -0,0 +1,193 @@ +// ALR - Any Linux Repository +// Copyright (C) 2025 The ALR Authors +// +// 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 . + +package build + +import ( + "context" + "fmt" + + "gitea.plemya-x.ru/Plemya-x/ALR/pkg/alrsh" +) + +// DependencyNode представляет узел в дереве зависимостей +type DependencyNode struct { + Package *alrsh.Package + BasePkgName string + Dependencies []string // Имена зависимостей +} + +// ResolveDependencyTree рекурсивно разрешает все зависимости и возвращает +// плоский список всех уникальных пакетов, необходимых для сборки +// и список системных зависимостей (не найденных в ALR-репозиториях) +func (b *Builder) ResolveDependencyTree( + ctx context.Context, + input interface { + OsInfoProvider + PkgFormatProvider + }, + initialPkgs []string, +) (map[string]*DependencyNode, []string, error) { + resolved := make(map[string]*DependencyNode) + visited := make(map[string]bool) + systemDeps := make(map[string]bool) // Для дедупликации системных зависимостей + + var resolve func(pkgNames []string) error + resolve = func(pkgNames []string) error { + if len(pkgNames) == 0 { + return nil + } + + // Находим пакеты + found, notFound, err := b.repos.FindPkgs(ctx, pkgNames) + if err != nil { + return fmt.Errorf("failed to find packages: %w", err) + } + + // Собираем системные зависимости (не найденные в ALR) + for _, pkgName := range notFound { + systemDeps[pkgName] = true + } + + // Обрабатываем найденные пакеты + for pkgName, pkgList := range found { + if visited[pkgName] { + continue + } + visited[pkgName] = true + + // Берем первый пакет из списка (или можно добавить выбор пользователя) + if len(pkgList) == 0 { + continue + } + + pkg := pkgList[0] + + // Определяем базовое имя пакета + baseName := pkg.BasePkgName + if baseName == "" { + baseName = pkg.Name + } + + // Если уже обработали этот базовый пакет, пропускаем + if resolved[baseName] != nil { + continue + } + + // Получаем зависимости для этого дистрибутива + // Пакет из БД уже содержит разрешенные значения для текущего дистрибутива + deps := pkg.Depends.Resolved() + buildDeps := pkg.BuildDepends.Resolved() + + // Объединяем зависимости + allDeps := append([]string{}, deps...) + allDeps = append(allDeps, buildDeps...) + + // Добавляем узел в resolved + resolved[baseName] = &DependencyNode{ + Package: &pkg, + BasePkgName: baseName, + Dependencies: allDeps, + } + + // Рекурсивно разрешаем зависимости + if len(allDeps) > 0 { + if err := resolve(allDeps); err != nil { + return err + } + } + } + + return nil + } + + // Начинаем разрешение с начальных пакетов + if err := resolve(initialPkgs); err != nil { + return nil, nil, err + } + + // Преобразуем map в слайс для системных зависимостей + var systemDepsList []string + for dep := range systemDeps { + systemDepsList = append(systemDepsList, dep) + } + + return resolved, systemDepsList, nil +} + +// TopologicalSort выполняет топологическую сортировку пакетов по зависимостям +// Возвращает список базовых имен пакетов в порядке сборки (от корней к листьям) +func TopologicalSort(nodes map[string]*DependencyNode, allPkgs map[string][]alrsh.Package) ([]string, error) { + // Список для результата + var result []string + + // Множество посещенных узлов + visited := make(map[string]bool) + + // Множество узлов в текущем пути (для обнаружения циклов) + inStack := make(map[string]bool) + + var visit func(basePkgName string) error + visit = func(basePkgName string) error { + if visited[basePkgName] { + return nil + } + + if inStack[basePkgName] { + return fmt.Errorf("circular dependency detected: %s", basePkgName) + } + + node := nodes[basePkgName] + if node == nil { + // Это системный пакет, игнорируем + return nil + } + + inStack[basePkgName] = true + + // Посещаем все зависимости + for _, dep := range node.Dependencies { + // Находим базовое имя для зависимости + depBaseName := dep + + // Проверяем, есть ли этот пакет в allPkgs + if pkgs, ok := allPkgs[dep]; ok && len(pkgs) > 0 { + if pkgs[0].BasePkgName != "" { + depBaseName = pkgs[0].BasePkgName + } + } + + if err := visit(depBaseName); err != nil { + return err + } + } + + inStack[basePkgName] = false + visited[basePkgName] = true + result = append(result, basePkgName) + + return nil + } + + // Посещаем все узлы + for basePkgName := range nodes { + if err := visit(basePkgName); err != nil { + return nil, err + } + } + + return result, nil +} diff --git a/internal/build/dirs.go b/internal/build/dirs.go index 13408bb..ef9991e 100644 --- a/internal/build/dirs.go +++ b/internal/build/dirs.go @@ -42,6 +42,15 @@ func getDirs( cfg Config, scriptPath string, basePkg string, +) (types.Directories, error) { + return getDirsForPackage(cfg, scriptPath, basePkg, "") +} + +func getDirsForPackage( + cfg Config, + scriptPath string, + basePkg string, + packageName string, ) (types.Directories, error) { pkgsDir := cfg.GetPaths().PkgsDir @@ -50,10 +59,18 @@ func getDirs( return types.Directories{}, err } baseDir := filepath.Join(pkgsDir, basePkg) + + // Для подпакетов используем отдельную директорию pkg_<имя_подпакета> + // Для обычных пакетов используем просто pkg + pkgDirName := "pkg" + if packageName != "" { + pkgDirName = "pkg_" + packageName + } + return types.Directories{ BaseDir: getBaseDir(cfg, basePkg), SrcDir: getSrcDir(cfg, basePkg), - PkgDir: filepath.Join(baseDir, "pkg"), + PkgDir: filepath.Join(baseDir, pkgDirName), ScriptDir: getScriptDir(scriptPath), }, nil } diff --git a/internal/build/script_executor.go b/internal/build/script_executor.go index 77573c1..d73b200 100644 --- a/internal/build/script_executor.go +++ b/internal/build/script_executor.go @@ -130,12 +130,34 @@ func (e *LocalScriptExecutor) ExecuteSecondPass( packageName = vars.Name } + // Для каждого подпакета создаём отдельную директорию + pkgDirs, err := getDirsForPackage(e.cfg, sf.Path(), basePkg, packageName) + if err != nil { + return nil, err + } + + // Создаём директорию для подпакета + if err := os.MkdirAll(pkgDirs.PkgDir, 0o755); err != nil { + return nil, err + } + + // Обновляем переменную окружения $pkgdir для текущего подпакета + setPkgdirCmd := fmt.Sprintf("pkgdir='%s'", pkgDirs.PkgDir) + setPkgdirScript, err := syntax.NewParser().Parse(strings.NewReader(setPkgdirCmd), "") + if err != nil { + return nil, err + } + err = runner.Run(ctx, setPkgdirScript) + if err != nil { + return nil, err + } + pkgFormat := input.pkgFormat funcOut, err := e.ExecutePackageFunctions( ctx, dec, - dirs, + pkgDirs, packageName, ) if err != nil { @@ -148,7 +170,7 @@ func (e *LocalScriptExecutor) ExecuteSecondPass( ctx, input, vars, - dirs, + pkgDirs, append( repoDeps, GetBuiltName(builtDeps)..., @@ -165,7 +187,7 @@ func (e *LocalScriptExecutor) ExecuteSecondPass( } pkgName := packager.ConventionalFileName(pkgInfo) // Получаем имя файла пакета - pkgPath := filepath.Join(dirs.BaseDir, pkgName) // Определяем путь к пакету + pkgPath := filepath.Join(pkgDirs.BaseDir, pkgName) // Определяем путь к пакету slog.Info(gotext.Get("Creating package file"), "path", pkgPath, "name", pkgName) diff --git a/internal/translations/default.pot b/internal/translations/default.pot index d5588e5..5d2a8ba 100644 --- a/internal/translations/default.pot +++ b/internal/translations/default.pot @@ -34,27 +34,31 @@ msgstr "" msgid "Error getting working directory" msgstr "" -#: build.go:117 +#: build.go:111 msgid "Cannot get absolute script path" msgstr "" -#: build.go:143 +#: build.go:137 msgid "Package not found" msgstr "" -#: build.go:156 +#: build.go:150 msgid "Nothing to build" msgstr "" -#: build.go:213 +#: build.go:195 msgid "Error building package" msgstr "" -#: build.go:220 +#: build.go:203 +msgid "Package file already moved or removed, skipping" +msgstr "" + +#: build.go:209 msgid "Error moving the package" msgstr "" -#: build.go:224 +#: build.go:213 msgid "Done" msgstr "" @@ -62,71 +66,123 @@ msgstr "" msgid "Manage config" msgstr "" -#: config.go:48 +#: config.go:50 +msgid "Shows a list of commands or help for one command" +msgstr "" + +#: config.go:66 msgid "Show config" msgstr "" -#: config.go:84 +#: config.go:103 msgid "Set config value" msgstr "" -#: config.go:85 +#: config.go:104 msgid " " msgstr "" -#: config.go:118 config.go:126 +#: config.go:137 config.go:145 config.go:162 msgid "invalid boolean value for %s: %s" msgstr "" -#: config.go:141 +#: config.go:166 msgid "use 'repo add/remove' commands to manage repositories" msgstr "" -#: config.go:143 config.go:221 +#: config.go:168 config.go:248 msgid "unknown config key: %s" msgstr "" -#: config.go:147 +#: config.go:172 msgid "failed to save config" msgstr "" -#: config.go:150 +#: config.go:175 msgid "Successfully set %s = %s" msgstr "" -#: config.go:159 +#: config.go:184 msgid "Get config value" msgstr "" -#: config.go:160 +#: config.go:185 msgid "" msgstr "" -#: fix.go:39 +#: fix.go:55 msgid "Attempt to fix problems with ALR" msgstr "" -#: fix.go:60 -msgid "Clearing cache directory" -msgstr "" - -#: fix.go:64 -msgid "Unable to open cache directory" -msgstr "" - -#: fix.go:70 -msgid "Unable to read cache directory contents" +#: fix.go:75 +msgid "Clearing cache and temporary directories" msgstr "" #: fix.go:82 +msgid "Cache directory does not exist, will create it" +msgstr "" + +#: fix.go:84 +msgid "Unable to open cache directory" +msgstr "" + +#: fix.go:91 +msgid "Unable to read cache directory contents" +msgstr "" + +#: fix.go:106 +msgid "Unable to remove cache item (%s) as current user, trying with sudo" +msgstr "" + +#: fix.go:111 msgid "Unable to remove cache item (%s)" msgstr "" -#: fix.go:86 +#: fix.go:119 +msgid "Clearing temporary directory" +msgstr "" + +#: fix.go:126 +msgid "Unable to remove temporary directory as current user, trying with sudo" +msgstr "" + +#: fix.go:129 +msgid "Unable to remove temporary directory" +msgstr "" + +#: fix.go:137 +msgid "Unable to create temporary directory" +msgstr "" + +#: fix.go:144 +msgid "Unable to create download directory" +msgstr "" + +#: fix.go:151 +msgid "Unable to create packages directory" +msgstr "" + +#: fix.go:156 +msgid "Fixing permissions on temporary files" +msgstr "" + +#: fix.go:164 +msgid "Unable to fix file ownership" +msgstr "" + +#: fix.go:169 +msgid "Unable to fix file permissions" +msgstr "" + +#: fix.go:174 msgid "Rebuilding cache" msgstr "" -#: fix.go:90 +#: fix.go:177 +msgid "Creating cache directory" +msgstr "" + +#: fix.go:180 msgid "Unable to create new cache directory" msgstr "" @@ -138,55 +194,67 @@ msgstr "" msgid "Generate a ALR script for a pip module" msgstr "" +#: gen.go:66 +msgid "Generate a ALR script for an AUR package" +msgstr "" + +#: gen.go:72 +msgid "Name of the AUR package" +msgstr "" + +#: gen.go:77 +msgid "Version of the package (optional, uses latest if not specified)" +msgstr "" + #: helper.go:42 msgid "List all the available helper commands" msgstr "" -#: helper.go:54 +#: helper.go:69 msgid "Run a ALR helper command" msgstr "" -#: helper.go:61 +#: helper.go:76 msgid "The directory that the install commands will install to" msgstr "" -#: helper.go:74 helper.go:75 +#: helper.go:89 helper.go:90 msgid "No such helper command" msgstr "" -#: helper.go:85 +#: helper.go:100 msgid "Error parsing os-release file" msgstr "" -#: info.go:42 +#: info.go:41 msgid "Print information about a package" msgstr "" -#: info.go:47 +#: info.go:46 msgid "Show all information, not just for the current distro" msgstr "" -#: info.go:68 +#: info.go:64 msgid "Error getting packages" msgstr "" -#: info.go:83 +#: info.go:77 msgid "Command info expected at least 1 argument, got %d" msgstr "" -#: info.go:104 +#: info.go:98 msgid "Error finding packages" msgstr "" -#: info.go:118 +#: info.go:112 msgid "Can't detect system language" msgstr "" -#: info.go:134 +#: info.go:128 msgid "Error resolving overrides" msgstr "" -#: info.go:143 +#: info.go:137 msgid "Error encoding script variables" msgstr "" @@ -198,43 +266,47 @@ msgstr "" msgid "Command install expected at least 1 argument, got %d" msgstr "" -#: install.go:113 +#: install.go:107 msgid "Error when installing the package" msgstr "" -#: install.go:151 +#: install.go:142 msgid "Remove an installed package" msgstr "" -#: install.go:170 +#: install.go:161 msgid "Error listing installed packages" msgstr "" -#: install.go:199 +#: install.go:190 msgid "Command remove expected at least 1 argument, got %d" msgstr "" -#: install.go:214 +#: install.go:205 msgid "Error removing packages" msgstr "" -#: internal/build/build.go:351 +#: internal/build/build.go:342 internal/build/build.go:653 +msgid "Using cached package" +msgstr "" + +#: internal/build/build.go:357 msgid "Building package" msgstr "" -#: internal/build/build.go:380 +#: internal/build/build.go:386 msgid "The checksums array must be the same length as sources" msgstr "" -#: internal/build/build.go:422 +#: internal/build/build.go:438 msgid "Downloading sources" msgstr "" -#: internal/build/build.go:468 +#: internal/build/build.go:484 msgid "Would you like to remove the build dependencies?" msgstr "" -#: internal/build/build.go:546 +#: internal/build/build.go:569 msgid "Installing dependencies" msgstr "" @@ -272,22 +344,68 @@ msgstr "" msgid "Applying FireJail integration" msgstr "" -#: internal/build/script_executor.go:145 +#: internal/build/installer.go:99 +msgid "" +"Package %s is installed with older version %s, will rebuild with version %s" +msgstr "" + +#: internal/build/installer.go:102 +msgid "Package %s is already installed with version %s, skipping build" +msgstr "" + +#: internal/build/installer.go:104 +msgid "" +"Package %s is installed with newer version %s (repo has %s), skipping build" +msgstr "" + +#: internal/build/script_executor.go:167 msgid "Building package metadata" msgstr "" -#: internal/build/script_executor.go:285 +#: internal/build/script_executor.go:192 +msgid "Creating package file" +msgstr "" + +#: internal/build/script_executor.go:196 +msgid "Failed to create package file" +msgstr "" + +#: internal/build/script_executor.go:201 +msgid "Packaging with nfpm" +msgstr "" + +#: internal/build/script_executor.go:204 +msgid "Failed to create package" +msgstr "" + +#: internal/build/script_executor.go:208 +msgid "Package created successfully" +msgstr "" + +#: internal/build/script_executor.go:212 +msgid "Package file not found after creation" +msgstr "" + +#: internal/build/script_executor.go:215 +msgid "Package file verified to exist" +msgstr "" + +#: internal/build/script_executor.go:322 msgid "Executing prepare()" msgstr "" -#: internal/build/script_executor.go:294 +#: internal/build/script_executor.go:331 msgid "Executing build()" msgstr "" -#: internal/build/script_executor.go:323 internal/build/script_executor.go:343 +#: internal/build/script_executor.go:360 internal/build/script_executor.go:380 msgid "Executing %s()" msgstr "" +#: internal/cliutils/app_builder/builder.go:45 +msgid "failed to close db" +msgstr "" + #: internal/cliutils/app_builder/builder.go:75 msgid "Error loading config" msgstr "" @@ -320,23 +438,25 @@ msgstr "" msgid "User chose not to continue after reading script" msgstr "" -#: internal/cliutils/prompt.go:111 +#: internal/cliutils/prompt.go:123 msgid "Error prompting for choice of package" msgstr "" -#: internal/cliutils/prompt.go:135 +#: internal/cliutils/prompt.go:175 msgid "Choose which package to %s" msgstr "" -#: internal/cliutils/prompt.go:156 +#: internal/cliutils/prompt.go:196 msgid "Choose which optional package(s) to install" msgstr "" #: internal/cliutils/template.go:74 internal/cliutils/template.go:93 +#: internal/cliutils/template.go:126 msgid "NAME" msgstr "" #: internal/cliutils/template.go:74 internal/cliutils/template.go:94 +#: internal/cliutils/template.go:126 msgid "USAGE" msgstr "" @@ -344,15 +464,17 @@ msgstr "" msgid "global options" msgstr "" -#: internal/cliutils/template.go:74 +#: internal/cliutils/template.go:74 internal/cliutils/template.go:126 msgid "command" msgstr "" #: internal/cliutils/template.go:74 internal/cliutils/template.go:95 +#: internal/cliutils/template.go:126 msgid "command options" msgstr "" #: internal/cliutils/template.go:74 internal/cliutils/template.go:96 +#: internal/cliutils/template.go:126 msgid "arguments" msgstr "" @@ -361,14 +483,15 @@ msgid "VERSION" msgstr "" #: internal/cliutils/template.go:74 internal/cliutils/template.go:98 +#: internal/cliutils/template.go:126 msgid "DESCRIPTION" msgstr "" -#: internal/cliutils/template.go:74 +#: internal/cliutils/template.go:74 internal/cliutils/template.go:126 msgid "AUTHOR" msgstr "" -#: internal/cliutils/template.go:74 +#: internal/cliutils/template.go:74 internal/cliutils/template.go:126 msgid "COMMANDS" msgstr "" @@ -376,7 +499,7 @@ msgstr "" msgid "GLOBAL OPTIONS" msgstr "" -#: internal/cliutils/template.go:74 +#: internal/cliutils/template.go:74 internal/cliutils/template.go:126 msgid "COPYRIGHT" msgstr "" @@ -385,6 +508,7 @@ msgid "CATEGORY" msgstr "" #: internal/cliutils/template.go:99 internal/cliutils/template.go:100 +#: internal/cliutils/template.go:126 msgid "OPTIONS" msgstr "" @@ -394,11 +518,15 @@ msgid "" "instead!" msgstr "" -#: internal/db/db.go:76 +#: internal/db/db.go:67 +msgid "Cache directory does not exist, creating it" +msgstr "" + +#: internal/db/db.go:95 msgid "Database version mismatch; resetting" msgstr "" -#: internal/db/db.go:82 +#: internal/db/db.go:101 msgid "" "Database version does not exist. Run alr fix if something isn't working." msgstr "" @@ -433,43 +561,55 @@ msgid "" "updating ALR if something doesn't work." msgstr "" -#: internal/utils/cmd.go:97 -msgid "Error on dropping capabilities" +#: internal/repos/pull.go:423 +msgid "Failed to get deleted file from old commit" msgstr "" -#: internal/utils/cmd.go:164 -msgid "You need to be a %s member to perform this action" +#: internal/repos/pull.go:429 +msgid "Failed to read deleted file" msgstr "" -#: internal/utils/cmd.go:200 +#: internal/repos/pull.go:448 +msgid "Failed to get updated file from new commit" +msgstr "" + +#: internal/repos/pull.go:454 +msgid "Failed to read updated file" +msgstr "" + +#: internal/repos/pull.go:508 +msgid "No alr.sh files found in repository" +msgstr "" + +#: internal/utils/cmd.go:54 msgid "You need to be root to perform this action" msgstr "" -#: list.go:45 +#: list.go:44 msgid "List ALR repo packages" msgstr "" -#: list.go:59 +#: list.go:58 msgid "Format output using a Go template" msgstr "" -#: list.go:91 +#: list.go:87 msgid "Error getting packages for upgrade" msgstr "" -#: list.go:94 +#: list.go:90 msgid "No packages for upgrade" msgstr "" -#: list.go:104 list.go:201 +#: list.go:100 list.go:197 msgid "Error parsing format template" msgstr "" -#: list.go:110 list.go:205 +#: list.go:106 list.go:201 msgid "Error executing template" msgstr "" -#: list.go:164 +#: list.go:160 msgid "Failed to parse release" msgstr "" @@ -477,19 +617,19 @@ msgstr "" msgid "Print the current ALR version and exit" msgstr "" -#: main.go:61 +#: main.go:77 msgid "Arguments to be passed on to the package manager" msgstr "" -#: main.go:67 +#: main.go:83 msgid "Enable interactive questions and prompts" msgstr "" -#: main.go:148 +#: main.go:165 msgid "Show help" msgstr "" -#: main.go:152 +#: main.go:169 msgid "Error while running app" msgstr "" @@ -525,124 +665,124 @@ msgstr "" msgid "Manage repos" msgstr "" -#: repo.go:56 repo.go:625 +#: repo.go:74 repo.go:658 msgid "Remove an existing repository" msgstr "" -#: repo.go:58 repo.go:521 +#: repo.go:76 repo.go:554 msgid "" msgstr "" -#: repo.go:103 repo.go:465 repo.go:568 +#: repo.go:121 repo.go:498 repo.go:601 msgid "Repo \"%s\" does not exist" msgstr "" -#: repo.go:110 +#: repo.go:128 msgid "Error removing repo directory" msgstr "" -#: repo.go:114 repo.go:195 repo.go:253 repo.go:316 repo.go:389 repo.go:504 -#: repo.go:576 +#: repo.go:132 repo.go:210 repo.go:268 repo.go:331 repo.go:422 repo.go:537 +#: repo.go:609 msgid "Error saving config" msgstr "" -#: repo.go:133 +#: repo.go:148 msgid "Error removing packages from database" msgstr "" -#: repo.go:144 repo.go:595 +#: repo.go:159 repo.go:628 msgid "Add a new repository" msgstr "" -#: repo.go:145 repo.go:270 repo.go:345 repo.go:402 +#: repo.go:160 repo.go:285 repo.go:378 repo.go:435 msgid " " msgstr "" -#: repo.go:170 +#: repo.go:185 msgid "Repo \"%s\" already exists" msgstr "" -#: repo.go:206 +#: repo.go:221 msgid "Set the reference of the repository" msgstr "" -#: repo.go:207 +#: repo.go:222 msgid " " msgstr "" -#: repo.go:269 +#: repo.go:284 msgid "Set the main url of the repository" msgstr "" -#: repo.go:332 +#: repo.go:347 msgid "Manage mirrors of repos" msgstr "" -#: repo.go:344 +#: repo.go:377 msgid "Add a mirror URL to repository" msgstr "" -#: repo.go:401 +#: repo.go:434 msgid "Remove mirror from the repository" msgstr "" -#: repo.go:420 +#: repo.go:453 msgid "Ignore if mirror does not exist" msgstr "" -#: repo.go:425 +#: repo.go:458 msgid "Match partial URL (e.g., github.com instead of full URL)" msgstr "" -#: repo.go:490 +#: repo.go:523 msgid "No mirrors containing \"%s\" found in repo \"%s\"" msgstr "" -#: repo.go:492 +#: repo.go:525 msgid "URL \"%s\" does not exist in repo \"%s\"" msgstr "" -#: repo.go:508 repo.go:580 +#: repo.go:541 repo.go:613 msgid "Removed %d mirrors from repo \"%s\"\n" msgstr "" -#: repo.go:520 +#: repo.go:553 msgid "Remove all mirrors from the repository" msgstr "" -#: repo.go:602 +#: repo.go:635 msgid "Name of the new repo" msgstr "" -#: repo.go:608 +#: repo.go:641 msgid "URL of the new repo" msgstr "" -#: repo.go:632 +#: repo.go:665 msgid "Name of the repo to be deleted" msgstr "" -#: search.go:40 +#: search.go:39 msgid "Search packages" msgstr "" -#: search.go:51 +#: search.go:50 msgid "Search by name" msgstr "" -#: search.go:56 +#: search.go:55 msgid "Search by description" msgstr "" -#: search.go:61 +#: search.go:60 msgid "Search by repository" msgstr "" -#: search.go:66 +#: search.go:65 msgid "Search by provides" msgstr "" -#: search.go:130 +#: search.go:126 msgid "Error while executing search" msgstr "" @@ -650,10 +790,22 @@ msgstr "" msgid "Upgrade all installed packages" msgstr "" -#: upgrade.go:106 upgrade.go:123 +#: upgrade.go:89 +msgid "Updating system packages..." +msgstr "" + +#: upgrade.go:95 +msgid "Error updating system packages" +msgstr "" + +#: upgrade.go:97 +msgid "System packages updated successfully" +msgstr "" + +#: upgrade.go:113 upgrade.go:130 msgid "Error checking for updates" msgstr "" -#: upgrade.go:126 +#: upgrade.go:133 msgid "There is nothing to do." msgstr "" diff --git a/internal/translations/po/ru/default.po b/internal/translations/po/ru/default.po index 9372669..1d10491 100644 --- a/internal/translations/po/ru/default.po +++ b/internal/translations/po/ru/default.po @@ -41,27 +41,31 @@ msgstr "Создайте пакет с нуля, даже если уже име msgid "Error getting working directory" msgstr "Ошибка при получении рабочего каталога" -#: build.go:117 +#: build.go:111 msgid "Cannot get absolute script path" msgstr "Невозможно получить абсолютный путь к скрипту" -#: build.go:143 +#: build.go:137 msgid "Package not found" msgstr "Пакет не найден" -#: build.go:156 +#: build.go:150 msgid "Nothing to build" msgstr "Нечего собирать" -#: build.go:213 +#: build.go:195 msgid "Error building package" msgstr "Ошибка при сборке пакета" -#: build.go:220 +#: build.go:203 +msgid "Package file already moved or removed, skipping" +msgstr "Файл пакета уже перемещён или удалён, пропускаем" + +#: build.go:209 msgid "Error moving the package" msgstr "Ошибка при перемещении пакета" -#: build.go:224 +#: build.go:213 msgid "Done" msgstr "Сделано" @@ -69,71 +73,132 @@ msgstr "Сделано" msgid "Manage config" msgstr "Управление конфигурацией" -#: config.go:48 +#: config.go:50 +msgid "Shows a list of commands or help for one command" +msgstr "Показывает список команд или справку по одной команде" + +#: config.go:66 msgid "Show config" msgstr "Показать конфигурацию" -#: config.go:84 +#: config.go:103 msgid "Set config value" msgstr "Установить значение в конфигурации" -#: config.go:85 +#: config.go:104 msgid " " msgstr "<ключ> <значение>" -#: config.go:118 config.go:126 +#: config.go:137 config.go:145 config.go:162 msgid "invalid boolean value for %s: %s" msgstr "неверное булево значение для %s: %s" -#: config.go:141 +#: config.go:166 msgid "use 'repo add/remove' commands to manage repositories" msgstr "используйте команды 'repo add/remove' для управления репозиториями" -#: config.go:143 config.go:221 +#: config.go:168 config.go:248 msgid "unknown config key: %s" msgstr "неизвестный ключ конфигурации: %s" -#: config.go:147 +#: config.go:172 msgid "failed to save config" msgstr "не удалось сохранить конфигурацию" -#: config.go:150 +#: config.go:175 msgid "Successfully set %s = %s" msgstr "Успешно установлено %s = %s" -#: config.go:159 +#: config.go:184 msgid "Get config value" msgstr "Получить значение из конфигурации" -#: config.go:160 +#: config.go:185 msgid "" msgstr "<ключ>" -#: fix.go:39 +#: fix.go:55 msgid "Attempt to fix problems with ALR" msgstr "Попытка устранить проблемы с ALR" -#: fix.go:60 -msgid "Clearing cache directory" -msgstr "Очистка каталога кэша" +#: fix.go:75 +msgid "Clearing cache and temporary directories" +msgstr "Очистка кэша и временных директорий" -#: fix.go:64 +#: fix.go:82 +msgid "Cache directory does not exist, will create it" +msgstr "" + +#: fix.go:84 msgid "Unable to open cache directory" msgstr "Невозможно открыть каталог кэша" -#: fix.go:70 +#: fix.go:91 msgid "Unable to read cache directory contents" msgstr "Невозможно прочитать содержимое каталога кэша" -#: fix.go:82 +#: fix.go:106 +#, fuzzy +msgid "Unable to remove cache item (%s) as current user, trying with sudo" +msgstr "" +"Невозможно удалить временную директорию от текущего пользователя, попытка " +"через sudo" + +#: fix.go:111 msgid "Unable to remove cache item (%s)" msgstr "Невозможно удалить элемент кэша (%s)" -#: fix.go:86 +#: fix.go:119 +msgid "Clearing temporary directory" +msgstr "Очистка временной директории" + +#: fix.go:126 +msgid "Unable to remove temporary directory as current user, trying with sudo" +msgstr "" +"Невозможно удалить временную директорию от текущего пользователя, попытка " +"через sudo" + +#: fix.go:129 +#, fuzzy +msgid "Unable to remove temporary directory" +msgstr "Невозможно открыть каталог кэша" + +#: fix.go:137 +#, fuzzy +msgid "Unable to create temporary directory" +msgstr "Не удалось создать каталог конфигурации ALR" + +#: fix.go:144 +#, fuzzy +msgid "Unable to create download directory" +msgstr "Не удалось создать каталог конфигурации ALR" + +#: fix.go:151 +#, fuzzy +msgid "Unable to create packages directory" +msgstr "Не удалось создать каталог кэша пакетов" + +#: fix.go:156 +msgid "Fixing permissions on temporary files" +msgstr "Исправление прав доступа к временным файлам" + +#: fix.go:164 +msgid "Unable to fix file ownership" +msgstr "" + +#: fix.go:169 +msgid "Unable to fix file permissions" +msgstr "" + +#: fix.go:174 msgid "Rebuilding cache" msgstr "Восстановление кэша" -#: fix.go:90 +#: fix.go:177 +msgid "Creating cache directory" +msgstr "Создание директории кэша" + +#: fix.go:180 msgid "Unable to create new cache directory" msgstr "Не удалось создать новый каталог кэша" @@ -145,55 +210,69 @@ msgstr "Генерация скрипта ALR из шаблона" msgid "Generate a ALR script for a pip module" msgstr "Генерация скрипта ALR для модуля pip" +#: gen.go:66 +#, fuzzy +msgid "Generate a ALR script for an AUR package" +msgstr "Генерация скрипта ALR из шаблона" + +#: gen.go:72 +#, fuzzy +msgid "Name of the AUR package" +msgstr "Название нового репозитория" + +#: gen.go:77 +msgid "Version of the package (optional, uses latest if not specified)" +msgstr "" + #: helper.go:42 msgid "List all the available helper commands" msgstr "Список всех доступных вспомогательных команды" -#: helper.go:54 +#: helper.go:69 msgid "Run a ALR helper command" msgstr "Запустить вспомогательную команду ALR" -#: helper.go:61 +#: helper.go:76 msgid "The directory that the install commands will install to" msgstr "Каталог, в который будут устанавливать команды установки" -#: helper.go:74 helper.go:75 +#: helper.go:89 helper.go:90 msgid "No such helper command" msgstr "Такой вспомогательной команды нет" -#: helper.go:85 +#: helper.go:100 msgid "Error parsing os-release file" msgstr "Ошибка при разборе файла выпуска операционной системы" -#: info.go:42 +#: info.go:41 msgid "Print information about a package" msgstr "Отобразить информацию о пакете" -#: info.go:47 +#: info.go:46 msgid "Show all information, not just for the current distro" msgstr "Показывать всю информацию, не только для текущего дистрибутива" -#: info.go:68 +#: info.go:64 msgid "Error getting packages" msgstr "Ошибка при получении пакетов" -#: info.go:83 +#: info.go:77 msgid "Command info expected at least 1 argument, got %d" msgstr "Для команды info ожидался хотя бы 1 аргумент, получено %d" -#: info.go:104 +#: info.go:98 msgid "Error finding packages" msgstr "Ошибка при поиске пакетов" -#: info.go:118 +#: info.go:112 msgid "Can't detect system language" msgstr "Ошибка при определении языка системы" -#: info.go:134 +#: info.go:128 msgid "Error resolving overrides" msgstr "Ошибка устранения переорпеделений" -#: info.go:143 +#: info.go:137 msgid "Error encoding script variables" msgstr "Ошибка кодирования переменных скрита" @@ -205,43 +284,47 @@ msgstr "Установить новый пакет" msgid "Command install expected at least 1 argument, got %d" msgstr "Для команды install ожидался хотя бы 1 аргумент, получено %d" -#: install.go:113 +#: install.go:107 msgid "Error when installing the package" msgstr "Ошибка при установке пакета" -#: install.go:151 +#: install.go:142 msgid "Remove an installed package" msgstr "Удалить установленный пакет" -#: install.go:170 +#: install.go:161 msgid "Error listing installed packages" msgstr "Ошибка при составлении списка установленных пакетов" -#: install.go:199 +#: install.go:190 msgid "Command remove expected at least 1 argument, got %d" msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d" -#: install.go:214 +#: install.go:205 msgid "Error removing packages" msgstr "Ошибка при удалении пакетов" -#: internal/build/build.go:351 +#: internal/build/build.go:342 internal/build/build.go:653 +msgid "Using cached package" +msgstr "Используется кешированный пакет" + +#: internal/build/build.go:357 msgid "Building package" msgstr "Сборка пакета" -#: internal/build/build.go:380 +#: internal/build/build.go:386 msgid "The checksums array must be the same length as sources" msgstr "Массив контрольных сумм должен быть той же длины, что и источники" -#: internal/build/build.go:422 +#: internal/build/build.go:438 msgid "Downloading sources" msgstr "Скачивание источников" -#: internal/build/build.go:468 +#: internal/build/build.go:484 msgid "Would you like to remove the build dependencies?" msgstr "Хотели бы вы удалить зависимости сборки?" -#: internal/build/build.go:546 +#: internal/build/build.go:569 msgid "Installing dependencies" msgstr "Установка зависимостей" @@ -283,22 +366,71 @@ msgstr "" msgid "Applying FireJail integration" msgstr "Применение интеграции FireJail" -#: internal/build/script_executor.go:145 +#: internal/build/installer.go:99 +msgid "" +"Package %s is installed with older version %s, will rebuild with version %s" +msgstr "" +"Пакет %s установлен с устаревшей версией %s, будет пересобран с версией %s" + +#: internal/build/installer.go:102 +msgid "Package %s is already installed with version %s, skipping build" +msgstr "Пакет %s уже установлен с версией %s, пропуск сборки" + +#: internal/build/installer.go:104 +msgid "" +"Package %s is installed with newer version %s (repo has %s), skipping build" +msgstr "" +"Пакет %s установлен с более новой версией %s (в репозитории %s), пропуск " +"сборки" + +#: internal/build/script_executor.go:167 msgid "Building package metadata" msgstr "Сборка метаданных пакета" -#: internal/build/script_executor.go:285 +#: internal/build/script_executor.go:192 +msgid "Creating package file" +msgstr "Создание файла пакета" + +#: internal/build/script_executor.go:196 +msgid "Failed to create package file" +msgstr "Не удалось создать файл пакета" + +#: internal/build/script_executor.go:201 +msgid "Packaging with nfpm" +msgstr "Упаковка с помощью nfpm" + +#: internal/build/script_executor.go:204 +msgid "Failed to create package" +msgstr "Не удалось создать пакет" + +#: internal/build/script_executor.go:208 +msgid "Package created successfully" +msgstr "Пакет успешно создан" + +#: internal/build/script_executor.go:212 +msgid "Package file not found after creation" +msgstr "Файл пакета не найден после создания" + +#: internal/build/script_executor.go:215 +msgid "Package file verified to exist" +msgstr "Наличие файла пакета подтверждено" + +#: internal/build/script_executor.go:322 msgid "Executing prepare()" msgstr "Выполнение prepare()" -#: internal/build/script_executor.go:294 +#: internal/build/script_executor.go:331 msgid "Executing build()" msgstr "Выполнение build()" -#: internal/build/script_executor.go:323 internal/build/script_executor.go:343 +#: internal/build/script_executor.go:360 internal/build/script_executor.go:380 msgid "Executing %s()" msgstr "Выполнение %s()" +#: internal/cliutils/app_builder/builder.go:45 +msgid "failed to close db" +msgstr "не удалось закрыть БД" + #: internal/cliutils/app_builder/builder.go:75 msgid "Error loading config" msgstr "Ошибка при загрузке" @@ -331,23 +463,25 @@ msgstr "Продолжить?" msgid "User chose not to continue after reading script" msgstr "Пользователь решил не продолжать после просмотра скрипта" -#: internal/cliutils/prompt.go:111 +#: internal/cliutils/prompt.go:123 msgid "Error prompting for choice of package" msgstr "Ошибка при запросе выбора пакета" -#: internal/cliutils/prompt.go:135 +#: internal/cliutils/prompt.go:175 msgid "Choose which package to %s" msgstr "Выберите, какой пакет использовать для %s" -#: internal/cliutils/prompt.go:156 +#: internal/cliutils/prompt.go:196 msgid "Choose which optional package(s) to install" msgstr "Выберите дополнительные пакеты для установки" #: internal/cliutils/template.go:74 internal/cliutils/template.go:93 +#: internal/cliutils/template.go:126 msgid "NAME" msgstr "НАЗВАНИЕ" #: internal/cliutils/template.go:74 internal/cliutils/template.go:94 +#: internal/cliutils/template.go:126 msgid "USAGE" msgstr "ИСПОЛЬЗОВАНИЕ" @@ -355,15 +489,17 @@ msgstr "ИСПОЛЬЗОВАНИЕ" msgid "global options" msgstr "глобальные опции" -#: internal/cliutils/template.go:74 +#: internal/cliutils/template.go:74 internal/cliutils/template.go:126 msgid "command" msgstr "команда" #: internal/cliutils/template.go:74 internal/cliutils/template.go:95 +#: internal/cliutils/template.go:126 msgid "command options" msgstr "опции команды" #: internal/cliutils/template.go:74 internal/cliutils/template.go:96 +#: internal/cliutils/template.go:126 msgid "arguments" msgstr "аргументы" @@ -372,14 +508,15 @@ msgid "VERSION" msgstr "ВЕРСИЯ" #: internal/cliutils/template.go:74 internal/cliutils/template.go:98 +#: internal/cliutils/template.go:126 msgid "DESCRIPTION" msgstr "ОПИСАНИЕ" -#: internal/cliutils/template.go:74 +#: internal/cliutils/template.go:74 internal/cliutils/template.go:126 msgid "AUTHOR" msgstr "АВТОР" -#: internal/cliutils/template.go:74 +#: internal/cliutils/template.go:74 internal/cliutils/template.go:126 msgid "COMMANDS" msgstr "КОМАНДЫ" @@ -387,7 +524,7 @@ msgstr "КОМАНДЫ" msgid "GLOBAL OPTIONS" msgstr "ГЛОБАЛЬНЫЕ ОПЦИИ" -#: internal/cliutils/template.go:74 +#: internal/cliutils/template.go:74 internal/cliutils/template.go:126 msgid "COPYRIGHT" msgstr "АВТОРСКОЕ ПРАВО" @@ -396,6 +533,7 @@ msgid "CATEGORY" msgstr "КАТЕГОРИЯ" #: internal/cliutils/template.go:99 internal/cliutils/template.go:100 +#: internal/cliutils/template.go:126 msgid "OPTIONS" msgstr "ПАРАМЕТРЫ" @@ -407,11 +545,15 @@ msgstr "" "Эта команда устарела и будет удалена в будущем, используйте вместо нее " "\"%s\"!" -#: internal/db/db.go:76 +#: internal/db/db.go:67 +msgid "Cache directory does not exist, creating it" +msgstr "" + +#: internal/db/db.go:95 msgid "Database version mismatch; resetting" msgstr "Несоответствие версий базы данных; сброс настроек" -#: internal/db/db.go:82 +#: internal/db/db.go:101 msgid "" "Database version does not exist. Run alr fix if something isn't working." msgstr "" @@ -449,43 +591,55 @@ msgstr "" "Минимальная версия ALR для ALR-репозитория выше текущей версии. Попробуйте " "обновить ALR, если что-то не работает." -#: internal/utils/cmd.go:97 -msgid "Error on dropping capabilities" -msgstr "Ошибка при понижении привилегий" +#: internal/repos/pull.go:423 +msgid "Failed to get deleted file from old commit" +msgstr "Не удалось получить удалённый файл из старого коммита" -#: internal/utils/cmd.go:164 -msgid "You need to be a %s member to perform this action" -msgstr "Вы должны быть членом %s чтобы выполнить это" +#: internal/repos/pull.go:429 +msgid "Failed to read deleted file" +msgstr "Не удалось прочитать удалённый файл" -#: internal/utils/cmd.go:200 +#: internal/repos/pull.go:448 +msgid "Failed to get updated file from new commit" +msgstr "Не удалось получить обновлённый файл из нового коммита" + +#: internal/repos/pull.go:454 +msgid "Failed to read updated file" +msgstr "Не удалось прочитать обновлённый файл" + +#: internal/repos/pull.go:508 +msgid "No alr.sh files found in repository" +msgstr "Файлы alr.sh не найдены в репозитории" + +#: internal/utils/cmd.go:54 msgid "You need to be root to perform this action" msgstr "Вы должны быть root чтобы выполнить это" -#: list.go:45 +#: list.go:44 msgid "List ALR repo packages" msgstr "Список пакетов репозитория ALR" -#: list.go:59 +#: list.go:58 msgid "Format output using a Go template" msgstr "Формат выходных данных с использованием шаблона Go" -#: list.go:91 +#: list.go:87 msgid "Error getting packages for upgrade" msgstr "Ошибка при получении пакетов для обновления" -#: list.go:94 +#: list.go:90 msgid "No packages for upgrade" msgstr "Нет пакетов к обновлению" -#: list.go:104 list.go:201 +#: list.go:100 list.go:197 msgid "Error parsing format template" msgstr "Ошибка при разборе шаблона" -#: list.go:110 list.go:205 +#: list.go:106 list.go:201 msgid "Error executing template" msgstr "Ошибка при выполнении шаблона" -#: list.go:164 +#: list.go:160 msgid "Failed to parse release" msgstr "Не удалось разобрать релиз" @@ -493,23 +647,19 @@ msgstr "Не удалось разобрать релиз" msgid "Print the current ALR version and exit" msgstr "Показать текущую версию ALR и выйти" -#: main.go:61 +#: main.go:77 msgid "Arguments to be passed on to the package manager" msgstr "Аргументы, которые будут переданы менеджеру пакетов" -#: main.go:67 +#: main.go:83 msgid "Enable interactive questions and prompts" msgstr "Включение интерактивных вопросов и запросов" -#: main.go:147 +#: main.go:165 msgid "Show help" msgstr "Показать справку" -#: main.go:148 -msgid "Shows a list of commands or help for one command" -msgstr "Показывает список команд или справку по одной команде" - -#: main.go:152 +#: main.go:169 msgid "Error while running app" msgstr "Ошибка при запуске приложения" @@ -545,124 +695,124 @@ msgstr "Скачать все изменённые репозитории" msgid "Manage repos" msgstr "Управление репозиториями" -#: repo.go:56 repo.go:625 +#: repo.go:74 repo.go:658 msgid "Remove an existing repository" msgstr "Удалить существующий репозиторий" -#: repo.go:58 repo.go:521 +#: repo.go:76 repo.go:554 msgid "" msgstr "<имя>" -#: repo.go:103 repo.go:465 repo.go:568 +#: repo.go:121 repo.go:498 repo.go:601 msgid "Repo \"%s\" does not exist" msgstr "Репозиторий \"%s\" не существует" -#: repo.go:110 +#: repo.go:128 msgid "Error removing repo directory" msgstr "Ошибка при удалении каталога репозитория" -#: repo.go:114 repo.go:195 repo.go:253 repo.go:316 repo.go:389 repo.go:504 -#: repo.go:576 +#: repo.go:132 repo.go:210 repo.go:268 repo.go:331 repo.go:422 repo.go:537 +#: repo.go:609 msgid "Error saving config" msgstr "Ошибка при сохранении конфигурации" -#: repo.go:133 +#: repo.go:148 msgid "Error removing packages from database" msgstr "Ошибка при удалении пакетов из базы данных" -#: repo.go:144 repo.go:595 +#: repo.go:159 repo.go:628 msgid "Add a new repository" msgstr "Добавить новый репозиторий" -#: repo.go:145 repo.go:270 repo.go:345 repo.go:402 +#: repo.go:160 repo.go:285 repo.go:378 repo.go:435 msgid " " msgstr "<имя> " -#: repo.go:170 +#: repo.go:185 msgid "Repo \"%s\" already exists" msgstr "Репозиторий \"%s\" уже существует" -#: repo.go:206 +#: repo.go:221 msgid "Set the reference of the repository" msgstr "Установить ссылку на версию репозитория" -#: repo.go:207 +#: repo.go:222 msgid " " msgstr "<имя> <ссылка_на_версию>" -#: repo.go:269 +#: repo.go:284 msgid "Set the main url of the repository" msgstr "Установить главный URL репозитория" -#: repo.go:332 +#: repo.go:347 msgid "Manage mirrors of repos" msgstr "Управление зеркалами репозитория" -#: repo.go:344 +#: repo.go:377 msgid "Add a mirror URL to repository" msgstr "Добавить зеркало репозитория" -#: repo.go:401 +#: repo.go:434 msgid "Remove mirror from the repository" msgstr "Удалить зеркало из репозитория" -#: repo.go:420 +#: repo.go:453 msgid "Ignore if mirror does not exist" msgstr "Игнорировать, если зеркала не существует" -#: repo.go:425 +#: repo.go:458 msgid "Match partial URL (e.g., github.com instead of full URL)" msgstr "Соответствует частичному URL (например, github.com вместо полного URL)" -#: repo.go:490 +#: repo.go:523 msgid "No mirrors containing \"%s\" found in repo \"%s\"" msgstr "В репозитории \"%s\" не найдено зеркал, содержащих \"%s\"" -#: repo.go:492 +#: repo.go:525 msgid "URL \"%s\" does not exist in repo \"%s\"" msgstr "URL \"%s\" не существует в репозитории \"%s\"" -#: repo.go:508 repo.go:580 +#: repo.go:541 repo.go:613 msgid "Removed %d mirrors from repo \"%s\"\n" msgstr "Удалено %d зеркал из репозитория \"%s\"\n" -#: repo.go:520 +#: repo.go:553 msgid "Remove all mirrors from the repository" msgstr "Удалить все зеркала из репозитория" -#: repo.go:602 +#: repo.go:635 msgid "Name of the new repo" msgstr "Название нового репозитория" -#: repo.go:608 +#: repo.go:641 msgid "URL of the new repo" msgstr "URL-адрес нового репозитория" -#: repo.go:632 +#: repo.go:665 msgid "Name of the repo to be deleted" msgstr "Название репозитория для удаления" -#: search.go:40 +#: search.go:39 msgid "Search packages" msgstr "Поиск пакетов" -#: search.go:51 +#: search.go:50 msgid "Search by name" msgstr "Искать по имени" -#: search.go:56 +#: search.go:55 msgid "Search by description" msgstr "Искать по описанию" -#: search.go:61 +#: search.go:60 msgid "Search by repository" msgstr "Искать по репозиторию" -#: search.go:66 +#: search.go:65 msgid "Search by provides" msgstr "Искать по provides" -#: search.go:130 +#: search.go:126 msgid "Error while executing search" msgstr "Ошибка при выполнении поиска" @@ -670,113 +820,35 @@ msgstr "Ошибка при выполнении поиска" msgid "Upgrade all installed packages" msgstr "Обновить все установленные пакеты" -#: upgrade.go:106 upgrade.go:123 -msgid "Error checking for updates" -msgstr "Ошибка при проверке обновлений" - -#: upgrade.go:126 -msgid "There is nothing to do." -msgstr "Действия не требуются." - -#: internal/build/installer.go:88 -msgid "Package %s is installed with older version %s, will rebuild with version %s" -msgstr "Пакет %s установлен с устаревшей версией %s, будет пересобран с версией %s" - -#: internal/build/installer.go:96 -msgid "Package %s is already installed with version %s, skipping build" -msgstr "Пакет %s уже установлен с версией %s, пропуск сборки" - -#: internal/build/installer.go:102 -msgid "Package %s is installed with newer version %s (repo has %s), skipping build" -msgstr "Пакет %s установлен с более новой версией %s (в репозитории %s), пропуск сборки" - -#: internal/build/script_executor.go:170 -msgid "Creating package file" -msgstr "Создание файла пакета" - -#: internal/build/script_executor.go:174 -msgid "Failed to create package file" -msgstr "Не удалось создать файл пакета" - -#: internal/build/script_executor.go:179 -msgid "Packaging with nfpm" -msgstr "Упаковка с помощью nfpm" - -#: internal/build/script_executor.go:182 -msgid "Failed to create package" -msgstr "Не удалось создать пакет" - -#: internal/build/script_executor.go:186 -msgid "Package created successfully" -msgstr "Пакет успешно создан" - -#: internal/build/script_executor.go:190 -msgid "Package file not found after creation" -msgstr "Файл пакета не найден после создания" - -#: internal/build/script_executor.go:193 -msgid "Package file verified to exist" -msgstr "Наличие файла пакета подтверждено" - -#: internal/repos/pull.go:423 -msgid "Failed to get deleted file from old commit" -msgstr "Не удалось получить удалённый файл из старого коммита" - -#: internal/repos/pull.go:429 -msgid "Failed to read deleted file" -msgstr "Не удалось прочитать удалённый файл" - -#: internal/repos/pull.go:448 -msgid "Failed to get updated file from new commit" -msgstr "Не удалось получить обновлённый файл из нового коммита" - -#: internal/repos/pull.go:454 -msgid "Failed to read updated file" -msgstr "Не удалось прочитать обновлённый файл" - -#: internal/repos/pull.go:508 -msgid "No alr.sh files found in repository" -msgstr "Файлы alr.sh не найдены в репозитории" - -#: internal/cliutils/app_builder/builder.go:45 -msgid "failed to close db" -msgstr "не удалось закрыть БД" - -#: internal/build/build.go:342 -msgid "Using cached package" -msgstr "Используется кешированный пакет" - #: upgrade.go:89 msgid "Updating system packages..." msgstr "Обновление системных пакетов..." +#: upgrade.go:95 +#, fuzzy +msgid "Error updating system packages" +msgstr "Обновление системных пакетов..." + #: upgrade.go:97 msgid "System packages updated successfully" msgstr "Системные пакеты успешно обновлены" -#: build.go:203 -msgid "Package file already moved or removed, skipping" -msgstr "Файл пакета уже перемещён или удалён, пропускаем" +#: upgrade.go:113 upgrade.go:130 +msgid "Error checking for updates" +msgstr "Ошибка при проверке обновлений" -#: fix.go:75 -msgid "Clearing cache and temporary directories" -msgstr "Очистка кэша и временных директорий" +#: upgrade.go:133 +msgid "There is nothing to do." +msgstr "Действия не требуются." -#: fix.go:119 -msgid "Clearing temporary directory" -msgstr "Очистка временной директории" +#~ msgid "Clearing cache directory" +#~ msgstr "Очистка каталога кэша" -#: fix.go:126 -msgid "Unable to remove temporary directory as current user, trying with sudo" -msgstr "Невозможно удалить временную директорию от текущего пользователя, попытка через sudo" +#~ msgid "Error on dropping capabilities" +#~ msgstr "Ошибка при понижении привилегий" -#: fix.go:156 -msgid "Fixing permissions on temporary files" -msgstr "Исправление прав доступа к временным файлам" - -#: fix.go:177 -msgid "Creating cache directory" -msgstr "Создание директории кэша" +#~ msgid "You need to be a %s member to perform this action" +#~ msgstr "Вы должны быть членом %s чтобы выполнить это" #, fuzzy #~ msgid "Failed to clear contents of cache directory" @@ -796,13 +868,6 @@ msgstr "Создание директории кэша" #~ msgid "Error mounting" #~ msgstr "Ошибка при кодировании конфигурации" -#, fuzzy -#~ msgid "Unable to create config directory" -#~ msgstr "Не удалось создать каталог конфигурации ALR" - -#~ msgid "Unable to create package cache directory" -#~ msgstr "Не удалось создать каталог кэша пакетов" - #~ msgid "" #~ "Running ALR as root is forbidden as it may cause catastrophic damage to " #~ "your system" diff --git a/pkg/alrsh/package_gen.go b/pkg/alrsh/package_gen.go index 834deb8..0fca143 100644 --- a/pkg/alrsh/package_gen.go +++ b/pkg/alrsh/package_gen.go @@ -1,19 +1,3 @@ -// ALR - Any Linux Repository -// Copyright (C) 2025 The ALR Authors -// -// 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 . - // DO NOT EDIT MANUALLY. This file is generated. package alrsh