command info

This commit is contained in:
Maxim Slipenko 2025-04-13 17:49:02 +03:00
parent 3603dc45a4
commit 93d568ec00
5 changed files with 85 additions and 46 deletions

58
info.go

@ -33,6 +33,7 @@ import (
"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/internal/overrides" "gitea.plemya-x.ru/Plemya-x/ALR/internal/overrides"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/utils"
"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/repos" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
) )
@ -49,9 +50,15 @@ func InfoCmd() *cli.Command {
}, },
}, },
BashComplete: func(c *cli.Context) { BashComplete: func(c *cli.Context) {
err := utils.ExitIfCantDropCapsToAlrUser()
if err != nil {
slog.Error("Can't drop caps")
os.Exit(1)
}
ctx := c.Context ctx := c.Context
cfg := config.New() cfg := config.New()
err := cfg.Load() err = cfg.Load()
if err != nil { if err != nil {
slog.Error(gotext.Get("Error loading config"), "err", err) slog.Error(gotext.Get("Error loading config"), "err", err)
os.Exit(1) os.Exit(1)
@ -83,45 +90,50 @@ func InfoCmd() *cli.Command {
} }
}, },
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
err := utils.ExitIfCantDropCapsToAlrUser()
if err != nil {
return err
}
ctx := c.Context ctx := c.Context
cfg := config.New() cfg := config.New()
err := cfg.Load() err = cfg.Load()
if err != nil { if err != nil {
slog.Error(gotext.Get("Error loading config"), "err", err) slog.Error(gotext.Get("Error loading config"))
os.Exit(1) return cli.Exit(err, 1)
} }
db := database.New(cfg) db := database.New(cfg)
err = db.Init(ctx) err = db.Init(ctx)
if err != nil { if err != nil {
slog.Error(gotext.Get("Error initialization database"), "err", err) slog.Error(gotext.Get("Error initialization database"))
os.Exit(1) return cli.Exit(err, 1)
} }
rs := repos.New(cfg, db) rs := repos.New(cfg, db)
args := c.Args() args := c.Args()
if args.Len() < 1 { if args.Len() < 1 {
slog.Error(gotext.Get("Command info expected at least 1 argument, got %d", args.Len())) return cli.Exit(gotext.Get("Command info expected at least 1 argument, got %d", args.Len()), 1)
os.Exit(1)
} }
if cfg.AutoPull() { if cfg.AutoPull() {
err := rs.Pull(ctx, cfg.Repos()) err := rs.Pull(ctx, cfg.Repos())
if err != nil { if err != nil {
slog.Error(gotext.Get("Error pulling repos"), "err", err) slog.Error(gotext.Get("Error pulling repos"))
os.Exit(1) return cli.Exit(err, 1)
} }
} }
found, _, err := rs.FindPkgs(ctx, args.Slice()) found, _, err := rs.FindPkgs(ctx, args.Slice())
if err != nil { if err != nil {
slog.Error(gotext.Get("Error finding packages"), "err", err) slog.Error(gotext.Get("Error finding packages"))
os.Exit(1) return cli.Exit(err, 1)
} }
if len(found) == 0 { if len(found) == 0 {
os.Exit(1) slog.Error(gotext.Get("Package not found"))
return cli.Exit(err, 1)
} }
pkgs := cliutils.FlattenPkgs(ctx, found, "show", c.Bool("interactive")) pkgs := cliutils.FlattenPkgs(ctx, found, "show", c.Bool("interactive"))
@ -131,8 +143,8 @@ func InfoCmd() *cli.Command {
systemLang, err := locale.GetLanguage() systemLang, err := locale.GetLanguage()
if err != nil { if err != nil {
slog.Error("Can't detect system language", "err", err) slog.Error(gotext.Get("Can't detect system language"))
os.Exit(1) return cli.Exit(err, 1)
} }
if systemLang == "" { if systemLang == "" {
systemLang = "en" systemLang = "en"
@ -141,8 +153,8 @@ func InfoCmd() *cli.Command {
if !all { if !all {
info, err := distro.ParseOSRelease(ctx) info, err := distro.ParseOSRelease(ctx)
if err != nil { if err != nil {
slog.Error(gotext.Get("Error parsing os-release file"), "err", err) slog.Error(gotext.Get("Error parsing os-release file"))
os.Exit(1) return cli.Exit(err, 1)
} }
names, err = overrides.Resolve( names, err = overrides.Resolve(
info, info,
@ -150,8 +162,8 @@ func InfoCmd() *cli.Command {
WithLanguages([]string{systemLang}), WithLanguages([]string{systemLang}),
) )
if err != nil { if err != nil {
slog.Error(gotext.Get("Error resolving overrides"), "err", err) slog.Error(gotext.Get("Error resolving overrides"))
os.Exit(1) return cli.Exit(err, 1)
} }
} }
@ -159,14 +171,14 @@ func InfoCmd() *cli.Command {
if !all { if !all {
err = yaml.NewEncoder(os.Stdout).Encode(overrides.ResolvePackage(&pkg, names)) err = yaml.NewEncoder(os.Stdout).Encode(overrides.ResolvePackage(&pkg, names))
if err != nil { if err != nil {
slog.Error(gotext.Get("Error encoding script variables"), "err", err) slog.Error(gotext.Get("Error encoding script variables"))
os.Exit(1) return cli.Exit(err, 1)
} }
} else { } else {
err = yaml.NewEncoder(os.Stdout).Encode(pkg) err = yaml.NewEncoder(os.Stdout).Encode(pkg)
if err != nil { if err != nil {
slog.Error(gotext.Get("Error encoding script variables"), "err", err) slog.Error(gotext.Get("Error encoding script variables"))
os.Exit(1) return cli.Exit(err, 1)
} }
} }

@ -134,39 +134,43 @@ msgstr ""
msgid "No such helper command" msgid "No such helper command"
msgstr "" msgstr ""
#: info.go:43 #: info.go:44
msgid "Print information about a package" msgid "Print information about a package"
msgstr "" msgstr ""
#: info.go:48 #: info.go:49
msgid "Show all information, not just for the current distro" msgid "Show all information, not just for the current distro"
msgstr "" msgstr ""
#: info.go:69 #: info.go:76
msgid "Error getting packages" msgid "Error getting packages"
msgstr "" msgstr ""
#: info.go:78 #: info.go:85
msgid "Error iterating over packages" msgid "Error iterating over packages"
msgstr "" msgstr ""
#: info.go:105 #: info.go:117
msgid "Command info expected at least 1 argument, got %d" msgid "Command info expected at least 1 argument, got %d"
msgstr "" msgstr ""
#: info.go:119 #: info.go:130
msgid "Error finding packages" msgid "Error finding packages"
msgstr "" msgstr ""
#: info.go:144 #: info.go:146
msgid "Can't detect system language"
msgstr ""
#: info.go:156
msgid "Error parsing os-release file" msgid "Error parsing os-release file"
msgstr "" msgstr ""
#: info.go:153 #: info.go:165
msgid "Error resolving overrides" msgid "Error resolving overrides"
msgstr "" msgstr ""
#: info.go:162 info.go:168 #: info.go:174 info.go:180
msgid "Error encoding script variables" msgid "Error encoding script variables"
msgstr "" msgstr ""
@ -315,7 +319,7 @@ msgstr ""
msgid "ERROR" msgid "ERROR"
msgstr "" msgstr ""
#: internal/utils/cmd.go:74 #: internal/utils/cmd.go:94
msgid "You need to be root to perform this action" msgid "You need to be root to perform this action"
msgstr "" msgstr ""

@ -148,39 +148,44 @@ msgstr "Каталог, в который будут устанавливать
msgid "No such helper command" msgid "No such helper command"
msgstr "Такой вспомогательной команды нет" msgstr "Такой вспомогательной команды нет"
#: info.go:43 #: info.go:44
msgid "Print information about a package" msgid "Print information about a package"
msgstr "Отобразить информацию о пакете" msgstr "Отобразить информацию о пакете"
#: info.go:48 #: info.go:49
msgid "Show all information, not just for the current distro" msgid "Show all information, not just for the current distro"
msgstr "Показывать всю информацию, не только для текущего дистрибутива" msgstr "Показывать всю информацию, не только для текущего дистрибутива"
#: info.go:69 #: info.go:76
msgid "Error getting packages" msgid "Error getting packages"
msgstr "Ошибка при получении пакетов" msgstr "Ошибка при получении пакетов"
#: info.go:78 #: info.go:85
msgid "Error iterating over packages" msgid "Error iterating over packages"
msgstr "Ошибка при переборе пакетов" msgstr "Ошибка при переборе пакетов"
#: info.go:105 #: info.go:117
msgid "Command info expected at least 1 argument, got %d" msgid "Command info expected at least 1 argument, got %d"
msgstr "Для команды info ожидался хотя бы 1 аргумент, получено %d" msgstr "Для команды info ожидался хотя бы 1 аргумент, получено %d"
#: info.go:119 #: info.go:130
msgid "Error finding packages" msgid "Error finding packages"
msgstr "Ошибка при поиске пакетов" msgstr "Ошибка при поиске пакетов"
#: info.go:144 #: info.go:146
#, fuzzy
msgid "Can't detect system language"
msgstr "Ошибка при парсинге языка системы"
#: info.go:156
msgid "Error parsing os-release file" msgid "Error parsing os-release file"
msgstr "Ошибка при разборе файла выпуска операционной системы" msgstr "Ошибка при разборе файла выпуска операционной системы"
#: info.go:153 #: info.go:165
msgid "Error resolving overrides" msgid "Error resolving overrides"
msgstr "Ошибка устранения переорпеделений" msgstr "Ошибка устранения переорпеделений"
#: info.go:162 info.go:168 #: info.go:174 info.go:180
msgid "Error encoding script variables" msgid "Error encoding script variables"
msgstr "Ошибка кодирования переменных скрита" msgstr "Ошибка кодирования переменных скрита"
@ -330,7 +335,7 @@ msgstr "%s %s загружается — %s/с\n"
msgid "ERROR" msgid "ERROR"
msgstr "ОШИБКА" msgstr "ОШИБКА"
#: internal/utils/cmd.go:74 #: internal/utils/cmd.go:94
msgid "You need to be root to perform this action" msgid "You need to be root to perform this action"
msgstr "" msgstr ""
@ -589,9 +594,6 @@ msgstr "Здесь нечего делать."
#~ msgid "Error opening config file" #~ msgid "Error opening config file"
#~ msgstr "Ошибка при открытии конфигурационного файла" #~ msgstr "Ошибка при открытии конфигурационного файла"
#~ msgid "Error parsing system language"
#~ msgstr "Ошибка при парсинге языка системы"
#~ msgid "Executing version()" #~ msgid "Executing version()"
#~ msgstr "Исполнение версия()" #~ msgstr "Исполнение версия()"

@ -17,6 +17,8 @@
package utils package utils
import ( import (
"errors"
"log/slog"
"os" "os"
"os/user" "os/user"
"strconv" "strconv"
@ -66,6 +68,24 @@ func DropCapsToAlrUser() error {
if err != nil { if err != nil {
return err return err
} }
newUid := syscall.Getuid()
if newUid != uid {
return errors.New("new uid don't matches requested")
}
newGid := syscall.Getgid()
if newGid != gid {
return errors.New("new gid don't matches requested")
}
return nil
}
// Returns cli.Exit to
func ExitIfCantDropCapsToAlrUser() error {
err := DropCapsToAlrUser()
if err != nil {
slog.Debug("dropping capabilities error", "err", err)
return cli.Exit(gotext.Get("Error dropping capabilities"), 1)
}
return nil return nil
} }

@ -256,6 +256,7 @@ func (rs *Repos) updatePkg(ctx context.Context, repo types.Repo, runner *interp.
return err return err
} }
resolveOverrides(runner, pkg) resolveOverrides(runner, pkg)
slog.Warn("inserting pkg", "pkg", pkg.BuildDepends)
return rs.db.InsertPackage(ctx, *pkg) return rs.db.InsertPackage(ctx, *pkg)
} }