From 7a70befdd061fe1259413e14a37da6344243e243 Mon Sep 17 00:00:00 2001 From: Clement Hue Date: Fri, 24 Apr 2026 15:58:32 +0200 Subject: [PATCH 1/2] feat(choose_merge_request): add per_page option for merge request fetching Allow users to configure the number of merge requests fetched via the `per_page` setting in `choose_merge_request`. Defaults to 100. --- lua/gitlab/annotations.lua | 1 + lua/gitlab/state.lua | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lua/gitlab/annotations.lua b/lua/gitlab/annotations.lua index 4b8dfa6c..d35128d7 100644 --- a/lua/gitlab/annotations.lua +++ b/lua/gitlab/annotations.lua @@ -256,6 +256,7 @@ ---@class ChooseMergeRequestSettings ---@field open_reviewer? boolean -- Open the reviewer window automatically after switching merge requests +---@field per_page? integer -- Number of merge requests to fetch (default: 100) ---@class InfoSettings ---@field horizontal? boolean -- Display metadata to the left of the summary rather than underneath diff --git a/lua/gitlab/state.lua b/lua/gitlab/state.lua index 3a6df9b5..1851d61a 100644 --- a/lua/gitlab/state.lua +++ b/lua/gitlab/state.lua @@ -203,6 +203,7 @@ M.settings = { }, choose_merge_request = { open_reviewer = true, + per_page = 100, }, info = { enabled = true, @@ -559,7 +560,11 @@ M.dependencies = { opts["not[label]"] = opts.notlabel opts.notlabel = nil end - return opts or vim.json.decode("{}") + local body = opts or {} + if body.per_page == nil then + body.per_page = M.settings.choose_merge_request.per_page + end + return body end, }, merge_requests_by_username = { From 6898cbf364abe2e6aa71eade641c1c298a76ba3e Mon Sep 17 00:00:00 2001 From: Clement Hue Date: Sat, 25 Apr 2026 16:11:22 +0200 Subject: [PATCH 2/2] Remove the per_page option and now fetch all merge request internally --- cmd/app/merge_requests.go | 25 ++++++++++++++++--------- lua/gitlab/annotations.lua | 1 - lua/gitlab/state.lua | 7 +------ 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/cmd/app/merge_requests.go b/cmd/app/merge_requests.go index 86f697cd..a72408db 100644 --- a/cmd/app/merge_requests.go +++ b/cmd/app/merge_requests.go @@ -35,16 +35,23 @@ func (a mergeRequestListerService) ServeHTTP(w http.ResponseWriter, r *http.Requ payload.Scope = gitlab.Ptr("all") } - mergeRequests, res, err := a.client.ListProjectMergeRequests(a.projectInfo.ProjectId, payload) + payload.PerPage = 100 + var mergeRequests []*gitlab.BasicMergeRequest + for nextPage := int64(1); nextPage != 0; { + payload.Page = nextPage + mrs, res, err := a.client.ListProjectMergeRequests(a.projectInfo.ProjectId, payload) + if err != nil { + handleError(w, err, "Failed to list merge requests", http.StatusInternalServerError) + return + } - if err != nil { - handleError(w, err, "Failed to list merge requests", http.StatusInternalServerError) - return - } + if res.StatusCode >= 300 { + handleError(w, GenericError{r.URL.Path}, "Failed to list merge requests", res.StatusCode) + return + } - if res.StatusCode >= 300 { - handleError(w, GenericError{r.URL.Path}, "Failed to list merge requests", res.StatusCode) - return + mergeRequests = append(mergeRequests, mrs...) + nextPage = res.NextPage } if len(mergeRequests) == 0 { @@ -58,7 +65,7 @@ func (a mergeRequestListerService) ServeHTTP(w http.ResponseWriter, r *http.Requ MergeRequests: mergeRequests, } - err = json.NewEncoder(w).Encode(response) + err := json.NewEncoder(w).Encode(response) if err != nil { handleError(w, err, "could not encode response", http.StatusInternalServerError) } diff --git a/lua/gitlab/annotations.lua b/lua/gitlab/annotations.lua index d35128d7..4b8dfa6c 100644 --- a/lua/gitlab/annotations.lua +++ b/lua/gitlab/annotations.lua @@ -256,7 +256,6 @@ ---@class ChooseMergeRequestSettings ---@field open_reviewer? boolean -- Open the reviewer window automatically after switching merge requests ----@field per_page? integer -- Number of merge requests to fetch (default: 100) ---@class InfoSettings ---@field horizontal? boolean -- Display metadata to the left of the summary rather than underneath diff --git a/lua/gitlab/state.lua b/lua/gitlab/state.lua index 1851d61a..67830c2e 100644 --- a/lua/gitlab/state.lua +++ b/lua/gitlab/state.lua @@ -203,7 +203,6 @@ M.settings = { }, choose_merge_request = { open_reviewer = true, - per_page = 100, }, info = { enabled = true, @@ -560,11 +559,7 @@ M.dependencies = { opts["not[label]"] = opts.notlabel opts.notlabel = nil end - local body = opts or {} - if body.per_page == nil then - body.per_page = M.settings.choose_merge_request.per_page - end - return body + return opts or {} end, }, merge_requests_by_username = {