fix: use unique names for packages #40
@ -323,11 +323,11 @@ msgstr ""
|
|||||||
msgid "ERROR"
|
msgid "ERROR"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: list.go:40
|
#: list.go:41
|
||||||
msgid "List ALR repo packages"
|
msgid "List ALR repo packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: list.go:91
|
#: list.go:92
|
||||||
msgid "Error listing installed packages"
|
msgid "Error listing installed packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -335,11 +335,11 @@ msgstr "%s %s загружается — %s/с\n"
|
|||||||
msgid "ERROR"
|
msgid "ERROR"
|
||||||
msgstr "ОШИБКА"
|
msgstr "ОШИБКА"
|
||||||
|
|
||||||
#: list.go:40
|
#: list.go:41
|
||||||
msgid "List ALR repo packages"
|
msgid "List ALR repo packages"
|
||||||
msgstr "Список пакетов репозитория ALR"
|
msgstr "Список пакетов репозитория ALR"
|
||||||
|
|
||||||
#: list.go:91
|
#: list.go:92
|
||||||
msgid "Error listing installed packages"
|
msgid "Error listing installed packages"
|
||||||
msgstr "Ошибка при составлении списка установленных пакетов"
|
msgstr "Ошибка при составлении списка установленных пакетов"
|
||||||
|
|
||||||
|
16
list.go
16
list.go
@ -30,6 +30,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/pkg/build"
|
||||||
"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"
|
||||||
)
|
)
|
||||||
@ -78,7 +79,7 @@ func ListCmd() *cli.Command {
|
|||||||
}
|
}
|
||||||
defer result.Close()
|
defer result.Close()
|
||||||
|
|
||||||
var installed map[string]string
|
installedAlrPackages := map[string]string{}
|
||||||
if c.Bool("installed") {
|
if c.Bool("installed") {
|
||||||
mgr := manager.Detect()
|
mgr := manager.Detect()
|
||||||
if mgr == nil {
|
if mgr == nil {
|
||||||
@ -86,11 +87,20 @@ func ListCmd() *cli.Command {
|
|||||||
os.Exit(1)
|
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 {
|
||||||
slog.Error(gotext.Get("Error listing installed packages"), "err", err)
|
slog.Error(gotext.Get("Error listing installed packages"), "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for pkgName, version := range installed {
|
||||||
|
matches := build.RegexpALRPackageName.FindStringSubmatch(pkgName)
|
||||||
|
if matches != nil {
|
||||||
|
packageName := matches[build.RegexpALRPackageName.SubexpIndex("package")]
|
||||||
|
repoName := matches[build.RegexpALRPackageName.SubexpIndex("repo")]
|
||||||
|
installedAlrPackages[fmt.Sprintf("%s/%s", repoName, packageName)] = version
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for result.Next() {
|
for result.Next() {
|
||||||
@ -106,7 +116,7 @@ func ListCmd() *cli.Command {
|
|||||||
|
|
||||||
version := pkg.Version
|
version := pkg.Version
|
||||||
if c.Bool("installed") {
|
if c.Bool("installed") {
|
||||||
instVersion, ok := installed[pkg.Name]
|
instVersion, ok := installedAlrPackages[fmt.Sprintf("%s/%s", pkg.Repository, pkg.Name)]
|
||||||
if !ok {
|
if !ok {
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
"runtime"
|
"runtime"
|
||||||
"slices"
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -170,6 +171,8 @@ func buildContents(vars *types.BuildVars, dirs types.Directories, preferedConten
|
|||||||
return contents, nil
|
return contents, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var RegexpALRPackageName = regexp.MustCompile(`^(?P<package>[^+]+)\+alr-(?P<repo>.+)$`)
|
||||||
|
|
||||||
func getBasePkgInfo(vars *types.BuildVars, info *distro.OSRelease, opts *types.BuildOpts) *nfpm.Info {
|
func getBasePkgInfo(vars *types.BuildVars, info *distro.OSRelease, opts *types.BuildOpts) *nfpm.Info {
|
||||||
return &nfpm.Info{
|
return &nfpm.Info{
|
||||||
Name: fmt.Sprintf("%s+alr-%s", vars.Name, opts.Repository),
|
Name: fmt.Sprintf("%s+alr-%s", vars.Name, opts.Repository),
|
||||||
|
74
upgrade.go
74
upgrade.go
@ -29,7 +29,6 @@ import (
|
|||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"go.elara.ws/vercmp"
|
"go.elara.ws/vercmp"
|
||||||
"golang.org/x/exp/maps"
|
"golang.org/x/exp/maps"
|
||||||
"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"
|
||||||
@ -39,6 +38,7 @@ import (
|
|||||||
"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/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"
|
||||||
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/search"
|
||||||
)
|
)
|
||||||
|
|
||||||
func UpgradeCmd() *cli.Command {
|
func UpgradeCmd() *cli.Command {
|
||||||
@ -85,7 +85,7 @@ func UpgradeCmd() *cli.Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updates, err := checkForUpdates(ctx, mgr, cfg, rs, info)
|
updates, err := checkForUpdates(ctx, mgr, cfg, db, rs, info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(gotext.Get("Error checking for updates"), "err", err)
|
slog.Error(gotext.Get("Error checking for updates"), "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@ -121,6 +121,7 @@ func checkForUpdates(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
mgr manager.Manager,
|
mgr manager.Manager,
|
||||||
cfg *config.ALRConfig,
|
cfg *config.ALRConfig,
|
||||||
|
db *database.Database,
|
||||||
rs *repos.Repos,
|
rs *repos.Repos,
|
||||||
info *distro.OSRelease,
|
info *distro.OSRelease,
|
||||||
) ([]database.Package, error) {
|
) ([]database.Package, error) {
|
||||||
@ -130,42 +131,47 @@ func checkForUpdates(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pkgNames := maps.Keys(installed)
|
pkgNames := maps.Keys(installed)
|
||||||
found, _, err := rs.FindPkgs(ctx, pkgNames)
|
|
||||||
if err != nil {
|
s := search.New(db)
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var out []database.Package
|
var out []database.Package
|
||||||
for pkgName, pkgs := range found {
|
for _, pkgName := range pkgNames {
|
||||||
if slices.Contains(cfg.IgnorePkgUpdates(ctx), pkgName) {
|
matches := build.RegexpALRPackageName.FindStringSubmatch(pkgName)
|
||||||
continue
|
if matches != nil {
|
||||||
|
packageName := matches[build.RegexpALRPackageName.SubexpIndex("package")]
|
||||||
|
repoName := matches[build.RegexpALRPackageName.SubexpIndex("repo")]
|
||||||
|
|
||||||
|
pkgs, err := s.Search(
|
||||||
|
ctx,
|
||||||
|
search.NewSearchOptions().
|
||||||
|
WithName(packageName).
|
||||||
|
WithRepository(repoName).
|
||||||
|
Build(),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
pkg := pkgs[0]
|
||||||
|
|
||||||
|
repoVer := pkg.Version
|
||||||
|
releaseStr := overrides.ReleasePlatformSpecific(pkg.Release, info)
|
||||||
|
|
||||||
|
if pkg.Release != 0 && pkg.Epoch == 0 {
|
||||||
|
repoVer = fmt.Sprintf("%s-%s", pkg.Version, releaseStr)
|
||||||
|
} else if pkg.Release != 0 && pkg.Epoch != 0 {
|
||||||
|
repoVer = fmt.Sprintf("%d:%s-%s", pkg.Epoch, pkg.Version, releaseStr)
|
||||||
|
}
|
||||||
|
|
||||||
|
c := vercmp.Compare(repoVer, installed[pkgName])
|
||||||
|
if c == 0 || c == -1 {
|
||||||
|
continue
|
||||||
|
} else if c == 1 {
|
||||||
|
out = append(out, pkg)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(pkgs) > 1 {
|
|
||||||
// Puts the element with the highest version first
|
|
||||||
slices.SortFunc(pkgs, func(a, b database.Package) int {
|
|
||||||
return vercmp.Compare(a.Version, b.Version)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// First element is the package we want to install
|
|
||||||
pkg := pkgs[0]
|
|
||||||
|
|
||||||
repoVer := pkg.Version
|
|
||||||
releaseStr := overrides.ReleasePlatformSpecific(pkg.Release, info)
|
|
||||||
|
|
||||||
if pkg.Release != 0 && pkg.Epoch == 0 {
|
|
||||||
repoVer = fmt.Sprintf("%s-%s", pkg.Version, releaseStr)
|
|
||||||
} else if pkg.Release != 0 && pkg.Epoch != 0 {
|
|
||||||
repoVer = fmt.Sprintf("%d:%s-%s", pkg.Epoch, pkg.Version, releaseStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
c := vercmp.Compare(repoVer, installed[pkgName])
|
|
||||||
if c == 0 || c == -1 {
|
|
||||||
continue
|
|
||||||
} else if c == 1 {
|
|
||||||
out = append(out, pkg)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user