From 97cf0225e81f80e67a42279699c93df9bfa32b9a 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] 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.go | 2 +- deb/version_test.go | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/deb/version.go b/deb/version.go index 4b9150389..b354855d7 100644 --- a/deb/version.go +++ b/deb/version.go @@ -35,7 +35,7 @@ func parseVersion(ver string) (epoch, upstream, debian string) { epoch, ver = ver[:i], ver[i+1:] } - i = strings.Index(ver, "-") + i = strings.LastIndex(ver, "-") if i != -1 { debian, ver = ver[i+1:], ver[:i] } diff --git a/deb/version_test.go b/deb/version_test.go index 5b0692313..843b6554e 100644 --- a/deb/version_test.go +++ b/deb/version_test.go @@ -20,10 +20,10 @@ func (s *VersionSuite) TestParseVersion(c *C) { c.Check([]string{e, u, d}, DeepEquals, []string{"", "1.3.4", "1"}) e, u, d = parseVersion("1.3-pre4-1") - c.Check([]string{e, u, d}, DeepEquals, []string{"", "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"}) + c.Check([]string{e, u, d}, DeepEquals, []string{"4", "1.3-pre4", "1"}) } func (s *VersionSuite) TestCompareLexicographic(c *C) { @@ -100,7 +100,18 @@ func (s *VersionSuite) TestCompareVersions(c *C) { c.Check(CompareVersions("1.0-133-avc", "1.0"), Equals, 1) 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("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) {