diff --git a/internal/gitaly/service/commit/get_tree_entries.go b/internal/gitaly/service/commit/get_tree_entries.go index bf497810e3764f520d208275d32623569abf0cd2..ca5ce568de1fdbe276ca2ce4beabcd82b23cdd14 100644 --- a/internal/gitaly/service/commit/get_tree_entries.go +++ b/internal/gitaly/service/commit/get_tree_entries.go @@ -328,7 +328,7 @@ func (s *server) GetTreeEntries(in *gitalypb.GetTreeEntriesRequest, stream gital func paginateTreeEntries(ctx context.Context, entries []*gitalypb.TreeEntry, p *gitalypb.PaginationParameter) ([]*gitalypb.TreeEntry, string, error) { limit := int(p.GetLimit()) - start, tokenType := decodePageToken(p.GetPageToken()) + start := decodePageToken(p.GetPageToken()) index := -1 // No token means we should start from the top @@ -336,7 +336,7 @@ func paginateTreeEntries(ctx context.Context, entries []*gitalypb.TreeEntry, p * index = 0 } else { for i, entry := range entries { - if buildEntryToken(entry, tokenType) == start { + if string(entry.GetPath()) == start { index = i + 1 break } @@ -365,44 +365,26 @@ func paginateTreeEntries(ctx context.Context, entries []*gitalypb.TreeEntry, p * return paginated, newPageToken, nil } -func buildEntryToken(entry *gitalypb.TreeEntry, tokenType pageTokenType) string { - if tokenType == pageTokenTypeOID { - return entry.GetOid() - } - - return string(entry.GetPath()) -} - type pageToken struct { // FileName is the name of the tree entry that acts as continuation point. FileName string `json:"file_name"` } -type pageTokenType bool - -const ( - // pageTokenTypeOID is an old-style page token that contains the object ID a tree - // entry is pointing to. This is ambiguous and thus deprecated. - pageTokenTypeOID pageTokenType = false - // pageTokenTypeFilename is a page token that contains the tree entry path. - pageTokenTypeFilename pageTokenType = true -) - // decodePageToken decodes the given Base64-encoded page token. It returns the -// continuation point of the token and its type. -func decodePageToken(token string) (string, pageTokenType) { +// continuation point of the token. +func decodePageToken(token string) string { var pageToken pageToken decodedString, err := base64.StdEncoding.DecodeString(token) if err != nil { - return token, pageTokenTypeOID + return token } if err := json.Unmarshal(decodedString, &pageToken); err != nil { - return token, pageTokenTypeOID + return token } - return pageToken.FileName, pageTokenTypeFilename + return pageToken.FileName } // encodePageToken returns a page token with the TreeEntry's path as the continuation point for diff --git a/internal/gitaly/service/commit/get_tree_entries_test.go b/internal/gitaly/service/commit/get_tree_entries_test.go index 380f4bbc0fd181bc2d8924425bac417962b89647..036e6c713ce0aa772ff02085a0c536191afb8a84 100644 --- a/internal/gitaly/service/commit/get_tree_entries_test.go +++ b/internal/gitaly/service/commit/get_tree_entries_test.go @@ -1180,6 +1180,9 @@ func TestGetTreeEntries(t *testing.T) { gittest.TreeEntry{OID: folderOID, Mode: "040000", Path: "foo"}, )) + pageToken, err := encodePageToken(&gitalypb.TreeEntry{Path: []byte("foo")}) + require.NoError(t, err) + return setupData{ request: &gitalypb.GetTreeEntriesRequest{ Repository: repo, @@ -1188,7 +1191,7 @@ func TestGetTreeEntries(t *testing.T) { Recursive: true, Sort: gitalypb.GetTreeEntriesRequest_TREES_FIRST, PaginationParams: &gitalypb.PaginationParameter{ - PageToken: folderOID.String(), + PageToken: pageToken, Limit: 3, }, },