Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Cai <668120-johncai@users.noreply.gitlab.com>2020-07-17 19:34:29 +0300
committerJohn Cai <668120-johncai@users.noreply.gitlab.com>2020-07-17 19:34:29 +0300
commit83e0ecf798ee84a5c3b9be408926f3239dc61f50 (patch)
tree3cafd6588c0b1d78b2a1ac8918824cb3c77557f9
parent9e6f5f40e6eb44655b6acfd5dc222af04333a4f2 (diff)
parentfd03f22fa8d7267d8a0bcb3a75752960fdc8a083 (diff)
Merge branch 'pks-git-version-release-candidates' into 'master'
Support parsing of Git release-candidate versions See merge request gitlab-org/gitaly!2389
-rw-r--r--changelogs/unreleased/pks-git-version-release-candidates.yml5
-rw-r--r--internal/git/helper_test.go1
-rw-r--r--internal/git/proto.go18
-rw-r--r--internal/git/proto_test.go4
4 files changed, 26 insertions, 2 deletions
diff --git a/changelogs/unreleased/pks-git-version-release-candidates.yml b/changelogs/unreleased/pks-git-version-release-candidates.yml
new file mode 100644
index 000000000..d5735b1ef
--- /dev/null
+++ b/changelogs/unreleased/pks-git-version-release-candidates.yml
@@ -0,0 +1,5 @@
+---
+title: Fix parsing of Git release-candidate versions
+merge_request: 2389
+author:
+type: fixed
diff --git a/internal/git/helper_test.go b/internal/git/helper_test.go
index ffbf64739..f3cd415b1 100644
--- a/internal/git/helper_test.go
+++ b/internal/git/helper_test.go
@@ -48,6 +48,7 @@ func TestSupportsDeltaIslands(t *testing.T) {
{version: "2.19.8", delta: false},
{version: "1.20.8", delta: false},
{version: "1.18.0", delta: false},
+ {version: "2.28.0.rc0", delta: true},
{version: "2.20", fail: true},
{version: "bla bla", fail: true},
}
diff --git a/internal/git/proto.go b/internal/git/proto.go
index 9cd8be66d..053215918 100644
--- a/internal/git/proto.go
+++ b/internal/git/proto.go
@@ -115,6 +115,11 @@ func versionLessThan(v1, v2 version) bool {
case v1.patch > v2.patch:
return false
+ case v1.rc && !v2.rc:
+ return true
+ case !v1.rc && v2.rc:
+ return false
+
default:
// this should only be reachable when versions are equal
return false
@@ -123,10 +128,11 @@ func versionLessThan(v1, v2 version) bool {
type version struct {
major, minor, patch uint32
+ rc bool
}
func parseVersion(versionStr string) (version, error) {
- versionSplit := strings.SplitN(versionStr, ".", 3)
+ versionSplit := strings.SplitN(versionStr, ".", 4)
if len(versionSplit) < 3 {
return version{}, fmt.Errorf("expected major.minor.patch in %q", versionStr)
}
@@ -142,6 +148,14 @@ func parseVersion(versionStr string) (version, error) {
*v = uint32(n64)
}
+ if len(versionSplit) == 4 {
+ if strings.HasPrefix(versionSplit[3], "rc") {
+ ver.rc = true
+ } else {
+ return version{}, fmt.Errorf("unknown pre-release identifier %q", versionSplit[3])
+ }
+ }
+
return ver, nil
}
@@ -153,7 +167,7 @@ func SupportsDeltaIslands(versionStr string) (bool, error) {
return false, err
}
- return !versionLessThan(v, version{2, 20, 0}), nil
+ return !versionLessThan(v, version{2, 20, 0, false}), nil
}
// NoMissingWantErrMessage checks if the git version is before Git 2.22,
diff --git a/internal/git/proto_test.go b/internal/git/proto_test.go
index 3acb952ae..2dcafbb36 100644
--- a/internal/git/proto_test.go
+++ b/internal/git/proto_test.go
@@ -84,6 +84,10 @@ func TestVersionComparator(t *testing.T) {
{"1.1.1", "1.0.1", false},
{"1.1.1", "1.1.0", false},
{"1.1.1", "1.1.1", false},
+
+ {"1.1.1.rc0", "1.1.1", true},
+ {"1.1.1.rc0", "1.1.1.rc0", false},
+ {"1.1.1.rc0", "1.1.0", false},
} {
actual, err := git.VersionLessThan(tc.v1, tc.v2)
require.NoError(t, err)