From a6076b125362ca6c79e293573e9144797e5a744e Mon Sep 17 00:00:00 2001 From: Maxim Slipenko Date: Wed, 22 Jan 2025 16:37:16 +0300 Subject: [PATCH] chore: replace old logger with new --- Makefile | 1 + build.go | 19 +- fix.go | 19 +- helper.go | 13 +- install.go | 35 ++-- internal/cliutils/prompt.go | 12 +- internal/config/lang.go | 8 +- internal/db/db.go | 8 +- internal/db/db_legacy.go | 8 +- internal/dl/dl.go | 24 ++- internal/translations/default.pot | 255 +++++++++++++++++++++++- internal/translations/po/ru/default.po | 261 ++++++++++++++++++++++++- internal/translations/translations.go | 7 +- list.go | 23 ++- main.go | 13 +- pkg/build/build.go | 73 ++++--- pkg/build/findDeps.go | 17 +- pkg/build/install.go | 17 +- pkg/loggerctx/log.go | 48 ----- pkg/repos/pull.go | 13 +- repo.go | 36 ++-- upgrade.go | 18 +- 22 files changed, 707 insertions(+), 221 deletions(-) delete mode 100644 pkg/loggerctx/log.go diff --git a/Makefile b/Makefile index 2ce48af..5a74638 100644 --- a/Makefile +++ b/Makefile @@ -64,4 +64,5 @@ fmt: i18n: $(XGOTEXT_BIN) --output ./internal/translations/default.pot + msguniq --use-first -o ./internal/translations/default.pot ./internal/translations/default.pot msgmerge --backup=off -U ./internal/translations/po/ru/default.po ./internal/translations/default.pot \ No newline at end of file diff --git a/build.go b/build.go index c110f61..1b686f6 100644 --- a/build.go +++ b/build.go @@ -20,16 +20,17 @@ package main import ( + "log/slog" "os" "path/filepath" + "github.com/leonelquinteros/gotext" "github.com/urfave/cli/v2" "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" "gitea.plemya-x.ru/Plemya-x/ALR/internal/osutils" "gitea.plemya-x.ru/Plemya-x/ALR/internal/types" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/build" - "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" ) @@ -57,7 +58,6 @@ var buildCmd = &cli.Command{ }, Action: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) script := c.String("script") if c.String("package") != "" { @@ -66,12 +66,14 @@ var buildCmd = &cli.Command{ err := repos.Pull(ctx, config.Config(ctx).Repos) if err != nil { - log.Fatal("Error pulling repositories").Err(err).Send() + slog.Error(gotext.Get("Error pulling repositories"), "err", err) + os.Exit(1) } mgr := manager.Detect() if mgr == nil { - log.Fatal("Unable to detect a supported package manager on the system").Send() + slog.Error(gotext.Get("Unable to detect a supported package manager on the system")) + os.Exit(1) } pkgPaths, _, err := build.BuildPackage(ctx, types.BuildOpts{ @@ -81,19 +83,22 @@ var buildCmd = &cli.Command{ Interactive: c.Bool("interactive"), }) if err != nil { - log.Fatal("Error building package").Err(err).Send() + slog.Error(gotext.Get("Error building package"), "err", err) + os.Exit(1) } wd, err := os.Getwd() if err != nil { - log.Fatal("Error getting working directory").Err(err).Send() + slog.Error(gotext.Get("Error getting working directory"), "err", err) + os.Exit(1) } for _, pkgPath := range pkgPaths { name := filepath.Base(pkgPath) err = osutils.Move(pkgPath, filepath.Join(wd, name)) if err != nil { - log.Fatal("Error moving the package").Err(err).Send() + slog.Error(gotext.Get("Error moving the package"), "err", err) + os.Exit(1) } } diff --git a/fix.go b/fix.go index b0c8c0f..2f8e669 100644 --- a/fix.go +++ b/fix.go @@ -20,13 +20,14 @@ package main import ( + "log/slog" "os" + "github.com/leonelquinteros/gotext" "github.com/urfave/cli/v2" "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/pkg/loggerctx" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos" ) @@ -35,31 +36,33 @@ var fixCmd = &cli.Command{ Usage: "Attempt to fix problems with ALR", Action: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) db.Close() paths := config.GetPaths(ctx) - log.Info("Removing cache directory").Send() + slog.Info(gotext.Get("Removing cache directory")) err := os.RemoveAll(paths.CacheDir) if err != nil { - log.Fatal("Unable to remove cache directory").Err(err).Send() + slog.Error(gotext.Get("Unable to remove cache directory"), "err", err) + os.Exit(1) } - log.Info("Rebuilding cache").Send() + slog.Info(gotext.Get("Rebuilding cache")) err = os.MkdirAll(paths.CacheDir, 0o755) if err != nil { - log.Fatal("Unable to create new cache directory").Err(err).Send() + slog.Error(gotext.Get("Unable to create new cache directory"), "err", err) + os.Exit(1) } err = repos.Pull(ctx, config.Config(ctx).Repos) if err != nil { - log.Fatal("Error pulling repos").Err(err).Send() + slog.Error(gotext.Get("Error pulling repos"), "err", err) + os.Exit(1) } - log.Info("Done").Send() + slog.Info(gotext.Get("Done")) return nil }, diff --git a/helper.go b/helper.go index e5cd70a..7988399 100644 --- a/helper.go +++ b/helper.go @@ -21,9 +21,11 @@ package main import ( "fmt" + "log/slog" "os" "strings" + "github.com/leonelquinteros/gotext" "github.com/urfave/cli/v2" "mvdan.cc/sh/v3/expand" "mvdan.cc/sh/v3/interp" @@ -31,7 +33,6 @@ import ( "gitea.plemya-x.ru/Plemya-x/ALR/internal/cpu" "gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/helpers" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx" ) var helperCmd = &cli.Command{ @@ -49,7 +50,6 @@ var helperCmd = &cli.Command{ }, Action: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) if c.Args().Len() < 1 { cli.ShowSubcommandHelpAndExit(c, 1) @@ -57,17 +57,20 @@ var helperCmd = &cli.Command{ helper, ok := helpers.Helpers[c.Args().First()] if !ok { - log.Fatal("No such helper command").Str("name", c.Args().First()).Send() + slog.Error(gotext.Get("No such helper command"), "name", c.Args().First()) + os.Exit(1) } wd, err := os.Getwd() if err != nil { - log.Fatal("Error getting working directory").Err(err).Send() + slog.Error(gotext.Get("Error getting working directory"), "err", err) + os.Exit(1) } info, err := distro.ParseOSRelease(ctx) if err != nil { - log.Fatal("Error getting working directory").Err(err).Send() + slog.Error(gotext.Get("Error getting working directory"), "err", err) + os.Exit(1) } hc := interp.HandlerContext{ diff --git a/install.go b/install.go index 501312b..c4f5a4c 100644 --- a/install.go +++ b/install.go @@ -21,7 +21,10 @@ package main import ( "fmt" + "log/slog" + "os" + "github.com/leonelquinteros/gotext" "github.com/urfave/cli/v2" "gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils" @@ -29,7 +32,6 @@ import ( "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/build" - "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" ) @@ -47,26 +49,29 @@ var installCmd = &cli.Command{ }, Action: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) args := c.Args() if args.Len() < 1 { - log.Fatalf("Command install expected at least 1 argument, got %d", args.Len()).Send() + slog.Error(gotext.Get("Command install expected at least 1 argument, got %d", args.Len())) + os.Exit(1) } mgr := manager.Detect() if mgr == nil { - log.Fatal("Unable to detect a supported package manager on the system").Send() + slog.Error(gotext.Get("Unable to detect a supported package manager on the system")) + os.Exit(1) } err := repos.Pull(ctx, config.Config(ctx).Repos) if err != nil { - log.Fatal("Error pulling repositories").Err(err).Send() + slog.Error(gotext.Get("Error pulling repositories"), "err", err) + os.Exit(1) } found, notFound, err := repos.FindPkgs(ctx, args.Slice()) if err != nil { - log.Fatal("Error finding packages").Err(err).Send() + slog.Error(gotext.Get("Error finding packages"), "err", err) + os.Exit(1) } pkgs := cliutils.FlattenPkgs(ctx, found, "install", c.Bool("interactive")) @@ -78,10 +83,10 @@ var installCmd = &cli.Command{ return nil }, BashComplete: func(c *cli.Context) { - log := loggerctx.From(c.Context) result, err := db.GetPkgs(c.Context, "true") if err != nil { - log.Fatal("Error getting packages").Err(err).Send() + slog.Error(gotext.Get("Error getting packages"), "err", err) + os.Exit(1) } defer result.Close() @@ -89,7 +94,8 @@ var installCmd = &cli.Command{ var pkg db.Package err = result.StructScan(&pkg) if err != nil { - log.Fatal("Error iterating over packages").Err(err).Send() + slog.Error(gotext.Get("Error iterating over packages"), "err", err) + os.Exit(1) } fmt.Println(pkg.Name) @@ -102,21 +108,22 @@ var removeCmd = &cli.Command{ Usage: "Remove an installed package", Aliases: []string{"rm"}, Action: func(c *cli.Context) error { - log := loggerctx.From(c.Context) - args := c.Args() if args.Len() < 1 { - log.Fatalf("Command remove expected at least 1 argument, got %d", args.Len()).Send() + slog.Error(gotext.Get("Command remove expected at least 1 argument, got %d", args.Len())) + os.Exit(1) } mgr := manager.Detect() if mgr == nil { - log.Fatal("Unable to detect a supported package manager on the system").Send() + slog.Error(gotext.Get("Unable to detect a supported package manager on the system")) + os.Exit(1) } err := mgr.Remove(nil, c.Args().Slice()...) if err != nil { - log.Fatal("Error removing packages").Err(err).Send() + slog.Error(gotext.Get("Error removing packages"), "err", err) + os.Exit(1) } return nil diff --git a/internal/cliutils/prompt.go b/internal/cliutils/prompt.go index b89b80a..4173911 100644 --- a/internal/cliutils/prompt.go +++ b/internal/cliutils/prompt.go @@ -21,16 +21,17 @@ package cliutils import ( "context" + "log/slog" "os" "strings" "github.com/AlecAivazis/survey/v2" + "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/pager" "gitea.plemya-x.ru/Plemya-x/ALR/internal/translations" - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx" ) // YesNoPrompt asks the user a yes or no question, using def as the default answer @@ -54,8 +55,6 @@ func YesNoPrompt(ctx context.Context, msg string, interactive, def bool) (bool, // shows it if they answer yes, then asks if they'd still like to // continue, and exits if they answer no. func PromptViewScript(ctx context.Context, script, name, style string, interactive bool) error { - log := loggerctx.From(ctx) - if !interactive { return nil } @@ -78,7 +77,8 @@ func PromptViewScript(ctx context.Context, script, name, style string, interacti } if !cont { - log.Fatal(translations.Translator(ctx).TranslateTo("User chose not to continue after reading script", config.Language(ctx))).Send() + slog.Error(gotext.Get("User chose not to continue after reading script")) + os.Exit(1) } } @@ -106,13 +106,13 @@ func ShowScript(path, name, style string) error { // FlattenPkgs attempts to flatten the a map of slices of packages into a single slice // of packages by prompting the user if multiple packages match. func FlattenPkgs(ctx context.Context, found map[string][]db.Package, verb string, interactive bool) []db.Package { - log := loggerctx.From(ctx) var outPkgs []db.Package for _, pkgs := range found { if len(pkgs) > 1 && interactive { choice, err := PkgPrompt(ctx, pkgs, verb, interactive) if err != nil { - log.Fatal("Error prompting for choice of package").Send() + slog.Error(gotext.Get("Error prompting for choice of package")) + os.Exit(1) } outPkgs = append(outPkgs, choice) } else if len(pkgs) == 1 || !interactive { diff --git a/internal/config/lang.go b/internal/config/lang.go index e1eaa22..4161775 100644 --- a/internal/config/lang.go +++ b/internal/config/lang.go @@ -21,13 +21,13 @@ package config import ( "context" + "log/slog" "os" "strings" "sync" + "github.com/leonelquinteros/gotext" "golang.org/x/text/language" - - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx" ) var ( @@ -43,12 +43,12 @@ var ( func Language(ctx context.Context) language.Tag { langMtx.Lock() defer langMtx.Unlock() - log := loggerctx.From(ctx) if !langSet { syslang := SystemLang() tag, err := language.Parse(syslang) if err != nil { - log.Fatal("Error parsing system language").Err(err).Send() + slog.Error(gotext.Get("Error parsing system language"), "err", err) + os.Exit(1) } base, _ := tag.Base() lang = language.Make(base.String()) diff --git a/internal/db/db.go b/internal/db/db.go index 17f8ddc..05d873f 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -21,11 +21,12 @@ package db import ( "context" + "log/slog" "github.com/jmoiron/sqlx" + "github.com/leonelquinteros/gotext" "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx" ) // CurrentVersion is the current version of the database. @@ -94,7 +95,6 @@ func (d *Database) GetConn() *sqlx.DB { } func (d *Database) initDB(ctx context.Context) error { - log := loggerctx.From(ctx) d.conn = d.conn.Unsafe() conn := d.conn _, err := conn.ExecContext(ctx, ` @@ -128,11 +128,11 @@ func (d *Database) initDB(ctx context.Context) error { ver, ok := d.GetVersion(ctx) if ok && ver != CurrentVersion { - log.Warn("Database version mismatch; resetting").Int("version", ver).Int("expected", CurrentVersion).Send() + slog.Warn(gotext.Get("Database version mismatch; resetting"), "version", ver, "expected", CurrentVersion) d.reset(ctx) return d.initDB(ctx) } else if !ok { - log.Warn("Database version does not exist. Run alr fix if something isn't working.").Send() + slog.Warn(gotext.Get("Database version does not exist. Run alr fix if something isn't working."), "version", ver, "expected", CurrentVersion) return d.addVersion(ctx, CurrentVersion) } diff --git a/internal/db/db_legacy.go b/internal/db/db_legacy.go index 4644933..1d6cc7a 100644 --- a/internal/db/db_legacy.go +++ b/internal/db/db_legacy.go @@ -18,12 +18,14 @@ package db import ( "context" + "log/slog" + "os" "sync" "github.com/jmoiron/sqlx" + "github.com/leonelquinteros/gotext" "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx" ) // DB returns the ALR database. @@ -92,12 +94,12 @@ var ( // Deprecated: For legacy only func GetInstance(ctx context.Context) *Database { dbOnce.Do(func() { - log := loggerctx.From(ctx) cfg := config.GetInstance(ctx) database = New(cfg) err := database.Init(ctx) if err != nil { - log.Fatal("Error opening database").Err(err).Send() + slog.Error(gotext.Get("Error opening database"), "err", err) + os.Exit(1) } }) return database diff --git a/internal/dl/dl.go b/internal/dl/dl.go index a3649f2..a8400bc 100644 --- a/internal/dl/dl.go +++ b/internal/dl/dl.go @@ -31,11 +31,13 @@ import ( "fmt" "hash" "io" + "log/slog" "os" "path/filepath" "strings" "github.com/PuerkitoBio/purell" + "github.com/leonelquinteros/gotext" "github.com/vmihailenco/msgpack/v5" "golang.org/x/crypto/blake2b" "golang.org/x/crypto/blake2s" @@ -43,7 +45,6 @@ import ( "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" "gitea.plemya-x.ru/Plemya-x/ALR/internal/dlcache" - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx" ) // Константа для имени файла манифеста кэша @@ -144,7 +145,6 @@ type UpdatingDownloader interface { // Функция Download загружает файл или каталог с использованием указанных параметров func Download(ctx context.Context, opts Options) (err error) { - log := loggerctx.From(ctx) cfg := config.GetInstance(ctx) dc := dlcache.New(cfg) @@ -166,7 +166,11 @@ func Download(ctx context.Context, opts Options) (err error) { if ok { var updated bool if d, ok := d.(UpdatingDownloader); ok { - log.Info("Source can be updated, updating if required").Str("source", opts.Name).Str("downloader", d.Name()).Send() + slog.Info( + gotext.Get("Source can be updated, updating if required"), + "source", opts.Name, + "downloader", d.Name(), + ) updated, err = d.Update(Options{ Hash: opts.Hash, @@ -193,10 +197,18 @@ func Download(ctx context.Context, opts Options) (err error) { } if ok && !updated { - log.Info("Source found in cache and linked to destination").Str("source", opts.Name).Stringer("type", t).Send() + slog.Info( + gotext.Get("Source found in cache and linked to destination"), + "source", opts.Name, + "type", t, + ) return nil } else if ok { - log.Info("Source updated and linked to destination").Str("source", opts.Name).Stringer("type", t).Send() + slog.Info( + gotext.Get("Source updated and linked to destination"), + "source", opts.Name, + "type", t, + ) return nil } } else { @@ -207,7 +219,7 @@ func Download(ctx context.Context, opts Options) (err error) { } } - log.Info("Downloading source").Str("source", opts.Name).Str("downloader", d.Name()).Send() + slog.Info("Downloading source", "source", opts.Name, "downloader", d.Name()) cacheDir, err = dc.New(ctx, opts.URL) if err != nil { diff --git a/internal/translations/default.pot b/internal/translations/default.pot index debb8ba..515ff4b 100644 --- a/internal/translations/default.pot +++ b/internal/translations/default.pot @@ -9,6 +9,54 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: build.go:69 +msgid "Error pulling repositories" +msgstr "" + +#: build.go:75 +msgid "Unable to detect a supported package manager on the system" +msgstr "" + +#: build.go:86 +msgid "Error building package" +msgstr "" + +#: build.go:92 +msgid "Error getting working directory" +msgstr "" + +#: build.go:100 +msgid "Error moving the package" +msgstr "" + +#: fix.go:43 +msgid "Removing cache directory" +msgstr "" + +#: fix.go:47 +msgid "Unable to remove cache directory" +msgstr "" + +#: fix.go:51 +msgid "Rebuilding cache" +msgstr "" + +#: fix.go:55 +msgid "Unable to create new cache directory" +msgstr "" + +#: fix.go:61 +msgid "Error pulling repos" +msgstr "" + +#: fix.go:65 +msgid "Done" +msgstr "" + +#: helper.go:60 +msgid "No such helper command" +msgstr "" + #: info.go:42 msgid "Print information about a package" msgstr "" @@ -21,10 +69,6 @@ msgstr "" msgid "Command info expected at least 1 argument, got %d" msgstr "" -#: info.go:65 -msgid "Error pulling repositories" -msgstr "" - #: info.go:71 msgid "Error finding packages" msgstr "" @@ -37,11 +81,38 @@ msgstr "" msgid "Error resolving overrides" msgstr "" -#: info.go:105 -#: info.go:111 +#: info.go:105 info.go:111 msgid "Error encoding script variables" msgstr "" +#: install.go:55 +msgid "Command install expected at least 1 argument, got %d" +msgstr "" + +#: install.go:88 +msgid "Error getting packages" +msgstr "" + +#: install.go:97 +msgid "Error iterating over packages" +msgstr "" + +#: install.go:113 +msgid "Command remove expected at least 1 argument, got %d" +msgstr "" + +#: install.go:125 +msgid "Error removing packages" +msgstr "" + +#: internal/cliutils/prompt.go:80 +msgid "User chose not to continue after reading script" +msgstr "" + +#: internal/cliutils/prompt.go:114 +msgid "Error prompting for choice of package" +msgstr "" + #: internal/config/config.go:63 msgid "Error opening config file, using defaults" msgstr "" @@ -78,7 +149,179 @@ msgstr "" msgid "Unable to create package cache directory" msgstr "" +#: internal/config/lang.go:50 +msgid "Error parsing system language" +msgstr "" + +#: internal/db/db.go:131 +msgid "Database version mismatch; resetting" +msgstr "" + +#: internal/db/db.go:135 +msgid "" +"Database version does not exist. Run alr fix if something isn't working." +msgstr "" + +#: internal/db/db_legacy.go:101 +msgid "Error opening database" +msgstr "" + +#: internal/dl/dl.go:170 +msgid "Source can be updated, updating if required" +msgstr "" + +#: internal/dl/dl.go:201 +msgid "Source found in cache and linked to destination" +msgstr "" + +#: internal/dl/dl.go:208 +msgid "Source updated and linked to destination" +msgstr "" + #: internal/logger/log.go:44 msgid "ERROR" msgstr "" +#: internal/translations/translations.go:52 +msgid "Error creating new translator" +msgstr "" + +#: list.go:53 +msgid "Error initialization database" +msgstr "" + +#: list.go:87 +msgid "Error listing installed packages" +msgstr "" + +#: main.go:88 +msgid "" +"Running ALR as root is forbidden as it may cause catastrophic damage to your " +"system" +msgstr "" + +#: main.go:122 +msgid "Error while running app" +msgstr "" + +#: pkg/build/build.go:104 +msgid "Failed to prompt user to view build script" +msgstr "" + +#: pkg/build/build.go:108 +msgid "Building package" +msgstr "" + +#: pkg/build/build.go:152 +msgid "Downloading sources" +msgstr "" + +#: pkg/build/build.go:164 +msgid "Building package metadata" +msgstr "" + +#: pkg/build/build.go:186 +msgid "Compressing package" +msgstr "" + +#: pkg/build/build.go:323 +msgid "This package is already installed" +msgstr "" + +#: pkg/build/build.go:351 +msgid "Installing build dependencies" +msgstr "" + +#: pkg/build/build.go:393 +msgid "Installing dependencies" +msgstr "" + +#: pkg/build/build.go:435 +msgid "Executing version()" +msgstr "" + +#: pkg/build/build.go:460 +msgid "Executing prepare()" +msgstr "" + +#: pkg/build/build.go:470 +msgid "Executing build()" +msgstr "" + +#: pkg/build/build.go:482 +msgid "Executing package()" +msgstr "" + +#: pkg/build/build.go:557 +msgid "AutoProv is not implemented for this package format, so it's skiped" +msgstr "" + +#: pkg/build/build.go:568 +msgid "AutoReq is not implemented for this package format, so it's skiped" +msgstr "" + +#: pkg/build/build.go:759 +msgid "The checksums array must be the same length as sources" +msgstr "" + +#: pkg/build/findDeps.go:35 +msgid "Command not found on the system" +msgstr "" + +#: pkg/build/findDeps.go:82 +msgid "Provided dependency found" +msgstr "" + +#: pkg/build/findDeps.go:89 +msgid "Required dependency found" +msgstr "" + +#: pkg/build/install.go:42 +msgid "Error installing native packages" +msgstr "" + +#: pkg/build/install.go:79 +msgid "Error installing package" +msgstr "" + +#: pkg/repos/pull.go:75 +msgid "Pulling repository" +msgstr "" + +#: pkg/repos/pull.go:99 +msgid "Repository up to date" +msgstr "" + +#: pkg/repos/pull.go:156 +msgid "Git repository does not appear to be a valid ALR repo" +msgstr "" + +#: pkg/repos/pull.go:172 +msgid "" +"ALR repo's minumum ALR version is greater than the current version. Try " +"updating ALR if something doesn't work." +msgstr "" + +#: repo.go:78 repo.go:133 +msgid "Error opening config file" +msgstr "" + +#: repo.go:84 repo.go:139 +msgid "Error encoding config" +msgstr "" + +#: repo.go:125 +msgid "Repo does not exist" +msgstr "" + +#: repo.go:145 +msgid "Error removing repo directory" +msgstr "" + +#: repo.go:151 +msgid "Error removing packages from database" +msgstr "" + +#: upgrade.go:78 +msgid "Error checking for updates" +msgstr "" diff --git a/internal/translations/po/ru/default.po b/internal/translations/po/ru/default.po index e8bd30c..cad7f13 100644 --- a/internal/translations/po/ru/default.po +++ b/internal/translations/po/ru/default.po @@ -3,17 +3,65 @@ # msgid "" msgstr "" +"Project-Id-Version: \n" "PO-Revision-Date: 2025-01-22 14:23+0300\n" "Last-Translator: Maxim Slipenko \n" +"Language-Team: Russian\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Gtranslator 47.1\n" -"Project-Id-Version: \n" -"Language-Team: Russian\n" + +#: build.go:69 +msgid "Error pulling repositories" +msgstr "" + +#: build.go:75 +msgid "Unable to detect a supported package manager on the system" +msgstr "" + +#: build.go:86 +msgid "Error building package" +msgstr "" + +#: build.go:92 +msgid "Error getting working directory" +msgstr "" + +#: build.go:100 +msgid "Error moving the package" +msgstr "" + +#: fix.go:43 +msgid "Removing cache directory" +msgstr "" + +#: fix.go:47 +msgid "Unable to remove cache directory" +msgstr "" + +#: fix.go:51 +msgid "Rebuilding cache" +msgstr "" + +#: fix.go:55 +msgid "Unable to create new cache directory" +msgstr "" + +#: fix.go:61 +msgid "Error pulling repos" +msgstr "" + +#: fix.go:65 +msgid "Done" +msgstr "" + +#: helper.go:60 +msgid "No such helper command" +msgstr "" #: info.go:42 msgid "Print information about a package" @@ -27,10 +75,6 @@ msgstr "Показывать всю информацию, а не только msgid "Command info expected at least 1 argument, got %d" msgstr "" -#: info.go:65 -msgid "Error pulling repositories" -msgstr "" - #: info.go:71 msgid "Error finding packages" msgstr "" @@ -47,6 +91,34 @@ msgstr "" msgid "Error encoding script variables" msgstr "" +#: install.go:55 +msgid "Command install expected at least 1 argument, got %d" +msgstr "" + +#: install.go:88 +msgid "Error getting packages" +msgstr "" + +#: install.go:97 +msgid "Error iterating over packages" +msgstr "" + +#: install.go:113 +msgid "Command remove expected at least 1 argument, got %d" +msgstr "" + +#: install.go:125 +msgid "Error removing packages" +msgstr "" + +#: internal/cliutils/prompt.go:80 +msgid "User chose not to continue after reading script" +msgstr "" + +#: internal/cliutils/prompt.go:114 +msgid "Error prompting for choice of package" +msgstr "" + #: internal/config/config.go:63 msgid "Error opening config file, using defaults" msgstr "" @@ -83,6 +155,179 @@ msgstr "" msgid "Unable to create package cache directory" msgstr "" +#: internal/config/lang.go:50 +msgid "Error parsing system language" +msgstr "" + +#: internal/db/db.go:131 +msgid "Database version mismatch; resetting" +msgstr "" + +#: internal/db/db.go:135 +msgid "" +"Database version does not exist. Run alr fix if something isn't working." +msgstr "" + +#: internal/db/db_legacy.go:101 +msgid "Error opening database" +msgstr "" + +#: internal/dl/dl.go:170 +msgid "Source can be updated, updating if required" +msgstr "" + +#: internal/dl/dl.go:201 +msgid "Source found in cache and linked to destination" +msgstr "" + +#: internal/dl/dl.go:208 +msgid "Source updated and linked to destination" +msgstr "" + #: internal/logger/log.go:44 msgid "ERROR" msgstr "ОШИБКА" + +#: internal/translations/translations.go:52 +msgid "Error creating new translator" +msgstr "" + +#: list.go:53 +msgid "Error initialization database" +msgstr "" + +#: list.go:87 +msgid "Error listing installed packages" +msgstr "" + +#: main.go:88 +msgid "" +"Running ALR as root is forbidden as it may cause catastrophic damage to your " +"system" +msgstr "" + +#: main.go:122 +msgid "Error while running app" +msgstr "" + +#: pkg/build/build.go:104 +msgid "Failed to prompt user to view build script" +msgstr "" + +#: pkg/build/build.go:108 +msgid "Building package" +msgstr "" + +#: pkg/build/build.go:152 +msgid "Downloading sources" +msgstr "" + +#: pkg/build/build.go:164 +msgid "Building package metadata" +msgstr "" + +#: pkg/build/build.go:186 +msgid "Compressing package" +msgstr "" + +#: pkg/build/build.go:323 +msgid "This package is already installed" +msgstr "" + +#: pkg/build/build.go:351 +msgid "Installing build dependencies" +msgstr "" + +#: pkg/build/build.go:393 +msgid "Installing dependencies" +msgstr "" + +#: pkg/build/build.go:435 +msgid "Executing version()" +msgstr "" + +#: pkg/build/build.go:460 +msgid "Executing prepare()" +msgstr "" + +#: pkg/build/build.go:470 +msgid "Executing build()" +msgstr "" + +#: pkg/build/build.go:482 +msgid "Executing package()" +msgstr "" + +#: pkg/build/build.go:557 +msgid "AutoProv is not implemented for this package format, so it's skiped" +msgstr "" + +#: pkg/build/build.go:568 +msgid "AutoReq is not implemented for this package format, so it's skiped" +msgstr "" + +#: pkg/build/build.go:759 +msgid "The checksums array must be the same length as sources" +msgstr "" + +#: pkg/build/findDeps.go:35 +msgid "Command not found on the system" +msgstr "" + +#: pkg/build/findDeps.go:82 +msgid "Provided dependency found" +msgstr "" + +#: pkg/build/findDeps.go:89 +msgid "Required dependency found" +msgstr "" + +#: pkg/build/install.go:42 +msgid "Error installing native packages" +msgstr "" + +#: pkg/build/install.go:79 +msgid "Error installing package" +msgstr "" + +#: pkg/repos/pull.go:75 +msgid "Pulling repository" +msgstr "" + +#: pkg/repos/pull.go:99 +msgid "Repository up to date" +msgstr "" + +#: pkg/repos/pull.go:156 +msgid "Git repository does not appear to be a valid ALR repo" +msgstr "" + +#: pkg/repos/pull.go:172 +msgid "" +"ALR repo's minumum ALR version is greater than the current version. Try " +"updating ALR if something doesn't work." +msgstr "" + +#: repo.go:78 repo.go:133 +msgid "Error opening config file" +msgstr "" + +#: repo.go:84 repo.go:139 +msgid "Error encoding config" +msgstr "" + +#: repo.go:125 +msgid "Repo does not exist" +msgstr "" + +#: repo.go:145 +msgid "Error removing repo directory" +msgstr "" + +#: repo.go:151 +msgid "Error removing packages from database" +msgstr "" + +#: upgrade.go:78 +msgid "Error checking for updates" +msgstr "" diff --git a/internal/translations/translations.go b/internal/translations/translations.go index 4e97b2a..42fc2c7 100644 --- a/internal/translations/translations.go +++ b/internal/translations/translations.go @@ -23,6 +23,7 @@ import ( "context" "embed" "io/fs" + "log/slog" "os" "path" "sync" @@ -32,8 +33,6 @@ import ( "go.elara.ws/logger" "go.elara.ws/translate" "golang.org/x/text/language" - - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx" ) //go:embed files @@ -47,11 +46,11 @@ var ( func Translator(ctx context.Context) *translate.Translator { mu.Lock() defer mu.Unlock() - log := loggerctx.From(ctx) if translator == nil { t, err := translate.NewFromFS(translationFS) if err != nil { - log.Fatal("Error creating new translator").Err(err).Send() + slog.Error(gotext.Get("Error creating new translator"), "err", err) + os.Exit(1) } translator = &t } diff --git a/list.go b/list.go index eadf491..e8f0a02 100644 --- a/list.go +++ b/list.go @@ -21,13 +21,15 @@ package main import ( "fmt" + "log/slog" + "os" + "github.com/leonelquinteros/gotext" "github.com/urfave/cli/v2" "golang.org/x/exp/slices" "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db" - "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" ) @@ -44,17 +46,18 @@ var listCmd = &cli.Command{ }, Action: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) cfg := config.New() db := database.New(cfg) err := db.Init(ctx) if err != nil { - log.Fatal("Error initialization database").Err(err).Send() + slog.Error(gotext.Get("Error initialization database"), "err", err) + os.Exit(1) } rs := repos.New(cfg, db) err = rs.Pull(ctx, cfg.Repos(ctx)) if err != nil { - log.Fatal("Error pulling repositories").Err(err).Send() + slog.Error(gotext.Get("Error pulling repositories"), "err", err) + os.Exit(1) } where := "true" @@ -66,7 +69,8 @@ var listCmd = &cli.Command{ result, err := db.GetPkgs(ctx, where, args...) if err != nil { - log.Fatal("Error getting packages").Err(err).Send() + slog.Error(gotext.Get("Error getting packages"), "err", err) + os.Exit(1) } defer result.Close() @@ -74,12 +78,14 @@ var listCmd = &cli.Command{ if c.Bool("installed") { mgr := manager.Detect() if mgr == nil { - log.Fatal("Unable to detect a supported package manager on the system").Send() + slog.Error(gotext.Get("Unable to detect a supported package manager on the system")) + os.Exit(1) } installed, err = mgr.ListInstalled(&manager.Opts{AsRoot: false}) if err != nil { - log.Fatal("Error listing installed packages").Err(err).Send() + slog.Error(gotext.Get("Error listing installed packages"), "err", err) + os.Exit(1) } } @@ -108,7 +114,8 @@ var listCmd = &cli.Command{ } if err != nil { - log.Fatal("Error iterating over packages").Err(err).Send() + slog.Error(gotext.Get("Error iterating over packages"), "err", err) + os.Exit(1) } return nil diff --git a/main.go b/main.go index f609daa..c9b3a05 100644 --- a/main.go +++ b/main.go @@ -21,20 +21,19 @@ package main import ( "context" + "log/slog" "os" "os/signal" "strings" "syscall" + "github.com/leonelquinteros/gotext" "github.com/mattn/go-isatty" "github.com/urfave/cli/v2" - oldLogger "go.elara.ws/logger" - "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/translations" - "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/internal/logger" @@ -83,11 +82,11 @@ func GetApp() *cli.App { }, Before: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) cmd := c.Args().First() if cmd != "helper" && !config.Config(ctx).Unsafe.AllowRunAsRoot && os.Geteuid() == 0 { - log.Fatal("Running ALR as root is forbidden as it may cause catastrophic damage to your system").Send() + slog.Error(gotext.Get("Running ALR as root is forbidden as it may cause catastrophic damage to your system")) + os.Exit(1) } if trimmed := strings.TrimSpace(c.String("pm-args")); trimmed != "" { @@ -111,8 +110,6 @@ func main() { app := GetApp() ctx := context.Background() - log := translations.NewLogger(ctx, oldLogger.NewCLI(os.Stderr), config.Language(ctx)) - ctx = loggerctx.With(ctx, log) // Set the root command to the one set in the ALR config manager.DefaultRootCmd = config.Config(ctx).RootCmd @@ -122,6 +119,6 @@ func main() { err := app.RunContext(ctx, os.Args) if err != nil { - log.Error("Error while running app").Err(err).Send() + slog.Error(gotext.Get("Error while running app"), "err", err) } } diff --git a/pkg/build/build.go b/pkg/build/build.go index 74af4a0..249529a 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -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 { diff --git a/pkg/build/findDeps.go b/pkg/build/findDeps.go index 7a40ec9..0090005 100644 --- a/pkg/build/findDeps.go +++ b/pkg/build/findDeps.go @@ -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) }) } diff --git a/pkg/build/install.go b/pkg/build/install.go index ea81eea..902fb93 100644 --- a/pkg/build/install.go +++ b/pkg/build/install.go @@ -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) // Логируем и завершаем выполнение при ошибке установки } } diff --git a/pkg/loggerctx/log.go b/pkg/loggerctx/log.go deleted file mode 100644 index 4fc8d8c..0000000 --- a/pkg/loggerctx/log.go +++ /dev/null @@ -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 . - -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() - } -} diff --git a/pkg/repos/pull.go b/pkg/repos/pull.go index 9a68c8c..fdad00b 100644 --- a/pkg/repos/pull.go +++ b/pkg/repos/pull.go @@ -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) } } } diff --git a/repo.go b/repo.go index c96e2ec..53865ed 100644 --- a/repo.go +++ b/repo.go @@ -20,9 +20,11 @@ package main import ( + "log/slog" "os" "path/filepath" + "github.com/leonelquinteros/gotext" "github.com/pelletier/go-toml/v2" "github.com/urfave/cli/v2" "golang.org/x/exp/slices" @@ -30,7 +32,6 @@ import ( "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" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos" ) @@ -54,7 +55,6 @@ var addrepoCmd = &cli.Command{ }, Action: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) name := c.String("name") repoURL := c.String("url") @@ -63,7 +63,8 @@ var addrepoCmd = &cli.Command{ for _, repo := range cfg.Repos { if repo.URL == repoURL { - log.Fatal("Repo already exists").Str("name", repo.Name).Send() + slog.Error("Repo already exists", "name", repo.Name) + os.Exit(1) } } @@ -74,17 +75,20 @@ var addrepoCmd = &cli.Command{ cfgFl, err := os.Create(config.GetPaths(ctx).ConfigPath) if err != nil { - log.Fatal("Error opening config file").Err(err).Send() + slog.Error(gotext.Get("Error opening config file"), "err", err) + os.Exit(1) } err = toml.NewEncoder(cfgFl).Encode(cfg) if err != nil { - log.Fatal("Error encoding config").Err(err).Send() + slog.Error(gotext.Get("Error encoding config"), "err", err) + os.Exit(1) } err = repos.Pull(ctx, cfg.Repos) if err != nil { - log.Fatal("Error pulling repos").Err(err).Send() + slog.Error(gotext.Get("Error pulling repos"), "err", err) + os.Exit(1) } return nil @@ -105,7 +109,6 @@ var removerepoCmd = &cli.Command{ }, Action: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) name := c.String("name") cfg := config.Config(ctx) @@ -119,29 +122,34 @@ var removerepoCmd = &cli.Command{ } } if !found { - log.Fatal("Repo does not exist").Str("name", name).Send() + slog.Error(gotext.Get("Repo does not exist"), "name", name) + os.Exit(1) } cfg.Repos = slices.Delete(cfg.Repos, index, index+1) cfgFl, err := os.Create(config.GetPaths(ctx).ConfigPath) if err != nil { - log.Fatal("Error opening config file").Err(err).Send() + slog.Error(gotext.Get("Error opening config file"), "err", err) + os.Exit(1) } err = toml.NewEncoder(cfgFl).Encode(&cfg) if err != nil { - log.Fatal("Error encoding config").Err(err).Send() + slog.Error(gotext.Get("Error encoding config"), "err", err) + os.Exit(1) } err = os.RemoveAll(filepath.Join(config.GetPaths(ctx).RepoDir, name)) if err != nil { - log.Fatal("Error removing repo directory").Err(err).Send() + slog.Error(gotext.Get("Error removing repo directory"), "err", err) + os.Exit(1) } err = db.DeletePkgs(ctx, "repository = ?", name) if err != nil { - log.Fatal("Error removing packages from database").Err(err).Send() + slog.Error(gotext.Get("Error removing packages from database"), "err", err) + os.Exit(1) } return nil @@ -154,10 +162,10 @@ var refreshCmd = &cli.Command{ Aliases: []string{"ref"}, Action: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) err := repos.Pull(ctx, config.Config(ctx).Repos) if err != nil { - log.Fatal("Error pulling repos").Err(err).Send() + slog.Error(gotext.Get("Error pulling repos"), "err", err) + os.Exit(1) } return nil }, diff --git a/upgrade.go b/upgrade.go index af48c09..c64f33c 100644 --- a/upgrade.go +++ b/upgrade.go @@ -22,8 +22,12 @@ package main import ( "context" "fmt" + "log/slog" + "os" + "github.com/leonelquinteros/gotext" "github.com/urfave/cli/v2" + "go.elara.ws/logger/log" "go.elara.ws/vercmp" "golang.org/x/exp/maps" "golang.org/x/exp/slices" @@ -33,7 +37,6 @@ import ( "gitea.plemya-x.ru/Plemya-x/ALR/internal/types" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/build" "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" ) @@ -51,26 +54,29 @@ var upgradeCmd = &cli.Command{ }, Action: func(c *cli.Context) error { ctx := c.Context - log := loggerctx.From(ctx) info, err := distro.ParseOSRelease(ctx) if err != nil { - log.Fatal("Error parsing os-release file").Err(err).Send() + slog.Error(gotext.Get("Error parsing os-release file"), "err", err) + os.Exit(1) } mgr := manager.Detect() if mgr == nil { - log.Fatal("Unable to detect a supported package manager on the system").Send() + slog.Error(gotext.Get("Unable to detect a supported package manager on the system")) + os.Exit(1) } err = repos.Pull(ctx, config.Config(ctx).Repos) if err != nil { - log.Fatal("Error pulling repos").Err(err).Send() + slog.Error(gotext.Get("Error pulling repos"), "err", err) + os.Exit(1) } updates, err := checkForUpdates(ctx, mgr, info) if err != nil { - log.Fatal("Error checking for updates").Err(err).Send() + slog.Error(gotext.Get("Error checking for updates"), "err", err) + os.Exit(1) } if len(updates) > 0 {