[ARVADOS-DEV] updated: b6fdd9810edd6535f0aa7624ce7341dc3e4c2358

Git user git at public.arvados.org
Thu Mar 10 18:12:53 UTC 2022


Summary of changes:
 lib/redmine/issues.go  | 45 ++++++++++++++++++++++++++++-----------------
 lib/redmine/redmine.go |  1 +
 2 files changed, 29 insertions(+), 17 deletions(-)

       via  b6fdd9810edd6535f0aa7624ce7341dc3e4c2358 (commit)
      from  ef344314e315246e1da4d9889bb9bc51ef962ce5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit b6fdd9810edd6535f0aa7624ce7341dc3e4c2358
Author: Ward Vandewege <ward at curii.com>
Date:   Thu Mar 10 13:11:26 2022 -0500

    A few bugfixes in the redmine library: fix the version filter for
    issues, handle pagination in the FilteredIssues function.
    
    refs #18813
    
    Arvados-DCO-1.1-Signed-off-by: Ward Vandewege <ward at curii.com>

diff --git a/lib/redmine/issues.go b/lib/redmine/issues.go
index 90c8c42..7b6e5fe 100644
--- a/lib/redmine/issues.go
+++ b/lib/redmine/issues.go
@@ -86,32 +86,43 @@ func issueFilters(issueFilter *IssueFilter) []string {
 		filterParameters = append(filterParameters, fmt.Sprintf("subject=~%v", issueFilter.Subject))
 	}
 	if len(issueFilter.VersionID) > 0 {
-		filterParameters = append(filterParameters, fmt.Sprintf("fixed_version=~%v", issueFilter.VersionID))
-	}
-
-	if len(filterParameters) > 0 {
-		return filterParameters[1:]
+		filterParameters = append(filterParameters, fmt.Sprintf("fixed_version_id=%v", issueFilter.VersionID))
 	}
 
 	return filterParameters
 }
 
 // FilteredIssues returns a slice of issues that matches the f criteria
+// This function handles pagination internally, so it could return a lot
+// of results at once.
 func (c *Client) FilteredIssues(f *IssueFilter) ([]Issue, error) {
 	s := issueFilters(f)
 
-	res, err := c.Get("/issues.json?" + strings.Join(s, "&"))
-	if err != nil {
-		return nil, err
-	}
-	defer res.Body.Close()
-
-	var r issuesResult
-	err = responseHelper(res, &r, 200)
-	if err != nil {
-		return nil, err
-	}
-	return r.Issues, nil
+	var issues []Issue
+	var offset int
+	// Get 100 results at once (the default is 25)
+	limit := 100
+	for {
+		parameters := append(s, fmt.Sprintf("offset=%d", offset), fmt.Sprintf("limit=%d", limit))
+		res, err := c.Get("/issues.json?" + strings.Join(parameters, "&"))
+		if err != nil {
+			return nil, err
+		}
+		defer res.Body.Close()
+
+		var r issuesResult
+		err = responseHelper(res, &r, 200)
+		if err != nil {
+			return nil, err
+		}
+		issues = append(issues, r.Issues...)
+		if r.Offset+uint(len(r.Issues)) >= r.TotalCount {
+			break
+		}
+		offset += limit
+	}
+
+	return issues, nil
 }
 
 // CreateIssue creates a redmine issue
diff --git a/lib/redmine/redmine.go b/lib/redmine/redmine.go
index 70a93f4..b5f981f 100644
--- a/lib/redmine/redmine.go
+++ b/lib/redmine/redmine.go
@@ -95,5 +95,6 @@ func responseHelper(res *http.Response, r interface{}, okCode int) error {
 		// When r is nil, the API call is not expected to return a result (empty res.Body)
 		err = decoder.Decode(&r)
 	}
+	//fmt.Printf("***\nRAW RESPONSE: %+v\n***\n", r)
 	return err
 }

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list