forked from Plemya-x/ALR
chore: replace old logger with new
This commit is contained in:
parent
ac35b4d71d
commit
a6076b1253
1
Makefile
1
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
|
19
build.go
19
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
19
fix.go
19
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
|
||||
},
|
||||
|
13
helper.go
13
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{
|
||||
|
35
install.go
35
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
|
||||
|
@ -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 {
|
||||
|
@ -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())
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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 ""
|
||||
|
@ -3,17 +3,65 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2025-01-22 14:23+0300\n"
|
||||
"Last-Translator: Maxim Slipenko <maks1ms@alt-gnome.ru>\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 ""
|
||||
|
@ -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
|
||||
}
|
||||
|
23
list.go
23
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
|
||||
|
13
main.go
13
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)
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
36
repo.go
36
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
|
||||
},
|
||||
|
18
upgrade.go
18
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 {
|
||||
|
Loading…
Reference in New Issue
Block a user