+package com.onresolve.stash.groovy.test.listeners.STASH_3850_block_personal
+import com.atlassian.sal.api.component.ComponentLocator
+import com.atlassian.stash.event.RepositoryCreationRequestedEvent
+import com.atlassian.stash.project.ProjectType
+import com.atlassian.stash.repository.Repository
+import com.atlassian.stash.repository.RepositoryService
+import com.atlassian.stash.util.Page
+import com.atlassian.stash.util.PageProvider
+import com.atlassian.stash.util.PageRequest
+import com.atlassian.stash.util.PagedIterable
+// only allow N personal
+def repositoryService = ComponentLocator.getComponent(RepositoryService)
+def event = event as RepositoryCreationRequestedEvent
+def project = event.repository.project
+// allow only 1Gb total size per user
+if (project.type == ProjectType.PERSONAL) {
+ def totalUserSize = new PagedIterable<Repository>(new PageProvider<Repository>() {
+ Page<Repository> get(PageRequest pageRequest) {
+ repositoryService.findByProjectKey(project.key, pageRequest) as Page<Repository>
+ }, 100).sum { Repository repo ->
+ repositoryService.getSize(repo)
+ if (totalUserSize >= 1024e3) {
+ event.cancel("You can only use 1Gb in personal repository space, which you have exceeded.")