From b05b40180f41b440d18a6d6abafd2d6187979bfe Mon Sep 17 00:00:00 2001
From: zeripath <art27@cantab.net>
Date: Mon, 21 Mar 2022 08:09:42 +0000
Subject: [PATCH] Use IterateBufferSize whilst querying repositories during
 adoption check (#19140)

The adoption page checks directories to see if they are repositories by querying the
db on a per user basis. This can lead to problems if a user has a large number of
repositories or putative repositories.

This PR changes the buffering to check the db in IterataeBufferSize batches instead.

Fix #19137

Signed-off-by: Andrew Thornton <art27@cantab.net>
---
 services/repository/adopt.go | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/services/repository/adopt.go b/services/repository/adopt.go
index 72fe284ad3..2af01e973a 100644
--- a/services/repository/adopt.go
+++ b/services/repository/adopt.go
@@ -339,6 +339,13 @@ func ListUnadoptedRepositories(query string, opts *db.ListOptions) ([]string, in
 		}
 
 		repoNamesToCheck = append(repoNamesToCheck, name)
+		if len(repoNamesToCheck) > setting.Database.IterateBufferSize {
+			if err = checkUnadoptedRepositories(userName, repoNamesToCheck, unadopted); err != nil {
+				return err
+			}
+			repoNamesToCheck = repoNamesToCheck[:0]
+
+		}
 		return filepath.SkipDir
 	}); err != nil {
 		return nil, 0, err