mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	[API] Add pagination to ListBranches (#14524)
* make PaginateUserSlice generic -> PaginateSlice * Add pagination to ListBranches * add skip, limit to Repository.GetBranches() * Move routers/api/v1/utils/utils PaginateSlice -> modules/util/paginate.go * repo_module.GetBranches paginate * fix & rename & more logging * better description Co-authored-by: zeripath <art27@cantab.net> Co-authored-by: a1012112796 <1012112796@qq.com>
This commit is contained in:
		
							
								
								
									
										34
									
								
								modules/util/paginate.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								modules/util/paginate.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
// Copyright 2021 The Gitea Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a MIT-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package util
 | 
			
		||||
 | 
			
		||||
import "reflect"
 | 
			
		||||
 | 
			
		||||
// PaginateSlice cut a slice as per pagination options
 | 
			
		||||
// if page = 0 it do not paginate
 | 
			
		||||
func PaginateSlice(list interface{}, page, pageSize int) interface{} {
 | 
			
		||||
	if page <= 0 || pageSize <= 0 {
 | 
			
		||||
		return list
 | 
			
		||||
	}
 | 
			
		||||
	if reflect.TypeOf(list).Kind() != reflect.Slice {
 | 
			
		||||
		return list
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	listValue := reflect.ValueOf(list)
 | 
			
		||||
 | 
			
		||||
	page--
 | 
			
		||||
 | 
			
		||||
	if page*pageSize >= listValue.Len() {
 | 
			
		||||
		return listValue.Slice(listValue.Len(), listValue.Len()).Interface()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	listValue = listValue.Slice(page*pageSize, listValue.Len())
 | 
			
		||||
 | 
			
		||||
	if listValue.Len() > pageSize {
 | 
			
		||||
		return listValue.Slice(0, pageSize).Interface()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return listValue.Interface()
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user