This commit is contained in:
2025-04-13 19:54:04 +03:00
parent f26b72b2a2
commit b8cb7af3bb
14 changed files with 213 additions and 261 deletions

View File

@@ -27,6 +27,7 @@ import (
"github.com/leonelquinteros/gotext"
"github.com/urfave/cli/v2"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
@@ -67,22 +68,19 @@ func InstallCmd() *cli.Command {
cfg := config.New()
err := cfg.Load()
if err != nil {
slog.Error(gotext.Get("Error loading config"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error loading config"), err)
}
db := database.New(cfg)
rs := repos.New(cfg, db)
err = db.Init(ctx)
if err != nil {
slog.Error(gotext.Get("Error initialization database"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error initialization database"), err)
}
err = utils.DropCapsToAlrUser()
if err != nil {
slog.Error(gotext.Get("Error dropping capabilities"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error dropping capabilities"), err)
}
builder := build.NewMainBuilder(
@@ -93,15 +91,13 @@ func InstallCmd() *cli.Command {
if cfg.AutoPull() {
err := rs.Pull(ctx, cfg.Repos())
if err != nil {
slog.Error(gotext.Get("Error pulling repositories"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error pulling repositories"), err)
}
}
info, err := distro.ParseOSRelease(ctx)
if err != nil {
slog.Error(gotext.Get("Error parsing os release"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error parsing os release"), err)
}
err = builder.InstallPkgs(
@@ -117,30 +113,26 @@ func InstallCmd() *cli.Command {
args.Slice(),
)
if err != nil {
slog.Error(gotext.Get("Error parsing os release"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error parsing os release"), err)
}
return nil
},
BashComplete: func(c *cli.Context) {
BashComplete: cliutils.BashCompleteWithError(func(c *cli.Context) error {
cfg := config.New()
err := cfg.Load()
if err != nil {
slog.Error(gotext.Get("Error loading config"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error loading config"), err)
}
db := database.New(cfg)
err = db.Init(c.Context)
if err != nil {
slog.Error(gotext.Get("Error initialization database"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error initialization database"), err)
}
result, err := db.GetPkgs(c.Context, "true")
if err != nil {
slog.Error(gotext.Get("Error getting packages"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error getting packages"), err)
}
defer result.Close()
@@ -148,13 +140,14 @@ func InstallCmd() *cli.Command {
var pkg database.Package
err = result.StructScan(&pkg)
if err != nil {
slog.Error(gotext.Get("Error iterating over packages"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error iterating over packages"), err)
}
fmt.Println(pkg.Name)
}
},
return nil
}),
}
}
@@ -163,19 +156,17 @@ func RemoveCmd() *cli.Command {
Name: "remove",
Usage: gotext.Get("Remove an installed package"),
Aliases: []string{"rm"},
BashComplete: func(c *cli.Context) {
BashComplete: cliutils.BashCompleteWithError(func(c *cli.Context) error {
cfg := config.New()
err := cfg.Load()
if err != nil {
slog.Error(gotext.Get("Error loading config"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error loading config"), err)
}
db := database.New(cfg)
err = db.Init(c.Context)
if err != nil {
slog.Error(gotext.Get("Error initialization database"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error initialization database"), err)
}
installedAlrPackages := map[string]string{}
@@ -186,8 +177,7 @@ func RemoveCmd() *cli.Command {
}
installed, err := mgr.ListInstalled(&manager.Opts{AsRoot: false})
if err != nil {
slog.Error(gotext.Get("Error listing installed packages"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error listing installed packages"), err)
}
for pkgName, version := range installed {
matches := build.RegexpALRPackageName.FindStringSubmatch(pkgName)
@@ -200,8 +190,7 @@ func RemoveCmd() *cli.Command {
result, err := db.GetPkgs(c.Context, "true")
if err != nil {
slog.Error(gotext.Get("Error getting packages"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error getting packages"), err)
}
defer result.Close()
@@ -209,8 +198,7 @@ func RemoveCmd() *cli.Command {
var pkg database.Package
err = result.StructScan(&pkg)
if err != nil {
slog.Error(gotext.Get("Error iterating over packages"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error iterating over packages"), err)
}
_, ok := installedAlrPackages[fmt.Sprintf("%s/%s", pkg.Repository, pkg.Name)]
@@ -220,7 +208,9 @@ func RemoveCmd() *cli.Command {
fmt.Println(pkg.Name)
}
},
return nil
}),
Action: func(c *cli.Context) error {
args := c.Args()
if args.Len() < 1 {
@@ -239,8 +229,7 @@ func RemoveCmd() *cli.Command {
NoConfirm: !c.Bool("interactive"),
}, c.Args().Slice()...)
if err != nil {
slog.Error(gotext.Get("Error removing packages"), "err", err)
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Error removing packages"), err)
}
return nil