Skip to content

Commit 8ffc512

Browse files
get all release prerequisute with server version
1 parent 9fe2361 commit 8ffc512

1 file changed

Lines changed: 49 additions & 1 deletion

File tree

api/RestHandler.go

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"io/ioutil"
2828
"net/http"
2929
"strconv"
30+
"strings"
3031
)
3132

3233
type RestHandler interface {
@@ -140,19 +141,30 @@ func (impl *RestHandlerImpl) GetReleases(w http.ResponseWriter, r *http.Request)
140141
if len(repo) > 0 {
141142
repository = bean.Repository(repo)
142143
}
144+
serverVersion := r.URL.Query().Get("serverVersion")
143145
//will fetch all the releases from cache and later apply size and offset filter
144146
response, err := impl.releaseNoteService.GetReleases(repository)
145147
if err != nil {
146148
impl.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
147149
return
148150
}
149151

150-
if size > 0 {
152+
if size > 0 && len(serverVersion) == 0 {
151153
if offset+size <= len(response) {
152154
response = response[offset : offset+size]
153155
} else {
154156
response = response[offset:]
155157
}
158+
} else if len(serverVersion) > 0 {
159+
// get all releases of that version and above that version
160+
var filteredResponse []*common.Release
161+
for _, release := range response {
162+
// Compare version strings - include matching version and newer versions
163+
if release.TagName == serverVersion || isVersionNewer(release.TagName, serverVersion) {
164+
filteredResponse = append(filteredResponse, release)
165+
}
166+
}
167+
response = filteredResponse
156168
}
157169
if len(response) == 0 {
158170
response = make([]*common.Release, 0)
@@ -230,3 +242,39 @@ func (impl *RestHandlerImpl) GetBuildpackMetadata(w http.ResponseWriter, r *http
230242
impl.WriteJsonResp(w, nil, buildpackMetadata, http.StatusOK)
231243
return
232244
}
245+
246+
// isVersionNewer compares two version strings and returns true if v1 is newer than v2
247+
func isVersionNewer(v1, v2 string) bool {
248+
// Remove 'v' prefix if present
249+
v1 = strings.TrimPrefix(v1, "v")
250+
v2 = strings.TrimPrefix(v2, "v")
251+
252+
// Split versions into components
253+
v1Parts := strings.Split(v1, ".")
254+
v2Parts := strings.Split(v2, ".")
255+
256+
// Compare each component
257+
for i := 0; i < len(v1Parts) && i < len(v2Parts); i++ {
258+
v1Num, err1 := strconv.Atoi(v1Parts[i])
259+
v2Num, err2 := strconv.Atoi(v2Parts[i])
260+
261+
// If parts aren't numeric, fall back to string comparison
262+
if err1 != nil || err2 != nil {
263+
if v1Parts[i] > v2Parts[i] {
264+
return true
265+
} else if v1Parts[i] < v2Parts[i] {
266+
return false
267+
}
268+
continue
269+
}
270+
271+
if v1Num > v2Num {
272+
return true
273+
} else if v1Num < v2Num {
274+
return false
275+
}
276+
}
277+
278+
// If all compared components are equal, the longer version is newer
279+
return len(v1Parts) > len(v2Parts)
280+
}

0 commit comments

Comments
 (0)