forked from Plemya-x/ALR
		
	chore: replace old logger with new
This commit is contained in:
		
							
								
								
									
										1
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
									
									
									
									
								
							@@ -64,4 +64,5 @@ fmt:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
i18n:
 | 
					i18n:
 | 
				
			||||||
	$(XGOTEXT_BIN)  --output ./internal/translations/default.pot
 | 
						$(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
 | 
						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
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/urfave/cli/v2"
 | 
						"github.com/urfave/cli/v2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
						"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/osutils"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
						"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/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/manager"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -57,7 +58,6 @@ var buildCmd = &cli.Command{
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		ctx := c.Context
 | 
							ctx := c.Context
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		script := c.String("script")
 | 
							script := c.String("script")
 | 
				
			||||||
		if c.String("package") != "" {
 | 
							if c.String("package") != "" {
 | 
				
			||||||
@@ -66,12 +66,14 @@ var buildCmd = &cli.Command{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		err := repos.Pull(ctx, config.Config(ctx).Repos)
 | 
							err := repos.Pull(ctx, config.Config(ctx).Repos)
 | 
				
			||||||
		if err != nil {
 | 
							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()
 | 
							mgr := manager.Detect()
 | 
				
			||||||
		if mgr == nil {
 | 
							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{
 | 
							pkgPaths, _, err := build.BuildPackage(ctx, types.BuildOpts{
 | 
				
			||||||
@@ -81,19 +83,22 @@ var buildCmd = &cli.Command{
 | 
				
			|||||||
			Interactive: c.Bool("interactive"),
 | 
								Interactive: c.Bool("interactive"),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		if err != nil {
 | 
							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()
 | 
							wd, err := os.Getwd()
 | 
				
			||||||
		if err != nil {
 | 
							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 {
 | 
							for _, pkgPath := range pkgPaths {
 | 
				
			||||||
			name := filepath.Base(pkgPath)
 | 
								name := filepath.Base(pkgPath)
 | 
				
			||||||
			err = osutils.Move(pkgPath, filepath.Join(wd, name))
 | 
								err = osutils.Move(pkgPath, filepath.Join(wd, name))
 | 
				
			||||||
			if err != nil {
 | 
								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
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/urfave/cli/v2"
 | 
						"github.com/urfave/cli/v2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
						"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/db"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
					 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -35,31 +36,33 @@ var fixCmd = &cli.Command{
 | 
				
			|||||||
	Usage: "Attempt to fix problems with ALR",
 | 
						Usage: "Attempt to fix problems with ALR",
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		ctx := c.Context
 | 
							ctx := c.Context
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		db.Close()
 | 
							db.Close()
 | 
				
			||||||
		paths := config.GetPaths(ctx)
 | 
							paths := config.GetPaths(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		log.Info("Removing cache directory").Send()
 | 
							slog.Info(gotext.Get("Removing cache directory"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err := os.RemoveAll(paths.CacheDir)
 | 
							err := os.RemoveAll(paths.CacheDir)
 | 
				
			||||||
		if err != nil {
 | 
							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)
 | 
							err = os.MkdirAll(paths.CacheDir, 0o755)
 | 
				
			||||||
		if err != nil {
 | 
							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)
 | 
							err = repos.Pull(ctx, config.Config(ctx).Repos)
 | 
				
			||||||
		if err != nil {
 | 
							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
 | 
							return nil
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								helper.go
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								helper.go
									
									
									
									
									
								
							@@ -21,9 +21,11 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/urfave/cli/v2"
 | 
						"github.com/urfave/cli/v2"
 | 
				
			||||||
	"mvdan.cc/sh/v3/expand"
 | 
						"mvdan.cc/sh/v3/expand"
 | 
				
			||||||
	"mvdan.cc/sh/v3/interp"
 | 
						"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/cpu"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/helpers"
 | 
						"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/distro"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var helperCmd = &cli.Command{
 | 
					var helperCmd = &cli.Command{
 | 
				
			||||||
@@ -49,7 +50,6 @@ var helperCmd = &cli.Command{
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		ctx := c.Context
 | 
							ctx := c.Context
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if c.Args().Len() < 1 {
 | 
							if c.Args().Len() < 1 {
 | 
				
			||||||
			cli.ShowSubcommandHelpAndExit(c, 1)
 | 
								cli.ShowSubcommandHelpAndExit(c, 1)
 | 
				
			||||||
@@ -57,17 +57,20 @@ var helperCmd = &cli.Command{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		helper, ok := helpers.Helpers[c.Args().First()]
 | 
							helper, ok := helpers.Helpers[c.Args().First()]
 | 
				
			||||||
		if !ok {
 | 
							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()
 | 
							wd, err := os.Getwd()
 | 
				
			||||||
		if err != nil {
 | 
							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)
 | 
							info, err := distro.ParseOSRelease(ctx)
 | 
				
			||||||
		if err != nil {
 | 
							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{
 | 
							hc := interp.HandlerContext{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										35
									
								
								install.go
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								install.go
									
									
									
									
									
								
							@@ -21,7 +21,10 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/urfave/cli/v2"
 | 
						"github.com/urfave/cli/v2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
 | 
						"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/db"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
						"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/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/manager"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -47,26 +49,29 @@ var installCmd = &cli.Command{
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		ctx := c.Context
 | 
							ctx := c.Context
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		args := c.Args()
 | 
							args := c.Args()
 | 
				
			||||||
		if args.Len() < 1 {
 | 
							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()
 | 
							mgr := manager.Detect()
 | 
				
			||||||
		if mgr == nil {
 | 
							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)
 | 
							err := repos.Pull(ctx, config.Config(ctx).Repos)
 | 
				
			||||||
		if err != nil {
 | 
							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())
 | 
							found, notFound, err := repos.FindPkgs(ctx, args.Slice())
 | 
				
			||||||
		if err != nil {
 | 
							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"))
 | 
							pkgs := cliutils.FlattenPkgs(ctx, found, "install", c.Bool("interactive"))
 | 
				
			||||||
@@ -78,10 +83,10 @@ var installCmd = &cli.Command{
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	BashComplete: func(c *cli.Context) {
 | 
						BashComplete: func(c *cli.Context) {
 | 
				
			||||||
		log := loggerctx.From(c.Context)
 | 
					 | 
				
			||||||
		result, err := db.GetPkgs(c.Context, "true")
 | 
							result, err := db.GetPkgs(c.Context, "true")
 | 
				
			||||||
		if err != nil {
 | 
							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()
 | 
							defer result.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,7 +94,8 @@ var installCmd = &cli.Command{
 | 
				
			|||||||
			var pkg db.Package
 | 
								var pkg db.Package
 | 
				
			||||||
			err = result.StructScan(&pkg)
 | 
								err = result.StructScan(&pkg)
 | 
				
			||||||
			if err != nil {
 | 
								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)
 | 
								fmt.Println(pkg.Name)
 | 
				
			||||||
@@ -102,21 +108,22 @@ var removeCmd = &cli.Command{
 | 
				
			|||||||
	Usage:   "Remove an installed package",
 | 
						Usage:   "Remove an installed package",
 | 
				
			||||||
	Aliases: []string{"rm"},
 | 
						Aliases: []string{"rm"},
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		log := loggerctx.From(c.Context)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		args := c.Args()
 | 
							args := c.Args()
 | 
				
			||||||
		if args.Len() < 1 {
 | 
							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()
 | 
							mgr := manager.Detect()
 | 
				
			||||||
		if mgr == nil {
 | 
							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()...)
 | 
							err := mgr.Remove(nil, c.Args().Slice()...)
 | 
				
			||||||
		if err != nil {
 | 
							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
 | 
							return nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,16 +21,17 @@ package cliutils
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/AlecAivazis/survey/v2"
 | 
						"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/config"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
 | 
						"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/pager"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/translations"
 | 
						"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
 | 
					// 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
 | 
					// shows it if they answer yes, then asks if they'd still like to
 | 
				
			||||||
// continue, and exits if they answer no.
 | 
					// continue, and exits if they answer no.
 | 
				
			||||||
func PromptViewScript(ctx context.Context, script, name, style string, interactive bool) error {
 | 
					func PromptViewScript(ctx context.Context, script, name, style string, interactive bool) error {
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if !interactive {
 | 
						if !interactive {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -78,7 +77,8 @@ func PromptViewScript(ctx context.Context, script, name, style string, interacti
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if !cont {
 | 
							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
 | 
					// 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.
 | 
					// 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 {
 | 
					func FlattenPkgs(ctx context.Context, found map[string][]db.Package, verb string, interactive bool) []db.Package {
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
	var outPkgs []db.Package
 | 
						var outPkgs []db.Package
 | 
				
			||||||
	for _, pkgs := range found {
 | 
						for _, pkgs := range found {
 | 
				
			||||||
		if len(pkgs) > 1 && interactive {
 | 
							if len(pkgs) > 1 && interactive {
 | 
				
			||||||
			choice, err := PkgPrompt(ctx, pkgs, verb, interactive)
 | 
								choice, err := PkgPrompt(ctx, pkgs, verb, interactive)
 | 
				
			||||||
			if err != nil {
 | 
								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)
 | 
								outPkgs = append(outPkgs, choice)
 | 
				
			||||||
		} else if len(pkgs) == 1 || !interactive {
 | 
							} else if len(pkgs) == 1 || !interactive {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,13 +21,13 @@ package config
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"golang.org/x/text/language"
 | 
						"golang.org/x/text/language"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
@@ -43,12 +43,12 @@ var (
 | 
				
			|||||||
func Language(ctx context.Context) language.Tag {
 | 
					func Language(ctx context.Context) language.Tag {
 | 
				
			||||||
	langMtx.Lock()
 | 
						langMtx.Lock()
 | 
				
			||||||
	defer langMtx.Unlock()
 | 
						defer langMtx.Unlock()
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
	if !langSet {
 | 
						if !langSet {
 | 
				
			||||||
		syslang := SystemLang()
 | 
							syslang := SystemLang()
 | 
				
			||||||
		tag, err := language.Parse(syslang)
 | 
							tag, err := language.Parse(syslang)
 | 
				
			||||||
		if err != nil {
 | 
							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()
 | 
							base, _ := tag.Base()
 | 
				
			||||||
		lang = language.Make(base.String())
 | 
							lang = language.Make(base.String())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,11 +21,12 @@ package db
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/jmoiron/sqlx"
 | 
						"github.com/jmoiron/sqlx"
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
						"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.
 | 
					// 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 {
 | 
					func (d *Database) initDB(ctx context.Context) error {
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
	d.conn = d.conn.Unsafe()
 | 
						d.conn = d.conn.Unsafe()
 | 
				
			||||||
	conn := d.conn
 | 
						conn := d.conn
 | 
				
			||||||
	_, err := conn.ExecContext(ctx, `
 | 
						_, err := conn.ExecContext(ctx, `
 | 
				
			||||||
@@ -128,11 +128,11 @@ func (d *Database) initDB(ctx context.Context) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ver, ok := d.GetVersion(ctx)
 | 
						ver, ok := d.GetVersion(ctx)
 | 
				
			||||||
	if ok && ver != CurrentVersion {
 | 
						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)
 | 
							d.reset(ctx)
 | 
				
			||||||
		return d.initDB(ctx)
 | 
							return d.initDB(ctx)
 | 
				
			||||||
	} else if !ok {
 | 
						} 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)
 | 
							return d.addVersion(ctx, CurrentVersion)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,12 +18,14 @@ package db
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/jmoiron/sqlx"
 | 
						"github.com/jmoiron/sqlx"
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DB returns the ALR database.
 | 
					// DB returns the ALR database.
 | 
				
			||||||
@@ -92,12 +94,12 @@ var (
 | 
				
			|||||||
// Deprecated: For legacy only
 | 
					// Deprecated: For legacy only
 | 
				
			||||||
func GetInstance(ctx context.Context) *Database {
 | 
					func GetInstance(ctx context.Context) *Database {
 | 
				
			||||||
	dbOnce.Do(func() {
 | 
						dbOnce.Do(func() {
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
		cfg := config.GetInstance(ctx)
 | 
							cfg := config.GetInstance(ctx)
 | 
				
			||||||
		database = New(cfg)
 | 
							database = New(cfg)
 | 
				
			||||||
		err := database.Init(ctx)
 | 
							err := database.Init(ctx)
 | 
				
			||||||
		if err != nil {
 | 
							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
 | 
						return database
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,11 +31,13 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"hash"
 | 
						"hash"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/PuerkitoBio/purell"
 | 
						"github.com/PuerkitoBio/purell"
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/vmihailenco/msgpack/v5"
 | 
						"github.com/vmihailenco/msgpack/v5"
 | 
				
			||||||
	"golang.org/x/crypto/blake2b"
 | 
						"golang.org/x/crypto/blake2b"
 | 
				
			||||||
	"golang.org/x/crypto/blake2s"
 | 
						"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/config"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/dlcache"
 | 
						"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 загружает файл или каталог с использованием указанных параметров
 | 
					// Функция Download загружает файл или каталог с использованием указанных параметров
 | 
				
			||||||
func Download(ctx context.Context, opts Options) (err error) {
 | 
					func Download(ctx context.Context, opts Options) (err error) {
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
	cfg := config.GetInstance(ctx)
 | 
						cfg := config.GetInstance(ctx)
 | 
				
			||||||
	dc := dlcache.New(cfg)
 | 
						dc := dlcache.New(cfg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -166,7 +166,11 @@ func Download(ctx context.Context, opts Options) (err error) {
 | 
				
			|||||||
	if ok {
 | 
						if ok {
 | 
				
			||||||
		var updated bool
 | 
							var updated bool
 | 
				
			||||||
		if d, ok := d.(UpdatingDownloader); ok {
 | 
							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{
 | 
								updated, err = d.Update(Options{
 | 
				
			||||||
				Hash:          opts.Hash,
 | 
									Hash:          opts.Hash,
 | 
				
			||||||
@@ -193,10 +197,18 @@ func Download(ctx context.Context, opts Options) (err error) {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if ok && !updated {
 | 
								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
 | 
									return nil
 | 
				
			||||||
			} else if ok {
 | 
								} 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
 | 
									return nil
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} 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)
 | 
						cacheDir, err = dc.New(ctx, opts.URL)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,54 @@ msgstr ""
 | 
				
			|||||||
"Content-Transfer-Encoding: 8bit\n"
 | 
					"Content-Transfer-Encoding: 8bit\n"
 | 
				
			||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\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
 | 
					#: info.go:42
 | 
				
			||||||
msgid "Print information about a package"
 | 
					msgid "Print information about a package"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -21,10 +69,6 @@ msgstr ""
 | 
				
			|||||||
msgid "Command info expected at least 1 argument, got %d"
 | 
					msgid "Command info expected at least 1 argument, got %d"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: info.go:65
 | 
					 | 
				
			||||||
msgid "Error pulling repositories"
 | 
					 | 
				
			||||||
msgstr ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#: info.go:71
 | 
					#: info.go:71
 | 
				
			||||||
msgid "Error finding packages"
 | 
					msgid "Error finding packages"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -37,11 +81,38 @@ msgstr ""
 | 
				
			|||||||
msgid "Error resolving overrides"
 | 
					msgid "Error resolving overrides"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: info.go:105
 | 
					#: info.go:105 info.go:111
 | 
				
			||||||
#: info.go:111
 | 
					 | 
				
			||||||
msgid "Error encoding script variables"
 | 
					msgid "Error encoding script variables"
 | 
				
			||||||
msgstr ""
 | 
					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
 | 
					#: internal/config/config.go:63
 | 
				
			||||||
msgid "Error opening config file, using defaults"
 | 
					msgid "Error opening config file, using defaults"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -78,7 +149,179 @@ msgstr ""
 | 
				
			|||||||
msgid "Unable to create package cache directory"
 | 
					msgid "Unable to create package cache directory"
 | 
				
			||||||
msgstr ""
 | 
					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
 | 
					#: internal/logger/log.go:44
 | 
				
			||||||
msgid "ERROR"
 | 
					msgid "ERROR"
 | 
				
			||||||
msgstr ""
 | 
					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 ""
 | 
					msgid ""
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					"Project-Id-Version: \n"
 | 
				
			||||||
"PO-Revision-Date: 2025-01-22 14:23+0300\n"
 | 
					"PO-Revision-Date: 2025-01-22 14:23+0300\n"
 | 
				
			||||||
"Last-Translator: Maxim Slipenko <maks1ms@alt-gnome.ru>\n"
 | 
					"Last-Translator: Maxim Slipenko <maks1ms@alt-gnome.ru>\n"
 | 
				
			||||||
 | 
					"Language-Team: Russian\n"
 | 
				
			||||||
"Language: ru\n"
 | 
					"Language: ru\n"
 | 
				
			||||||
"MIME-Version: 1.0\n"
 | 
					"MIME-Version: 1.0\n"
 | 
				
			||||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
					"Content-Type: text/plain; charset=UTF-8\n"
 | 
				
			||||||
"Content-Transfer-Encoding: 8bit\n"
 | 
					"Content-Transfer-Encoding: 8bit\n"
 | 
				
			||||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 | 
					"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 | 
				
			||||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 | 
					"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 | 
				
			||||||
"X-Generator: Gtranslator 47.1\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
 | 
					#: info.go:42
 | 
				
			||||||
msgid "Print information about a package"
 | 
					msgid "Print information about a package"
 | 
				
			||||||
@@ -27,10 +75,6 @@ msgstr "Показывать всю информацию, а не только 
 | 
				
			|||||||
msgid "Command info expected at least 1 argument, got %d"
 | 
					msgid "Command info expected at least 1 argument, got %d"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: info.go:65
 | 
					 | 
				
			||||||
msgid "Error pulling repositories"
 | 
					 | 
				
			||||||
msgstr ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#: info.go:71
 | 
					#: info.go:71
 | 
				
			||||||
msgid "Error finding packages"
 | 
					msgid "Error finding packages"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -47,6 +91,34 @@ msgstr ""
 | 
				
			|||||||
msgid "Error encoding script variables"
 | 
					msgid "Error encoding script variables"
 | 
				
			||||||
msgstr ""
 | 
					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
 | 
					#: internal/config/config.go:63
 | 
				
			||||||
msgid "Error opening config file, using defaults"
 | 
					msgid "Error opening config file, using defaults"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -83,6 +155,179 @@ msgstr ""
 | 
				
			|||||||
msgid "Unable to create package cache directory"
 | 
					msgid "Unable to create package cache directory"
 | 
				
			||||||
msgstr ""
 | 
					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
 | 
					#: internal/logger/log.go:44
 | 
				
			||||||
msgid "ERROR"
 | 
					msgid "ERROR"
 | 
				
			||||||
msgstr "ОШИБКА"
 | 
					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"
 | 
						"context"
 | 
				
			||||||
	"embed"
 | 
						"embed"
 | 
				
			||||||
	"io/fs"
 | 
						"io/fs"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
@@ -32,8 +33,6 @@ import (
 | 
				
			|||||||
	"go.elara.ws/logger"
 | 
						"go.elara.ws/logger"
 | 
				
			||||||
	"go.elara.ws/translate"
 | 
						"go.elara.ws/translate"
 | 
				
			||||||
	"golang.org/x/text/language"
 | 
						"golang.org/x/text/language"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//go:embed files
 | 
					//go:embed files
 | 
				
			||||||
@@ -47,11 +46,11 @@ var (
 | 
				
			|||||||
func Translator(ctx context.Context) *translate.Translator {
 | 
					func Translator(ctx context.Context) *translate.Translator {
 | 
				
			||||||
	mu.Lock()
 | 
						mu.Lock()
 | 
				
			||||||
	defer mu.Unlock()
 | 
						defer mu.Unlock()
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
	if translator == nil {
 | 
						if translator == nil {
 | 
				
			||||||
		t, err := translate.NewFromFS(translationFS)
 | 
							t, err := translate.NewFromFS(translationFS)
 | 
				
			||||||
		if err != nil {
 | 
							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
 | 
							translator = &t
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								list.go
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								list.go
									
									
									
									
									
								
							@@ -21,13 +21,15 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/urfave/cli/v2"
 | 
						"github.com/urfave/cli/v2"
 | 
				
			||||||
	"golang.org/x/exp/slices"
 | 
						"golang.org/x/exp/slices"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
				
			||||||
	database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
 | 
						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/manager"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -44,17 +46,18 @@ var listCmd = &cli.Command{
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		ctx := c.Context
 | 
							ctx := c.Context
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
		cfg := config.New()
 | 
							cfg := config.New()
 | 
				
			||||||
		db := database.New(cfg)
 | 
							db := database.New(cfg)
 | 
				
			||||||
		err := db.Init(ctx)
 | 
							err := db.Init(ctx)
 | 
				
			||||||
		if err != nil {
 | 
							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)
 | 
							rs := repos.New(cfg, db)
 | 
				
			||||||
		err = rs.Pull(ctx, cfg.Repos(ctx))
 | 
							err = rs.Pull(ctx, cfg.Repos(ctx))
 | 
				
			||||||
		if err != nil {
 | 
							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"
 | 
							where := "true"
 | 
				
			||||||
@@ -66,7 +69,8 @@ var listCmd = &cli.Command{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		result, err := db.GetPkgs(ctx, where, args...)
 | 
							result, err := db.GetPkgs(ctx, where, args...)
 | 
				
			||||||
		if err != nil {
 | 
							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()
 | 
							defer result.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -74,12 +78,14 @@ var listCmd = &cli.Command{
 | 
				
			|||||||
		if c.Bool("installed") {
 | 
							if c.Bool("installed") {
 | 
				
			||||||
			mgr := manager.Detect()
 | 
								mgr := manager.Detect()
 | 
				
			||||||
			if mgr == nil {
 | 
								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})
 | 
								installed, err = mgr.ListInstalled(&manager.Opts{AsRoot: false})
 | 
				
			||||||
			if err != nil {
 | 
								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 {
 | 
							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
 | 
							return nil
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								main.go
									
									
									
									
									
								
							@@ -21,20 +21,19 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"os/signal"
 | 
						"os/signal"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"syscall"
 | 
						"syscall"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/mattn/go-isatty"
 | 
						"github.com/mattn/go-isatty"
 | 
				
			||||||
	"github.com/urfave/cli/v2"
 | 
						"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/config"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
 | 
						"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/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/pkg/manager"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/logger"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/logger"
 | 
				
			||||||
@@ -83,11 +82,11 @@ func GetApp() *cli.App {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		Before: func(c *cli.Context) error {
 | 
							Before: func(c *cli.Context) error {
 | 
				
			||||||
			ctx := c.Context
 | 
								ctx := c.Context
 | 
				
			||||||
			log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			cmd := c.Args().First()
 | 
								cmd := c.Args().First()
 | 
				
			||||||
			if cmd != "helper" && !config.Config(ctx).Unsafe.AllowRunAsRoot && os.Geteuid() == 0 {
 | 
								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 != "" {
 | 
								if trimmed := strings.TrimSpace(c.String("pm-args")); trimmed != "" {
 | 
				
			||||||
@@ -111,8 +110,6 @@ func main() {
 | 
				
			|||||||
	app := GetApp()
 | 
						app := GetApp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx := context.Background()
 | 
						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
 | 
						// Set the root command to the one set in the ALR config
 | 
				
			||||||
	manager.DefaultRootCmd = config.Config(ctx).RootCmd
 | 
						manager.DefaultRootCmd = config.Config(ctx).RootCmd
 | 
				
			||||||
@@ -122,6 +119,6 @@ func main() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	err := app.RunContext(ctx, os.Args)
 | 
						err := app.RunContext(ctx, os.Args)
 | 
				
			||||||
	if err != nil {
 | 
						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"
 | 
						"encoding/hex"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"runtime"
 | 
						"runtime"
 | 
				
			||||||
@@ -38,7 +39,7 @@ import (
 | 
				
			|||||||
	_ "github.com/goreleaser/nfpm/v2/arch"
 | 
						_ "github.com/goreleaser/nfpm/v2/arch"
 | 
				
			||||||
	_ "github.com/goreleaser/nfpm/v2/deb"
 | 
						_ "github.com/goreleaser/nfpm/v2/deb"
 | 
				
			||||||
	_ "github.com/goreleaser/nfpm/v2/rpm"
 | 
						_ "github.com/goreleaser/nfpm/v2/rpm"
 | 
				
			||||||
	"go.elara.ws/logger/log"
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"mvdan.cc/sh/v3/expand"
 | 
						"mvdan.cc/sh/v3/expand"
 | 
				
			||||||
	"mvdan.cc/sh/v3/interp"
 | 
						"mvdan.cc/sh/v3/interp"
 | 
				
			||||||
	"mvdan.cc/sh/v3/syntax"
 | 
						"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/shutils/helpers"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
						"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/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/manager"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -64,7 +64,6 @@ import (
 | 
				
			|||||||
// Функция BuildPackage выполняет сборку скрипта по указанному пути. Возвращает два среза.
 | 
					// Функция BuildPackage выполняет сборку скрипта по указанному пути. Возвращает два среза.
 | 
				
			||||||
// Один содержит пути к собранным пакетам, другой - имена собранных пакетов.
 | 
					// Один содержит пути к собранным пакетам, другой - имена собранных пакетов.
 | 
				
			||||||
func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string, error) {
 | 
					func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string, error) {
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
	reposInstance := repos.GetInstance(ctx)
 | 
						reposInstance := repos.GetInstance(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	info, err := distro.ParseOSRelease(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)
 | 
						err = cliutils.PromptViewScript(ctx, opts.Script, vars.Name, config.Config(ctx).PagerStyle, opts.Interactive)
 | 
				
			||||||
	if err != nil {
 | 
						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
 | 
							return nil, nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	log.Info("Downloading sources").Send() // Записываем в лог загрузку источников
 | 
						slog.Info(gotext.Get("Downloading sources")) // Записываем в лог загрузку источников
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = getSources(ctx, dirs, vars) // Загружаем исходники
 | 
						err = getSources(ctx, dirs, vars) // Загружаем исходники
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -161,7 +161,7 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
				
			|||||||
		return nil, nil, err
 | 
							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) // Получаем формат пакета
 | 
						pkgFormat := getPkgFormat(opts.Manager) // Получаем формат пакета
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -183,7 +183,7 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
				
			|||||||
		return nil, nil, err
 | 
							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) // Упаковываем пакет
 | 
						err = packager.Package(pkgInfo, pkgFile) // Упаковываем пакет
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -308,7 +308,6 @@ func prepareDirs(dirs types.Directories) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Функция performChecks проверяет различные аспекты в системе, чтобы убедиться, что пакет может быть установлен.
 | 
					// Функция performChecks проверяет различные аспекты в системе, чтобы убедиться, что пакет может быть установлен.
 | 
				
			||||||
func performChecks(ctx context.Context, vars *types.BuildVars, interactive bool, installed map[string]string) (bool, error) {
 | 
					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) { // Проверяем совместимость архитектуры
 | 
						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)
 | 
							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 {
 | 
							if err != nil {
 | 
				
			||||||
@@ -321,10 +320,10 @@ func performChecks(ctx context.Context, vars *types.BuildVars, interactive bool,
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if instVer, ok := installed[vars.Name]; ok { // Если пакет уже установлен, выводим предупреждение
 | 
						if instVer, ok := installed[vars.Name]; ok { // Если пакет уже установлен, выводим предупреждение
 | 
				
			||||||
		log.Warn("This package is already installed").
 | 
							slog.Warn(gotext.Get("This package is already installed"),
 | 
				
			||||||
			Str("name", vars.Name).
 | 
								"name", vars.Name,
 | 
				
			||||||
			Str("version", instVer).
 | 
								"version", instVer,
 | 
				
			||||||
			Send()
 | 
							)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true, nil
 | 
						return true, nil
 | 
				
			||||||
@@ -337,7 +336,6 @@ type PackageFinder interface {
 | 
				
			|||||||
// Функция installBuildDeps устанавливает все зависимости сборки, которые еще не установлены, и возвращает
 | 
					// Функция installBuildDeps устанавливает все зависимости сборки, которые еще не установлены, и возвращает
 | 
				
			||||||
// срез, содержащий имена всех установленных пакетов.
 | 
					// срез, содержащий имена всех установленных пакетов.
 | 
				
			||||||
func installBuildDeps(ctx context.Context, repos PackageFinder, vars *types.BuildVars, opts types.BuildOpts) ([]string, error) {
 | 
					func installBuildDeps(ctx context.Context, repos PackageFinder, vars *types.BuildVars, opts types.BuildOpts) ([]string, error) {
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
	var buildDeps []string
 | 
						var buildDeps []string
 | 
				
			||||||
	if len(vars.BuildDepends) > 0 {
 | 
						if len(vars.BuildDepends) > 0 {
 | 
				
			||||||
		deps, err := removeAlreadyInstalled(opts, vars.BuildDepends)
 | 
							deps, err := removeAlreadyInstalled(opts, vars.BuildDepends)
 | 
				
			||||||
@@ -350,7 +348,7 @@ func installBuildDeps(ctx context.Context, repos PackageFinder, vars *types.Buil
 | 
				
			|||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		log.Info("Installing build dependencies").Send() // Логгируем установку зависимостей
 | 
							slog.Info(gotext.Get("Installing build dependencies")) // Логгируем установку зависимостей
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		flattened := cliutils.FlattenPkgs(ctx, found, "install", opts.Interactive) // Уплощаем список зависимостей
 | 
							flattened := cliutils.FlattenPkgs(ctx, found, "install", opts.Interactive) // Уплощаем список зависимостей
 | 
				
			||||||
		buildDeps = packageNames(flattened)
 | 
							buildDeps = packageNames(flattened)
 | 
				
			||||||
@@ -391,9 +389,8 @@ func installOptDeps(ctx context.Context, repos PackageFinder, vars *types.BuildV
 | 
				
			|||||||
// пакетов, которые она собрала, а также все зависимости, которые не были найдены в ALR репозитории,
 | 
					// пакетов, которые она собрала, а также все зависимости, которые не были найдены в ALR репозитории,
 | 
				
			||||||
// чтобы они могли быть установлены из системных репозиториев.
 | 
					// чтобы они могли быть установлены из системных репозиториев.
 | 
				
			||||||
func buildALRDeps(ctx context.Context, opts types.BuildOpts, vars *types.BuildVars) (builtPaths, builtNames, repoDeps []string, err error) {
 | 
					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 {
 | 
						if len(vars.Depends) > 0 {
 | 
				
			||||||
		log.Info("Installing dependencies").Send()
 | 
							slog.Info(gotext.Get("Installing dependencies"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		found, notFound, err := repos.FindPkgs(ctx, vars.Depends) // Поиск зависимостей
 | 
							found, notFound, err := repos.FindPkgs(ctx, vars.Depends) // Поиск зависимостей
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@@ -433,10 +430,9 @@ func buildALRDeps(ctx context.Context, opts types.BuildOpts, vars *types.BuildVa
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Функция executeFunctions выполняет специальные функции ALR, такие как version(), prepare() и т.д.
 | 
					// Функция executeFunctions выполняет специальные функции ALR, такие как version(), prepare() и т.д.
 | 
				
			||||||
func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Directories, vars *types.BuildVars) (err error) {
 | 
					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")
 | 
						version, ok := dec.GetFunc("version")
 | 
				
			||||||
	if ok {
 | 
						if ok {
 | 
				
			||||||
		log.Info("Executing version()").Send()
 | 
							slog.Info(gotext.Get("Executing version()"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		buf := &bytes.Buffer{}
 | 
							buf := &bytes.Buffer{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -456,12 +452,12 @@ func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Dire
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		vars.Version = newVer
 | 
							vars.Version = newVer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		log.Info("Updating version").Str("new", newVer).Send()
 | 
							slog.Info("Updating version", "new", newVer)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	prepare, ok := dec.GetFunc("prepare")
 | 
						prepare, ok := dec.GetFunc("prepare")
 | 
				
			||||||
	if ok {
 | 
						if ok {
 | 
				
			||||||
		log.Info("Executing prepare()").Send()
 | 
							slog.Info(gotext.Get("Executing prepare()"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err = prepare(ctx, interp.Dir(dirs.SrcDir))
 | 
							err = prepare(ctx, interp.Dir(dirs.SrcDir))
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@@ -471,7 +467,7 @@ func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Dire
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	build, ok := dec.GetFunc("build")
 | 
						build, ok := dec.GetFunc("build")
 | 
				
			||||||
	if ok {
 | 
						if ok {
 | 
				
			||||||
		log.Info("Executing build()").Send()
 | 
							slog.Info(gotext.Get("Executing build()"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err = build(ctx, interp.Dir(dirs.SrcDir))
 | 
							err = build(ctx, interp.Dir(dirs.SrcDir))
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@@ -483,24 +479,27 @@ func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Dire
 | 
				
			|||||||
	for {
 | 
						for {
 | 
				
			||||||
		packageFn, ok := dec.GetFunc("package")
 | 
							packageFn, ok := dec.GetFunc("package")
 | 
				
			||||||
		if ok {
 | 
							if ok {
 | 
				
			||||||
			log.Info("Executing package()").Send()
 | 
								slog.Info(gotext.Get("Executing package()"))
 | 
				
			||||||
			err = packageFn(ctx, interp.Dir(dirs.SrcDir))
 | 
								err = packageFn(ctx, interp.Dir(dirs.SrcDir))
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Проверка на наличие дополнительных функций package_*
 | 
							/*
 | 
				
			||||||
		packageFuncName := "package_"
 | 
								// Проверка на наличие дополнительных функций package_*
 | 
				
			||||||
		if packageFunc, ok := dec.GetFunc(packageFuncName); ok {
 | 
								packageFuncName := "package_"
 | 
				
			||||||
			log.Info("Executing " + packageFuncName).Send()
 | 
								if packageFunc, ok := dec.GetFunc(packageFuncName); ok {
 | 
				
			||||||
			err = packageFunc(ctx, interp.Dir(dirs.SrcDir))
 | 
									slog.Info("Executing " + packageFuncName)
 | 
				
			||||||
			if err != nil {
 | 
									err = packageFunc(ctx, interp.Dir(dirs.SrcDir))
 | 
				
			||||||
				return err
 | 
									if err != nil {
 | 
				
			||||||
 | 
										return err
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									break // Если больше нет функций package_*, выходим из цикла
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							*/
 | 
				
			||||||
			break // Если больше нет функций package_*, выходим из цикла
 | 
							break
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
@@ -555,7 +554,7 @@ func buildPkgMetadata(ctx context.Context, vars *types.BuildVars, dirs types.Dir
 | 
				
			|||||||
				return nil, err
 | 
									return nil, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} 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
 | 
									return nil, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} 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 загружает исходники скрипта.
 | 
					// Функция getSources загружает исходники скрипта.
 | 
				
			||||||
func getSources(ctx context.Context, dirs types.Directories, bv *types.BuildVars) error {
 | 
					func getSources(ctx context.Context, dirs types.Directories, bv *types.BuildVars) error {
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
	if len(bv.Sources) != len(bv.Checksums) {
 | 
						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 {
 | 
						for i, src := range bv.Sources {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,21 +19,20 @@ package build
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os/exec"
 | 
						"os/exec"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/goreleaser/nfpm/v2"
 | 
						"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/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 {
 | 
					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 {
 | 
						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
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,7 +63,7 @@ func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Dir
 | 
				
			|||||||
	cmd.Stdout = &out
 | 
						cmd.Stdout = &out
 | 
				
			||||||
	cmd.Stderr = &stderr
 | 
						cmd.Stderr = &stderr
 | 
				
			||||||
	if err := cmd.Run(); err != nil {
 | 
						if err := cmd.Run(); err != nil {
 | 
				
			||||||
		log.Error(stderr.String()).Send()
 | 
							slog.Error(stderr.String())
 | 
				
			||||||
		return err
 | 
							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 {
 | 
					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) {
 | 
						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)
 | 
							pkgInfo.Overridables.Provides = append(pkgInfo.Overridables.Provides, dep)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func rpmFindRequires(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories) error {
 | 
					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) {
 | 
						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)
 | 
							pkgInfo.Overridables.Depends = append(pkgInfo.Overridables.Depends, dep)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,24 +21,26 @@ package build
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
						"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/db"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// InstallPkgs устанавливает нативные пакеты с использованием менеджера пакетов,
 | 
					// InstallPkgs устанавливает нативные пакеты с использованием менеджера пакетов,
 | 
				
			||||||
// затем строит и устанавливает пакеты ALR
 | 
					// затем строит и устанавливает пакеты ALR
 | 
				
			||||||
func InstallPkgs(ctx context.Context, alrPkgs []db.Package, nativePkgs []string, opts types.BuildOpts) {
 | 
					func InstallPkgs(ctx context.Context, alrPkgs []db.Package, nativePkgs []string, opts types.BuildOpts) {
 | 
				
			||||||
	log := loggerctx.From(ctx) // Инициализируем логгер из контекста
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(nativePkgs) > 0 {
 | 
						if len(nativePkgs) > 0 {
 | 
				
			||||||
		err := opts.Manager.Install(nil, nativePkgs...)
 | 
							err := opts.Manager.Install(nil, nativePkgs...)
 | 
				
			||||||
		// Если есть нативные пакеты, выполняем их установку
 | 
							// Если есть нативные пакеты, выполняем их установку
 | 
				
			||||||
		if err != nil {
 | 
							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 скрипты сборки
 | 
					// InstallScripts строит и устанавливает переданные alr скрипты сборки
 | 
				
			||||||
func InstallScripts(ctx context.Context, scripts []string, opts types.BuildOpts) {
 | 
					func InstallScripts(ctx context.Context, scripts []string, opts types.BuildOpts) {
 | 
				
			||||||
	log := loggerctx.From(ctx) // Получаем логгер из контекста
 | 
					 | 
				
			||||||
	for _, script := range scripts {
 | 
						for _, script := range scripts {
 | 
				
			||||||
		opts.Script = script // Устанавливаем текущий скрипт в опции
 | 
							opts.Script = script // Устанавливаем текущий скрипт в опции
 | 
				
			||||||
		builtPkgs, _, err := BuildPackage(ctx, opts)
 | 
							builtPkgs, _, err := BuildPackage(ctx, opts)
 | 
				
			||||||
		// Выполняем сборку пакета
 | 
							// Выполняем сборку пакета
 | 
				
			||||||
		if err != nil {
 | 
							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...)
 | 
							err = opts.Manager.InstallLocal(nil, builtPkgs...)
 | 
				
			||||||
		// Устанавливаем локально собранные пакеты
 | 
							// Устанавливаем локально собранные пакеты
 | 
				
			||||||
		if err != nil {
 | 
							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 (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
@@ -31,6 +32,7 @@ import (
 | 
				
			|||||||
	"github.com/go-git/go-billy/v5/osfs"
 | 
						"github.com/go-git/go-billy/v5/osfs"
 | 
				
			||||||
	"github.com/go-git/go-git/v5"
 | 
						"github.com/go-git/go-git/v5"
 | 
				
			||||||
	"github.com/go-git/go-git/v5/plumbing"
 | 
						"github.com/go-git/go-git/v5/plumbing"
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/pelletier/go-toml/v2"
 | 
						"github.com/pelletier/go-toml/v2"
 | 
				
			||||||
	"go.elara.ws/vercmp"
 | 
						"go.elara.ws/vercmp"
 | 
				
			||||||
	"mvdan.cc/sh/v3/expand"
 | 
						"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/db"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/handlers"
 | 
						"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/internal/types"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type actionType uint8
 | 
					type actionType uint8
 | 
				
			||||||
@@ -61,8 +62,6 @@ type action struct {
 | 
				
			|||||||
// In this case, only changed packages will be processed if possible.
 | 
					// 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.
 | 
					// 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 {
 | 
					func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
 | 
				
			||||||
	log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if repos == nil {
 | 
						if repos == nil {
 | 
				
			||||||
		repos = rs.cfg.Repos(ctx)
 | 
							repos = rs.cfg.Repos(ctx)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -73,7 +72,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
 | 
				
			|||||||
			return err
 | 
								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)
 | 
							repoDir := filepath.Join(config.GetPaths(ctx).RepoDir, repo.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var repoFS billy.Filesystem
 | 
							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})
 | 
								err = w.PullContext(ctx, &git.PullOptions{Progress: os.Stderr})
 | 
				
			||||||
			if errors.Is(err, git.NoErrAlreadyUpToDate) {
 | 
								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 {
 | 
								} else if err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -154,7 +153,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		fl, err := repoFS.Open("alr-repo.toml")
 | 
							fl, err := repoFS.Open("alr-repo.toml")
 | 
				
			||||||
		if err != nil {
 | 
							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
 | 
								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".
 | 
							// to compare it to the repo version, so only compare versions with the "v".
 | 
				
			||||||
		if strings.HasPrefix(config.Version, "v") {
 | 
							if strings.HasPrefix(config.Version, "v") {
 | 
				
			||||||
			if vercmp.Compare(config.Version, repoCfg.Repo.MinVersion) == -1 {
 | 
								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
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/pelletier/go-toml/v2"
 | 
						"github.com/pelletier/go-toml/v2"
 | 
				
			||||||
	"github.com/urfave/cli/v2"
 | 
						"github.com/urfave/cli/v2"
 | 
				
			||||||
	"golang.org/x/exp/slices"
 | 
						"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/config"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
 | 
						"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/internal/types"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
					 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -54,7 +55,6 @@ var addrepoCmd = &cli.Command{
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		ctx := c.Context
 | 
							ctx := c.Context
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		name := c.String("name")
 | 
							name := c.String("name")
 | 
				
			||||||
		repoURL := c.String("url")
 | 
							repoURL := c.String("url")
 | 
				
			||||||
@@ -63,7 +63,8 @@ var addrepoCmd = &cli.Command{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		for _, repo := range cfg.Repos {
 | 
							for _, repo := range cfg.Repos {
 | 
				
			||||||
			if repo.URL == repoURL {
 | 
								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)
 | 
							cfgFl, err := os.Create(config.GetPaths(ctx).ConfigPath)
 | 
				
			||||||
		if err != nil {
 | 
							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)
 | 
							err = toml.NewEncoder(cfgFl).Encode(cfg)
 | 
				
			||||||
		if err != nil {
 | 
							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)
 | 
							err = repos.Pull(ctx, cfg.Repos)
 | 
				
			||||||
		if err != nil {
 | 
							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
 | 
							return nil
 | 
				
			||||||
@@ -105,7 +109,6 @@ var removerepoCmd = &cli.Command{
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		ctx := c.Context
 | 
							ctx := c.Context
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		name := c.String("name")
 | 
							name := c.String("name")
 | 
				
			||||||
		cfg := config.Config(ctx)
 | 
							cfg := config.Config(ctx)
 | 
				
			||||||
@@ -119,29 +122,34 @@ var removerepoCmd = &cli.Command{
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if !found {
 | 
							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)
 | 
							cfg.Repos = slices.Delete(cfg.Repos, index, index+1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		cfgFl, err := os.Create(config.GetPaths(ctx).ConfigPath)
 | 
							cfgFl, err := os.Create(config.GetPaths(ctx).ConfigPath)
 | 
				
			||||||
		if err != nil {
 | 
							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)
 | 
							err = toml.NewEncoder(cfgFl).Encode(&cfg)
 | 
				
			||||||
		if err != nil {
 | 
							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))
 | 
							err = os.RemoveAll(filepath.Join(config.GetPaths(ctx).RepoDir, name))
 | 
				
			||||||
		if err != nil {
 | 
							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)
 | 
							err = db.DeletePkgs(ctx, "repository = ?", name)
 | 
				
			||||||
		if err != nil {
 | 
							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
 | 
							return nil
 | 
				
			||||||
@@ -154,10 +162,10 @@ var refreshCmd = &cli.Command{
 | 
				
			|||||||
	Aliases: []string{"ref"},
 | 
						Aliases: []string{"ref"},
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		ctx := c.Context
 | 
							ctx := c.Context
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
		err := repos.Pull(ctx, config.Config(ctx).Repos)
 | 
							err := repos.Pull(ctx, config.Config(ctx).Repos)
 | 
				
			||||||
		if err != nil {
 | 
							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
 | 
							return nil
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								upgrade.go
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								upgrade.go
									
									
									
									
									
								
							@@ -22,8 +22,12 @@ package main
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"log/slog"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/leonelquinteros/gotext"
 | 
				
			||||||
	"github.com/urfave/cli/v2"
 | 
						"github.com/urfave/cli/v2"
 | 
				
			||||||
 | 
						"go.elara.ws/logger/log"
 | 
				
			||||||
	"go.elara.ws/vercmp"
 | 
						"go.elara.ws/vercmp"
 | 
				
			||||||
	"golang.org/x/exp/maps"
 | 
						"golang.org/x/exp/maps"
 | 
				
			||||||
	"golang.org/x/exp/slices"
 | 
						"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/internal/types"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/build"
 | 
						"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/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/manager"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -51,26 +54,29 @@ var upgradeCmd = &cli.Command{
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	Action: func(c *cli.Context) error {
 | 
						Action: func(c *cli.Context) error {
 | 
				
			||||||
		ctx := c.Context
 | 
							ctx := c.Context
 | 
				
			||||||
		log := loggerctx.From(ctx)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		info, err := distro.ParseOSRelease(ctx)
 | 
							info, err := distro.ParseOSRelease(ctx)
 | 
				
			||||||
		if err != nil {
 | 
							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()
 | 
							mgr := manager.Detect()
 | 
				
			||||||
		if mgr == nil {
 | 
							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)
 | 
							err = repos.Pull(ctx, config.Config(ctx).Repos)
 | 
				
			||||||
		if err != nil {
 | 
							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)
 | 
							updates, err := checkForUpdates(ctx, mgr, info)
 | 
				
			||||||
		if err != nil {
 | 
							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 {
 | 
							if len(updates) > 0 {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user