Merge ~ilasc/launchpad:number-of-repack-candidates into launchpad:master

Proposed by Ioana Lasc
Status: Merged
Approved by: Ioana Lasc
Approved revision: 83a536aa6e3dd41b39c8dd2f0855e302dc14d544
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~ilasc/launchpad:number-of-repack-candidates
Merge into: launchpad:master
Diff against target: 79 lines (+46/-0)
3 files modified
lib/lp/code/interfaces/gitrepository.py (+9/-0)
lib/lp/code/model/gitrepository.py (+14/-0)
lib/lp/code/model/tests/test_gitrepository.py (+23/-0)
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+402818@code.launchpad.net

Commit message

GET total number of repack candidates

Description of the change

This adds an endpoint that gives us the total number of repositories that qualify for a repack.

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) :
review: Approve
83a536a... by Ioana Lasc

Address code review comments

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/lib/lp/code/interfaces/gitrepository.py b/lib/lp/code/interfaces/gitrepository.py
index 294cc35..dbd7870 100644
--- a/lib/lp/code/interfaces/gitrepository.py
+++ b/lib/lp/code/interfaces/gitrepository.py
@@ -1096,6 +1096,15 @@ class IGitRepositorySet(Interface):
1096 :return: A collection of `IGitRepository` objects.1096 :return: A collection of `IGitRepository` objects.
1097 """1097 """
10981098
1099 @export_read_operation()
1100 @operation_for_version("devel")
1101 def countRepositoriesForRepack():
1102 """Get number of repositories qualifying for a repack.
1103
1104 :return: The number of `IGitRepository` objects qualifying
1105 for a repack.
1106 """
1107
1099 @call_with(user=REQUEST_USER)1108 @call_with(user=REQUEST_USER)
1100 @operation_parameters(1109 @operation_parameters(
1101 person=Reference(1110 person=Reference(
diff --git a/lib/lp/code/model/gitrepository.py b/lib/lp/code/model/gitrepository.py
index d447abb..58c298c 100644
--- a/lib/lp/code/model/gitrepository.py
+++ b/lib/lp/code/model/gitrepository.py
@@ -1862,6 +1862,20 @@ class GitRepositorySet:
1862 collection = collection.modifiedSince(modified_since_date)1862 collection = collection.modifiedSince(modified_since_date)
1863 return collection.getRepositories(eager_load=True, sort_by=order_by)1863 return collection.getRepositories(eager_load=True, sort_by=order_by)
18641864
1865 def countRepositoriesForRepack(self):
1866 """See `IGitRepositorySet`."""
1867 repos = IStore(GitRepository).find(
1868 GitRepository,
1869 Or(
1870 GitRepository.loose_object_count >=
1871 config.codehosting.loose_objects_threshold,
1872 GitRepository.pack_count >=
1873 config.codehosting.packs_threshold,
1874 ),
1875 GitRepository.status == GitRepositoryStatus.AVAILABLE,
1876 ).order_by(GitRepository.id)
1877 return repos.count()
1878
1865 def getRepositoryVisibilityInfo(self, user, person, repository_names):1879 def getRepositoryVisibilityInfo(self, user, person, repository_names):
1866 """See `IGitRepositorySet`."""1880 """See `IGitRepositorySet`."""
1867 if user is None:1881 if user is None:
diff --git a/lib/lp/code/model/tests/test_gitrepository.py b/lib/lp/code/model/tests/test_gitrepository.py
index 008c640..a0d0baa 100644
--- a/lib/lp/code/model/tests/test_gitrepository.py
+++ b/lib/lp/code/model/tests/test_gitrepository.py
@@ -4069,6 +4069,29 @@ class TestGitRepositoryWebservice(TestCaseWithFactory):
4069 def test_getRepositories_personal(self):4069 def test_getRepositories_personal(self):
4070 self.assertGetRepositoriesWorks(self.factory.makePerson())4070 self.assertGetRepositoriesWorks(self.factory.makePerson())
40714071
4072 def test_getNumberRepositoriesForRepack(self):
4073 person = self.factory.makePerson()
4074 webservice = webservice_for_person(
4075 person, permission=OAuthPermission.WRITE_PUBLIC)
4076 webservice.default_api_version = "devel"
4077 response = webservice.named_get(
4078 "/+git", "countRepositoriesForRepack")
4079 self.assertEqual(200, response.status)
4080 self.assertEqual(0, response.jsonBody())
4081 with person_logged_in(person):
4082 for _ in range(5):
4083 self.factory.makeGitRepository()
4084 for _ in range(3):
4085 repo = self.factory.makeGitRepository()
4086 removeSecurityProxy(repo).loose_object_count = 7000
4087 removeSecurityProxy(repo).pack_count = 43
4088
4089 # We have a total of 3 candidates now
4090 response = webservice.named_get(
4091 "/+git", "countRepositoriesForRepack")
4092 self.assertEqual(200, response.status)
4093 self.assertEqual(3, response.jsonBody())
4094
4072 def test_get_without_default_branch(self):4095 def test_get_without_default_branch(self):
4073 # Ensure we're not getting an error when calling4096 # Ensure we're not getting an error when calling
4074 # GET on the Webservice when a Git Repo exists in the DB4097 # GET on the Webservice when a Git Repo exists in the DB

Subscribers

People subscribed via source and target branches

to status/vote changes: