# HG changeset patch # User Mathias De Mare # Date 1672834977 -3600 # Node ID c1df0ddc9c580c1b87123b01fbc5199078ae0e2f # Parent 3c55f6f179fb82fcb6e002b815a5f1c99db076a4 pullrequests: introduce limit to stop displaying additional changes We've noticed some scalability issues when many descendants exist for the changesets in a pull request. To resolve this issue, we instead do not display any additional changes at all if the amount of additional changes is larger than a configured limit. (This occurred because we were merging a lot of heads in the repository.) Throwing away some of the changesets would also keep the total amount more manageable, but this would result in an (for the user) unpredictable subset of changesets being shown. This could be extended further with "too long to be shown - click here to show", but that was quite a bit of additional work and did not cover our use case of not allowing the display at all in case of too many additional changes. diff -r 3c55f6f179fb -r c1df0ddc9c58 kallithea/controllers/pullrequests.py --- a/kallithea/controllers/pullrequests.py Tue Dec 27 20:22:14 2022 +0100 +++ b/kallithea/controllers/pullrequests.py Wed Jan 04 13:22:57 2023 +0100 @@ -35,6 +35,7 @@ from tg.i18n import ugettext as _ from webob.exc import HTTPBadRequest, HTTPForbidden, HTTPFound, HTTPNotFound +import kallithea import kallithea.lib.helpers as h from kallithea.controllers import base from kallithea.controllers.changeset import create_cs_pr_comment, delete_cs_pr_comment @@ -494,6 +495,8 @@ except IndexError: # probably because c.cs_ranges is empty, probably because revisions are missing pass + rev_limit = safe_int(kallithea.CONFIG.get('next_iteration_rev_limit'), 0) + avail_revs = set() avail_show = [] c.cs_branch_name = c.cs_ref_name @@ -563,6 +566,11 @@ except ChangesetDoesNotExistError: c.update_msg = _('Error: some changesets not found when displaying pull request from %s.') % c.cs_rev + if rev_limit: + if len(avail_revs) - 1 > rev_limit: + c.update_msg = _('%d additional changesets are not shown.') % (len(avail_revs) - 1) + avail_show = [] + c.avail_revs = avail_revs c.avail_cs = [org_scm_instance.get_changeset(r) for r in avail_show] c.avail_jsdata = graph_data(org_scm_instance, avail_show)