File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -28,19 +28,24 @@ type HAProxyVersion struct {
2828}
2929
3030func (v * HAProxyVersion ) ParseHAProxyVersion (version string ) error {
31+ parts := strings .Split (version , "-" )
3132 sv , err := semver .NewVersion (version )
3233 if err != nil {
33- return err
34+ // Only use the first part.
35+ sv , err = semver .NewVersion (parts [0 ])
36+ if err != nil {
37+ return err
38+ }
3439 }
3540 v .Version = sv
36- // Commit lives in the prerelease tail: "dev6-2f6f36-13" → "2f6f36",
37- // "a42e6c-11" → "a42e6c", "34b2b10" → "34b2b10" .
38- if pre := sv . Prerelease (); pre != "" {
39- parts := strings . Split ( pre , "-" )
40- if len ( parts ) < 2 {
41- v .Commit = parts [ 0 ]
42- } else {
43- v . Commit = parts [ len ( parts ) - 2 ]
41+
42+ // Look for a git commit hash .
43+ if len ( parts ) > 1 {
44+ for _ , part := range parts [ 1 :] {
45+ if isGitTag ( part ) {
46+ v .Commit = part
47+ break
48+ }
4449 }
4550 }
4651 return nil
@@ -55,3 +60,18 @@ func IsBiggerOrEqual(minimum, current *HAProxyVersion) bool {
5560 }
5661 return current .GreaterThanEqual (minimum .Version )
5762}
63+
64+ // Matches git tags between 6 and 8 characters long.
65+ func isGitTag (s string ) bool {
66+ n := len (s )
67+ if n < 6 || n > 8 {
68+ return false
69+ }
70+ for _ , c := range s {
71+ match := (c >= '0' && c <= '9' ) || (c >= 'a' && c <= 'f' )
72+ if ! match {
73+ return false
74+ }
75+ }
76+ return true
77+ }
Original file line number Diff line number Diff line change @@ -50,6 +50,27 @@ func TestHAProxyVersion(t *testing.T) {
5050 Commit : "34b2b10" ,
5151 Original : "2.2.5-34b2b10" ,
5252 },
53+ "3.4.3-0+ha34+ubuntu24.04u1" : {
54+ Major : 3 ,
55+ Minor : 4 ,
56+ Patch : 3 ,
57+ Commit : "" ,
58+ Original : "3.4.3" ,
59+ },
60+ "3.2.22-1ppa1~noble" : {
61+ Major : 3 ,
62+ Minor : 2 ,
63+ Patch : 22 ,
64+ Commit : "" ,
65+ Original : "3.2.22" ,
66+ },
67+ "3.4.0-aloha-e59b6a36-flx2.2_albva" : {
68+ Major : 3 ,
69+ Minor : 4 ,
70+ Patch : 0 ,
71+ Commit : "e59b6a36" ,
72+ Original : "3.4.0" ,
73+ },
5374 }
5475 for version , result := range tests {
5576 t .Run (version , func (t * testing.T ) {
You can’t perform that action at this time.
0 commit comments