forked from Plemya-x/ALR
command info
This commit is contained in:
parent
3603dc45a4
commit
93d568ec00
58
info.go
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user