From 242a0d4010050faaab3524f9c2dc51161a2b1105 Mon Sep 17 00:00:00 2001 From: Twaik Yont <9674930+twaik@users.noreply.github.com> Date: Sun, 11 Oct 2026 22:46:47 +0300 Subject: [PATCH 1/2] deb: split Debian revision at the last hyphen Per Debian Policy, the version is split at the last hyphen: https://www.debian.org/doc/debian-policy/ch-controlfields.html#version Add tests for the ordering of '+', which is a regular non-letter sorted by its ASCII value (see Comparing version numbers on the same page). --- deb/version_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/deb/version_test.go b/deb/version_test.go index 6a366324..3e4b8aad 100644 --- a/deb/version_test.go +++ b/deb/version_test.go @@ -78,6 +78,12 @@ func (s *VersionSuite) TestIsValidVersion(c *C) { // valid upstream_version, but debian_revision contains a disallowed character valid = isValidVersion("1.2.3-abc!") c.Check(valid, Equals, false) + + e, u, d = parseVersion("1.3-pre4-1") + c.Check([]string{e, u, d}, DeepEquals, []string{"", "1.3-pre4", "1"}) + + e, u, d = parseVersion("4:1.3-pre4-1") + c.Check([]string{e, u, d}, DeepEquals, []string{"4", "1.3-pre4", "1"}) } func (s *VersionSuite) TestCompareLexicographic(c *C) { @@ -169,6 +175,20 @@ func (s *VersionSuite) TestCompareVersions(c *C) { check("1:abc~1.2.3-", "1:1.2.3~abc-good", 0, LeftInvalid) check("1:1.2.3~abc-good", "1:abc~1.2.3-", 0, RightInvalid) check("1:abc~1.2.3-", "2:def~4.5.6-", 0, BothInvalid) + + c.Check(CompareVersions("5.2.0.3", "5.2.0.283"), Equals, -1) + c.Check(CompareVersions("4.3.5a", "4.3.5-rc3-1"), Equals, -1) + c.Check(CompareVersions("1.6.0-rc1+really1.6.0-0", "1.6.0-rc1-0"), Equals, 1) + c.Check(CompareVersions("1.2-3-4", "1.2-3-5"), Equals, -1) + c.Check(CompareVersions("1.0-1-1", "1.0-1"), Equals, 1) + c.Check(CompareVersions("1.0+1", "1.0"), Equals, 1) + c.Check(CompareVersions("1.0+a-1", "1.0-a-1"), Equals, -1) + c.Check(CompareVersions("1.0+1-1", "1.0-1"), Equals, 1) + c.Check(CompareVersions("1.0-1+b1", "1.0-1"), Equals, 1) + c.Check(CompareVersions("1.0-1+b1", "1.0-1~bpo1"), Equals, 1) + c.Check(CompareVersions("1.0-1+b2", "1.0-1+b10"), Equals, -1) + c.Check(CompareVersions("1.0.1+dfsg-1", "1.0.1-1"), Equals, 1) + c.Check(CompareVersions("1.0-1+b1", "1.0-2"), Equals, -1) } func (s *VersionSuite) TestParseDependency(c *C) { From 81d119f42118127f1d9f951cbea623a92610a4d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roth?= Date: Mon, 2 Nov 2026 14:59:52 +0100 Subject: [PATCH 2/2] deb: rebase changes --- deb/version_test.go | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/deb/version_test.go b/deb/version_test.go index 3e4b8aad..3e82322e 100644 --- a/deb/version_test.go +++ b/deb/version_test.go @@ -79,10 +79,12 @@ func (s *VersionSuite) TestIsValidVersion(c *C) { valid = isValidVersion("1.2.3-abc!") c.Check(valid, Equals, false) - e, u, d = parseVersion("1.3-pre4-1") + e, u, d, err := parseVersion("1.3-pre4-1") + c.Check(err, IsNil) c.Check([]string{e, u, d}, DeepEquals, []string{"", "1.3-pre4", "1"}) - e, u, d = parseVersion("4:1.3-pre4-1") + e, u, d, err = parseVersion("4:1.3-pre4-1") + c.Check(err, IsNil) c.Check([]string{e, u, d}, DeepEquals, []string{"4", "1.3-pre4", "1"}) } @@ -176,19 +178,19 @@ func (s *VersionSuite) TestCompareVersions(c *C) { check("1:1.2.3~abc-good", "1:abc~1.2.3-", 0, RightInvalid) check("1:abc~1.2.3-", "2:def~4.5.6-", 0, BothInvalid) - c.Check(CompareVersions("5.2.0.3", "5.2.0.283"), Equals, -1) - c.Check(CompareVersions("4.3.5a", "4.3.5-rc3-1"), Equals, -1) - c.Check(CompareVersions("1.6.0-rc1+really1.6.0-0", "1.6.0-rc1-0"), Equals, 1) - c.Check(CompareVersions("1.2-3-4", "1.2-3-5"), Equals, -1) - c.Check(CompareVersions("1.0-1-1", "1.0-1"), Equals, 1) - c.Check(CompareVersions("1.0+1", "1.0"), Equals, 1) - c.Check(CompareVersions("1.0+a-1", "1.0-a-1"), Equals, -1) - c.Check(CompareVersions("1.0+1-1", "1.0-1"), Equals, 1) - c.Check(CompareVersions("1.0-1+b1", "1.0-1"), Equals, 1) - c.Check(CompareVersions("1.0-1+b1", "1.0-1~bpo1"), Equals, 1) - c.Check(CompareVersions("1.0-1+b2", "1.0-1+b10"), Equals, -1) - c.Check(CompareVersions("1.0.1+dfsg-1", "1.0.1-1"), Equals, 1) - c.Check(CompareVersions("1.0-1+b1", "1.0-2"), Equals, -1) + // The following tests exercise the last-hyphen split and additional + // comparison edge cases (added by PR #1646, rebased onto master). + check("1.6.0-rc1+really1.6.0-0", "1.6.0-rc1-0", 1, nil) + check("1.2-3-4", "1.2-3-5", -1, nil) + check("1.0-1-1", "1.0-1", 1, nil) + check("1.0+1", "1.0", 1, nil) + check("1.0+a-1", "1.0-a-1", -1, nil) + check("1.0+1-1", "1.0-1", 1, nil) + check("1.0-1+b1", "1.0-1", 1, nil) + check("1.0-1+b1", "1.0-1~bpo1", 1, nil) + check("1.0-1+b2", "1.0-1+b10", -1, nil) + check("1.0.1+dfsg-1", "1.0.1-1", 1, nil) + check("1.0-1+b1", "1.0-2", -1, nil) } func (s *VersionSuite) TestParseDependency(c *C) {