From 151f67a294bddc284f0f0e13b001b900b456ba29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roth?= Date: Thu, 5 Nov 2026 11:41:54 +0100 Subject: [PATCH] fix merge conflicts --- deb/list.go | 33 ++++++++++++++++++++++++++++----- deb/list_test.go | 4 ++-- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/deb/list.go b/deb/list.go index 5806f950..ec8a9b79 100644 --- a/deb/list.go +++ b/deb/list.go @@ -199,15 +199,38 @@ func (l *PackageList) FilterLatest(count int) (*PackageList, error) { for _, pkgs := range groups { // sort from latest to oldest - sort.Slice(pkgs, func(i, j int) bool { - return CompareVersions(pkgs[i].Version, pkgs[j].Version) > 0 + sort.SliceStable(pkgs, func(i, j int) bool { + cmp, cmpErr := CompareVersions(pkgs[i].Version, pkgs[j].Version) + switch cmpErr { + case LeftInvalid, BothInvalid: + return false + case RightInvalid: + return true + } + return cmp > 0 }) versions := 0 for i, p := range pkgs { - if i == 0 || CompareVersions(p.Version, pkgs[i-1].Version) != 0 { - versions++ - if versions > count { + if i == 0 { + // first element always included + } else { + cmp, cmpErr := CompareVersions(p.Version, pkgs[i-1].Version) + switch cmpErr { + case LeftInvalid, BothInvalid: + // invalid version is different from previous + versions++ + case RightInvalid: + // previous was invalid, current is valid — different + versions++ + default: + if cmp == 0 { + // same version, skip + } else { + versions++ + } + } + if versions >= count { break } } diff --git a/deb/list_test.go b/deb/list_test.go index 6d3e6064..73348399 100644 --- a/deb/list_test.go +++ b/deb/list_test.go @@ -580,7 +580,7 @@ func (s *PackageListSuite) TestFilterLatestInvalidVersions(c *C) { _ = list.Add(valid) _ = list.Add(invalid) - filtered, err := list.FilterLatest() + filtered, err := list.FilterLatest(1) c.Assert(err, IsNil) c.Check(filtered.Len(), Equals, 1) c.Check(filtered.Has(valid), Equals, true) @@ -588,7 +588,7 @@ func (s *PackageListSuite) TestFilterLatestInvalidVersions(c *C) { invalidOnly := NewPackageList() _ = invalidOnly.Add(&Package{Name: "pkg", Version: "1.0-", Architecture: "amd64"}) _ = invalidOnly.Add(&Package{Name: "pkg", Version: "2.0-", Architecture: "amd64"}) - filtered, err = invalidOnly.FilterLatest() + filtered, err = invalidOnly.FilterLatest(1) c.Assert(err, IsNil) c.Check(filtered.Len(), Equals, 1) }