fix: use single output format for alt list and alr list -I

This commit is contained in:
2025-07-09 20:38:24 +03:00
parent f42be105ad
commit aa08c04e0c
9 changed files with 126 additions and 29 deletions

37
list.go
View File

@ -24,6 +24,7 @@ import (
"log/slog"
"os"
"slices"
"strings"
"text/template"
"github.com/leonelquinteros/gotext"
@ -33,6 +34,7 @@ import (
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
appbuilder "gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils/app_builder"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/manager"
"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/alrsh"
)
@ -126,7 +128,12 @@ func ListCmd() *cli.Command {
return cliutils.FormatCliExit(gotext.Get("Error getting packages"), err)
}
installedAlrPackages := map[string]string{}
type verInfo struct {
Version string
Release int
}
installedAlrPackages := map[string]verInfo{}
if c.Bool("installed") {
mgr := manager.Detect()
if mgr == nil {
@ -144,40 +151,50 @@ func ListCmd() *cli.Command {
if matches != nil {
packageName := matches[build.RegexpALRPackageName.SubexpIndex("package")]
repoName := matches[build.RegexpALRPackageName.SubexpIndex("repo")]
installedAlrPackages[fmt.Sprintf("%s/%s", repoName, packageName)] = version
verInfo := verInfo{
Version: version,
Release: 0,
}
if i := strings.LastIndex(version, "-"); i != -1 {
verInfo.Version = version[:i]
verInfo.Release, err = overrides.ParseReleasePlatformSpecific(version[i+1:], info)
if err != nil {
slog.Error(gotext.Get("Failed to parse release"), "err", err)
return cli.Exit(err, 1)
}
}
installedAlrPackages[fmt.Sprintf("%s/%s", repoName, packageName)] = verInfo
}
}
}
for _, pkg := range result {
if err != nil {
return cli.Exit(err, 1)
}
if slices.Contains(cfg.IgnorePkgUpdates(), pkg.Name) {
continue
}
type packageInfo struct {
Package *alrsh.Package
Version string
}
pkgInfo := &packageInfo{}
pkgInfo.Package = &pkg
pkgInfo.Version = pkg.Version
if c.Bool("installed") {
instVersion, ok := installedAlrPackages[fmt.Sprintf("%s/%s", pkg.Repository, pkg.Name)]
if !ok {
continue
} else {
pkgInfo.Version = instVersion
pkg.Version = instVersion.Version
pkg.Release = instVersion.Release
}
}
format := c.String("format")
if format == "" {
format = "{{.Package.Repository}}/{{.Package.Name}} {{.Version}}\n"
format = "{{.Package.Repository}}/{{.Package.Name}} {{.Package.Version}}-{{.Package.Release}}\n"
}
tmpl, err := template.New("format").Parse(format)
if err != nil {