forked from Plemya-x/ALR
		
	chore: replace old logger with new
This commit is contained in:
		@@ -25,6 +25,7 @@ import (
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"log/slog"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"runtime"
 | 
			
		||||
@@ -38,7 +39,7 @@ import (
 | 
			
		||||
	_ "github.com/goreleaser/nfpm/v2/arch"
 | 
			
		||||
	_ "github.com/goreleaser/nfpm/v2/deb"
 | 
			
		||||
	_ "github.com/goreleaser/nfpm/v2/rpm"
 | 
			
		||||
	"go.elara.ws/logger/log"
 | 
			
		||||
	"github.com/leonelquinteros/gotext"
 | 
			
		||||
	"mvdan.cc/sh/v3/expand"
 | 
			
		||||
	"mvdan.cc/sh/v3/interp"
 | 
			
		||||
	"mvdan.cc/sh/v3/syntax"
 | 
			
		||||
@@ -56,7 +57,6 @@ import (
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/helpers"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
			
		||||
)
 | 
			
		||||
@@ -64,7 +64,6 @@ import (
 | 
			
		||||
// Функция BuildPackage выполняет сборку скрипта по указанному пути. Возвращает два среза.
 | 
			
		||||
// Один содержит пути к собранным пакетам, другой - имена собранных пакетов.
 | 
			
		||||
func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string, error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	reposInstance := repos.GetInstance(ctx)
 | 
			
		||||
 | 
			
		||||
	info, err := distro.ParseOSRelease(ctx)
 | 
			
		||||
@@ -102,10 +101,11 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
			
		||||
	// Спрашиваем у пользователя, хочет ли он увидеть скрипт сборки.
 | 
			
		||||
	err = cliutils.PromptViewScript(ctx, opts.Script, vars.Name, config.Config(ctx).PagerStyle, opts.Interactive)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal("Failed to prompt user to view build script").Err(err).Send()
 | 
			
		||||
		slog.Error(gotext.Get("Failed to prompt user to view build script"), "err", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Building package").Str("name", vars.Name).Str("version", vars.Version).Send()
 | 
			
		||||
	slog.Info(gotext.Get("Building package"), "name", vars.Name, "version", vars.Version)
 | 
			
		||||
 | 
			
		||||
	// Второй проход будет использоваться для выполнения реального кода,
 | 
			
		||||
	// поэтому он не ограничен. Скрипт уже был показан
 | 
			
		||||
@@ -149,7 +149,7 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Downloading sources").Send() // Записываем в лог загрузку источников
 | 
			
		||||
	slog.Info(gotext.Get("Downloading sources")) // Записываем в лог загрузку источников
 | 
			
		||||
 | 
			
		||||
	err = getSources(ctx, dirs, vars) // Загружаем исходники
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -161,7 +161,7 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Building package metadata").Str("name", vars.Name).Send() // Логгируем сборку метаданных пакета
 | 
			
		||||
	slog.Info(gotext.Get("Building package metadata"), "name", vars.Name)
 | 
			
		||||
 | 
			
		||||
	pkgFormat := getPkgFormat(opts.Manager) // Получаем формат пакета
 | 
			
		||||
 | 
			
		||||
@@ -183,7 +183,7 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Compressing package").Str("name", pkgName).Send() // Логгируем сжатие пакета
 | 
			
		||||
	slog.Info(gotext.Get("Compressing package"), "name", pkgName) // Логгируем сжатие пакета
 | 
			
		||||
 | 
			
		||||
	err = packager.Package(pkgInfo, pkgFile) // Упаковываем пакет
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -308,7 +308,6 @@ func prepareDirs(dirs types.Directories) error {
 | 
			
		||||
 | 
			
		||||
// Функция performChecks проверяет различные аспекты в системе, чтобы убедиться, что пакет может быть установлен.
 | 
			
		||||
func performChecks(ctx context.Context, vars *types.BuildVars, interactive bool, installed map[string]string) (bool, error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	if !cpu.IsCompatibleWith(cpu.Arch(), vars.Architectures) { // Проверяем совместимость архитектуры
 | 
			
		||||
		cont, err := cliutils.YesNoPrompt(ctx, "Your system's CPU architecture doesn't match this package. Do you want to build anyway?", interactive, true)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -321,10 +320,10 @@ func performChecks(ctx context.Context, vars *types.BuildVars, interactive bool,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if instVer, ok := installed[vars.Name]; ok { // Если пакет уже установлен, выводим предупреждение
 | 
			
		||||
		log.Warn("This package is already installed").
 | 
			
		||||
			Str("name", vars.Name).
 | 
			
		||||
			Str("version", instVer).
 | 
			
		||||
			Send()
 | 
			
		||||
		slog.Warn(gotext.Get("This package is already installed"),
 | 
			
		||||
			"name", vars.Name,
 | 
			
		||||
			"version", instVer,
 | 
			
		||||
		)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true, nil
 | 
			
		||||
@@ -337,7 +336,6 @@ type PackageFinder interface {
 | 
			
		||||
// Функция installBuildDeps устанавливает все зависимости сборки, которые еще не установлены, и возвращает
 | 
			
		||||
// срез, содержащий имена всех установленных пакетов.
 | 
			
		||||
func installBuildDeps(ctx context.Context, repos PackageFinder, vars *types.BuildVars, opts types.BuildOpts) ([]string, error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	var buildDeps []string
 | 
			
		||||
	if len(vars.BuildDepends) > 0 {
 | 
			
		||||
		deps, err := removeAlreadyInstalled(opts, vars.BuildDepends)
 | 
			
		||||
@@ -350,7 +348,7 @@ func installBuildDeps(ctx context.Context, repos PackageFinder, vars *types.Buil
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		log.Info("Installing build dependencies").Send() // Логгируем установку зависимостей
 | 
			
		||||
		slog.Info(gotext.Get("Installing build dependencies")) // Логгируем установку зависимостей
 | 
			
		||||
 | 
			
		||||
		flattened := cliutils.FlattenPkgs(ctx, found, "install", opts.Interactive) // Уплощаем список зависимостей
 | 
			
		||||
		buildDeps = packageNames(flattened)
 | 
			
		||||
@@ -391,9 +389,8 @@ func installOptDeps(ctx context.Context, repos PackageFinder, vars *types.BuildV
 | 
			
		||||
// пакетов, которые она собрала, а также все зависимости, которые не были найдены в ALR репозитории,
 | 
			
		||||
// чтобы они могли быть установлены из системных репозиториев.
 | 
			
		||||
func buildALRDeps(ctx context.Context, opts types.BuildOpts, vars *types.BuildVars) (builtPaths, builtNames, repoDeps []string, err error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	if len(vars.Depends) > 0 {
 | 
			
		||||
		log.Info("Installing dependencies").Send()
 | 
			
		||||
		slog.Info(gotext.Get("Installing dependencies"))
 | 
			
		||||
 | 
			
		||||
		found, notFound, err := repos.FindPkgs(ctx, vars.Depends) // Поиск зависимостей
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -433,10 +430,9 @@ func buildALRDeps(ctx context.Context, opts types.BuildOpts, vars *types.BuildVa
 | 
			
		||||
 | 
			
		||||
// Функция executeFunctions выполняет специальные функции ALR, такие как version(), prepare() и т.д.
 | 
			
		||||
func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Directories, vars *types.BuildVars) (err error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	version, ok := dec.GetFunc("version")
 | 
			
		||||
	if ok {
 | 
			
		||||
		log.Info("Executing version()").Send()
 | 
			
		||||
		slog.Info(gotext.Get("Executing version()"))
 | 
			
		||||
 | 
			
		||||
		buf := &bytes.Buffer{}
 | 
			
		||||
 | 
			
		||||
@@ -456,12 +452,12 @@ func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Dire
 | 
			
		||||
		}
 | 
			
		||||
		vars.Version = newVer
 | 
			
		||||
 | 
			
		||||
		log.Info("Updating version").Str("new", newVer).Send()
 | 
			
		||||
		slog.Info("Updating version", "new", newVer)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	prepare, ok := dec.GetFunc("prepare")
 | 
			
		||||
	if ok {
 | 
			
		||||
		log.Info("Executing prepare()").Send()
 | 
			
		||||
		slog.Info(gotext.Get("Executing prepare()"))
 | 
			
		||||
 | 
			
		||||
		err = prepare(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -471,7 +467,7 @@ func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Dire
 | 
			
		||||
 | 
			
		||||
	build, ok := dec.GetFunc("build")
 | 
			
		||||
	if ok {
 | 
			
		||||
		log.Info("Executing build()").Send()
 | 
			
		||||
		slog.Info(gotext.Get("Executing build()"))
 | 
			
		||||
 | 
			
		||||
		err = build(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -483,24 +479,27 @@ func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Dire
 | 
			
		||||
	for {
 | 
			
		||||
		packageFn, ok := dec.GetFunc("package")
 | 
			
		||||
		if ok {
 | 
			
		||||
			log.Info("Executing package()").Send()
 | 
			
		||||
			slog.Info(gotext.Get("Executing package()"))
 | 
			
		||||
			err = packageFn(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Проверка на наличие дополнительных функций package_*
 | 
			
		||||
		packageFuncName := "package_"
 | 
			
		||||
		if packageFunc, ok := dec.GetFunc(packageFuncName); ok {
 | 
			
		||||
			log.Info("Executing " + packageFuncName).Send()
 | 
			
		||||
			err = packageFunc(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
		/*
 | 
			
		||||
			// Проверка на наличие дополнительных функций package_*
 | 
			
		||||
			packageFuncName := "package_"
 | 
			
		||||
			if packageFunc, ok := dec.GetFunc(packageFuncName); ok {
 | 
			
		||||
				slog.Info("Executing " + packageFuncName)
 | 
			
		||||
				err = packageFunc(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					return err
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				break // Если больше нет функций package_*, выходим из цикла
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			break // Если больше нет функций package_*, выходим из цикла
 | 
			
		||||
		}
 | 
			
		||||
		*/
 | 
			
		||||
		break
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
@@ -555,7 +554,7 @@ func buildPkgMetadata(ctx context.Context, vars *types.BuildVars, dirs types.Dir
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			log.Info("AutoProv is not implemented for this package format, so it's skiped").Send()
 | 
			
		||||
			slog.Info(gotext.Get("AutoProv is not implemented for this package format, so it's skiped"))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -566,7 +565,7 @@ func buildPkgMetadata(ctx context.Context, vars *types.BuildVars, dirs types.Dir
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			log.Info("AutoReq is not implemented for this package format, so it's skiped").Send()
 | 
			
		||||
			slog.Info(gotext.Get("AutoReq is not implemented for this package format, so it's skiped"))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -756,9 +755,9 @@ func createBuildEnvVars(info *distro.OSRelease, dirs types.Directories) []string
 | 
			
		||||
 | 
			
		||||
// Функция getSources загружает исходники скрипта.
 | 
			
		||||
func getSources(ctx context.Context, dirs types.Directories, bv *types.BuildVars) error {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	if len(bv.Sources) != len(bv.Checksums) {
 | 
			
		||||
		log.Fatal("The checksums array must be the same length as sources").Send()
 | 
			
		||||
		slog.Error(gotext.Get("The checksums array must be the same length as sources"))
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i, src := range bv.Sources {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,21 +19,20 @@ package build
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"context"
 | 
			
		||||
	"log/slog"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/goreleaser/nfpm/v2"
 | 
			
		||||
	"github.com/leonelquinteros/gotext"
 | 
			
		||||
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, command string, updateFunc func(string)) error {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
 | 
			
		||||
	if _, err := exec.LookPath(command); err != nil {
 | 
			
		||||
		log.Info("Command not found on the system").Str("command", command).Send()
 | 
			
		||||
		slog.Info(gotext.Get("Command not found on the system"), "command", command)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -64,7 +63,7 @@ func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Dir
 | 
			
		||||
	cmd.Stdout = &out
 | 
			
		||||
	cmd.Stderr = &stderr
 | 
			
		||||
	if err := cmd.Run(); err != nil {
 | 
			
		||||
		log.Error(stderr.String()).Send()
 | 
			
		||||
		slog.Error(stderr.String())
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -79,19 +78,15 @@ func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Dir
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func rpmFindProvides(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories) error {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
 | 
			
		||||
	return rpmFindDependencies(ctx, pkgInfo, dirs, "/usr/lib/rpm/find-provides", func(dep string) {
 | 
			
		||||
		log.Info("Provided dependency found").Str("dep", dep).Send()
 | 
			
		||||
		slog.Info(gotext.Get("Provided dependency found"), "dep", dep)
 | 
			
		||||
		pkgInfo.Overridables.Provides = append(pkgInfo.Overridables.Provides, dep)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func rpmFindRequires(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories) error {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
 | 
			
		||||
	return rpmFindDependencies(ctx, pkgInfo, dirs, "/usr/lib/rpm/find-requires", func(dep string) {
 | 
			
		||||
		log.Info("Required dependency found").Str("dep", dep).Send()
 | 
			
		||||
		slog.Info(gotext.Get("Required dependency found"), "dep", dep)
 | 
			
		||||
		pkgInfo.Overridables.Depends = append(pkgInfo.Overridables.Depends, dep)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -21,24 +21,26 @@ package build
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"log/slog"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
 | 
			
		||||
	"github.com/leonelquinteros/gotext"
 | 
			
		||||
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// InstallPkgs устанавливает нативные пакеты с использованием менеджера пакетов,
 | 
			
		||||
// затем строит и устанавливает пакеты ALR
 | 
			
		||||
func InstallPkgs(ctx context.Context, alrPkgs []db.Package, nativePkgs []string, opts types.BuildOpts) {
 | 
			
		||||
	log := loggerctx.From(ctx) // Инициализируем логгер из контекста
 | 
			
		||||
 | 
			
		||||
	if len(nativePkgs) > 0 {
 | 
			
		||||
		err := opts.Manager.Install(nil, nativePkgs...)
 | 
			
		||||
		// Если есть нативные пакеты, выполняем их установку
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatal("Error installing native packages").Err(err).Send()
 | 
			
		||||
			slog.Error(gotext.Get("Error installing native packages"), "err", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
			// Логируем и завершаем выполнение при ошибке
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -61,20 +63,21 @@ func GetScriptPaths(ctx context.Context, pkgs []db.Package) []string {
 | 
			
		||||
 | 
			
		||||
// InstallScripts строит и устанавливает переданные alr скрипты сборки
 | 
			
		||||
func InstallScripts(ctx context.Context, scripts []string, opts types.BuildOpts) {
 | 
			
		||||
	log := loggerctx.From(ctx) // Получаем логгер из контекста
 | 
			
		||||
	for _, script := range scripts {
 | 
			
		||||
		opts.Script = script // Устанавливаем текущий скрипт в опции
 | 
			
		||||
		builtPkgs, _, err := BuildPackage(ctx, opts)
 | 
			
		||||
		// Выполняем сборку пакета
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatal("Error building package").Err(err).Send()
 | 
			
		||||
			slog.Error(gotext.Get("Error building package"), "err", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
			// Логируем и завершаем выполнение при ошибке сборки
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = opts.Manager.InstallLocal(nil, builtPkgs...)
 | 
			
		||||
		// Устанавливаем локально собранные пакеты
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatal("Error installing package").Err(err).Send()
 | 
			
		||||
			slog.Error(gotext.Get("Error installing package"), "err", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
			// Логируем и завершаем выполнение при ошибке установки
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,48 +0,0 @@
 | 
			
		||||
// 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/>.
 | 
			
		||||
 | 
			
		||||
package loggerctx
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	"go.elara.ws/logger"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// loggerCtxKey is used as the context key for loggers
 | 
			
		||||
type loggerCtxKey struct{}
 | 
			
		||||
 | 
			
		||||
// With returns a copy of ctx containing log
 | 
			
		||||
func With(ctx context.Context, log logger.Logger) context.Context {
 | 
			
		||||
	return context.WithValue(ctx, loggerCtxKey{}, log)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// From attempts to get a logger from ctx. If ctx doesn't
 | 
			
		||||
// contain a logger, it returns a nop logger.
 | 
			
		||||
func From(ctx context.Context) logger.Logger {
 | 
			
		||||
	if val := ctx.Value(loggerCtxKey{}); val != nil {
 | 
			
		||||
		if log, ok := val.(logger.Logger); ok && log != nil {
 | 
			
		||||
			return log
 | 
			
		||||
		} else {
 | 
			
		||||
			return logger.NewNop()
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		return logger.NewNop()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -22,6 +22,7 @@ package repos
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"log/slog"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
@@ -31,6 +32,7 @@ import (
 | 
			
		||||
	"github.com/go-git/go-billy/v5/osfs"
 | 
			
		||||
	"github.com/go-git/go-git/v5"
 | 
			
		||||
	"github.com/go-git/go-git/v5/plumbing"
 | 
			
		||||
	"github.com/leonelquinteros/gotext"
 | 
			
		||||
	"github.com/pelletier/go-toml/v2"
 | 
			
		||||
	"go.elara.ws/vercmp"
 | 
			
		||||
	"mvdan.cc/sh/v3/expand"
 | 
			
		||||
@@ -41,7 +43,6 @@ import (
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/handlers"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type actionType uint8
 | 
			
		||||
@@ -61,8 +62,6 @@ type action struct {
 | 
			
		||||
// In this case, only changed packages will be processed if possible.
 | 
			
		||||
// If repos is set to nil, the repos in the ALR config will be used.
 | 
			
		||||
func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
 | 
			
		||||
	if repos == nil {
 | 
			
		||||
		repos = rs.cfg.Repos(ctx)
 | 
			
		||||
	}
 | 
			
		||||
@@ -73,7 +72,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		log.Info("Pulling repository").Str("name", repo.Name).Send()
 | 
			
		||||
		slog.Info(gotext.Get("Pulling repository"), "name", repo.Name)
 | 
			
		||||
		repoDir := filepath.Join(config.GetPaths(ctx).RepoDir, repo.Name)
 | 
			
		||||
 | 
			
		||||
		var repoFS billy.Filesystem
 | 
			
		||||
@@ -97,7 +96,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
 | 
			
		||||
 | 
			
		||||
			err = w.PullContext(ctx, &git.PullOptions{Progress: os.Stderr})
 | 
			
		||||
			if errors.Is(err, git.NoErrAlreadyUpToDate) {
 | 
			
		||||
				log.Info("Repository up to date").Str("name", repo.Name).Send()
 | 
			
		||||
				slog.Info(gotext.Get("Repository up to date"), "name", repo.Name)
 | 
			
		||||
			} else if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
@@ -154,7 +153,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
 | 
			
		||||
 | 
			
		||||
		fl, err := repoFS.Open("alr-repo.toml")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Warn("Git repository does not appear to be a valid ALR repo").Str("repo", repo.Name).Send()
 | 
			
		||||
			slog.Warn(gotext.Get("Git repository does not appear to be a valid ALR repo"), "repo", repo.Name)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -170,7 +169,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
 | 
			
		||||
		// to compare it to the repo version, so only compare versions with the "v".
 | 
			
		||||
		if strings.HasPrefix(config.Version, "v") {
 | 
			
		||||
			if vercmp.Compare(config.Version, repoCfg.Repo.MinVersion) == -1 {
 | 
			
		||||
				log.Warn("ALR repo's minumum ALR version is greater than the current version. Try updating ALR if something doesn't work.").Str("repo", repo.Name).Send()
 | 
			
		||||
				slog.Warn(gotext.Get("ALR repo's minumum ALR version is greater than the current version. Try updating ALR if something doesn't work."), "repo", repo.Name)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user