mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-01-11 03:11:50 +00:00
make version comparision more similar to that of dpkg
Initially found by automated repository health checks used by Termux in https://github.com/termux/termux-packages/issues/27472 The root problem was 4.3.5a comparing less than 4.3.5-rc1-1 by aptly According to debian "4.3.5a" > "4.3.5-rc1-1" This is because dpkg splits hyphen for revision at the first hyphen, whereas aptly was splitting at the last hyphen which is different from dpkg's behaviour. dpkg behaviour: https://git.dpkg.org/cgit/dpkg/dpkg.git/tree/lib/dpkg/parsehelp.c#n242 Perhaps this wasn't detected as there was broken tests in the repository since the initial commit of aptly. This also fixes those tests
This commit is contained in:
@@ -30,16 +30,16 @@ func CompareVersions(ver1, ver2 string) int {
|
|||||||
|
|
||||||
// parseVersions breaks down full version to components (possibly empty)
|
// parseVersions breaks down full version to components (possibly empty)
|
||||||
func parseVersion(ver string) (epoch, upstream, debian string) {
|
func parseVersion(ver string) (epoch, upstream, debian string) {
|
||||||
i := strings.LastIndex(ver, "-")
|
i := strings.Index(ver, ":")
|
||||||
if i != -1 {
|
|
||||||
debian, ver = ver[i+1:], ver[:i]
|
|
||||||
}
|
|
||||||
|
|
||||||
i = strings.Index(ver, ":")
|
|
||||||
if i != -1 {
|
if i != -1 {
|
||||||
epoch, ver = ver[:i], ver[i+1:]
|
epoch, ver = ver[:i], ver[i+1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i = strings.Index(ver, "-")
|
||||||
|
if i != -1 {
|
||||||
|
debian, ver = ver[i+1:], ver[:i]
|
||||||
|
}
|
||||||
|
|
||||||
upstream = ver
|
upstream = ver
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -20,10 +20,10 @@ func (s *VersionSuite) TestParseVersion(c *C) {
|
|||||||
c.Check([]string{e, u, d}, DeepEquals, []string{"", "1.3.4", "1"})
|
c.Check([]string{e, u, d}, DeepEquals, []string{"", "1.3.4", "1"})
|
||||||
|
|
||||||
e, u, d = parseVersion("1.3-pre4-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")
|
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) {
|
func (s *VersionSuite) TestCompareLexicographic(c *C) {
|
||||||
@@ -100,6 +100,7 @@ func (s *VersionSuite) TestCompareVersions(c *C) {
|
|||||||
c.Check(CompareVersions("1.0-133-avc", "1.0"), Equals, 1)
|
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("5.2.0.3", "5.2.0.283"), Equals, -1)
|
||||||
|
c.Check(CompareVersions("4.3.5a", "4.3.5-rc3-1"), Equals, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *VersionSuite) TestParseDependency(c *C) {
|
func (s *VersionSuite) TestParseDependency(c *C) {
|
||||||
|
|||||||
Reference in New Issue
Block a user