This is an automated email from the ASF dual-hosted git repository. brondsem pushed a commit to branch db/8529 in repository https://gitbox.apache.org/repos/asf/allura.git
commit bb431c44260c945d700d1d81bbda90e4486a11f9 Author: Dave Brondsema <dbronds...@slashdotmedia.com> AuthorDate: Tue Dec 5 15:44:02 2023 -0500 [#8529] fix repo root and /ref/ controller to handle unicode branch names --- Allura/allura/controllers/repository.py | 3 ++- ForgeGit/forgegit/controllers.py | 3 ++- ForgeGit/forgegit/tests/functional/test_controllers.py | 6 ++++++ ForgeSVN/forgesvn/controllers.py | 4 ++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py index 224e5decf..351d3642f 100644 --- a/Allura/allura/controllers/repository.py +++ b/Allura/allura/controllers/repository.py @@ -91,7 +91,7 @@ class RepoRootController(BaseController, FeedController): def index(self, offset=0, branch=None, **kw): if branch is None: branch = c.app.default_branch_name - permanent_redirect(c.app.repo.url_for_commit(branch, url_type='ref')) + permanent_redirect(h.urlquote(c.app.repo.url_for_commit(branch, url_type='ref'))) @with_trailing_slash @expose('jinja:allura:templates/repo/forks.html') @@ -628,6 +628,7 @@ class RefsController: def _lookup(self, ref=None, *remainder): if ref is None: raise exc.HTTPNotFound + ref = unquote(ref) EOR = c.app.END_OF_REF_ESCAPE if EOR in remainder: i = remainder.index(EOR) diff --git a/ForgeGit/forgegit/controllers.py b/ForgeGit/forgegit/controllers.py index 0c504e935..2062d0c24 100644 --- a/ForgeGit/forgegit/controllers.py +++ b/ForgeGit/forgegit/controllers.py @@ -21,6 +21,7 @@ from tg import expose, redirect from tg.decorators import with_trailing_slash from tg import tmpl_context as c +from allura.lib import helpers as h from allura.controllers import repository @@ -33,4 +34,4 @@ class BranchBrowser(repository.BranchBrowser): latest = c.app.repo.latest(branch=self._branch) if is_empty or not latest: return dict(allow_fork=False, log=[], is_empty=is_empty) - permanent_redirect(c.app.repo.url_for_commit(self._branch) + 'tree/') + permanent_redirect(h.urlquote(c.app.repo.url_for_commit(self._branch) + 'tree/')) diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py index cb5c7bba7..3d994ca4f 100644 --- a/ForgeGit/forgegit/tests/functional/test_controllers.py +++ b/ForgeGit/forgegit/tests/functional/test_controllers.py @@ -525,6 +525,12 @@ class TestRootController(_TestCase): assert 'bad</a>' not in r assert 'README</a>' in r + def test_index_branch_unicode(self): + # more realistic case is the default branch having unicode, but passing the branch name is easier + resp = self.app.get('/p/test/src-git/', params={'branch':'ƒ∂ß'}) + assert resp.location == 'http://localhost/p/test/src-git/ref/%C6%92%E2%88%82%C3%9F/' + # further testing needs a real branch in our test repo + def test_set_checkout_url(self): r = self.app.get('/p/test/admin/src-git/checkout_url') r.form['external_checkout_url'].value = 'http://foo.bar/baz' diff --git a/ForgeSVN/forgesvn/controllers.py b/ForgeSVN/forgesvn/controllers.py index cf10c2ee9..ac07d05a5 100644 --- a/ForgeSVN/forgesvn/controllers.py +++ b/ForgeSVN/forgesvn/controllers.py @@ -21,6 +21,7 @@ from tg import expose, redirect from tg.decorators import with_trailing_slash from tg import tmpl_context as c +from allura.lib import helpers as h from allura.controllers import repository from allura.controllers.feed import FeedController @@ -40,8 +41,7 @@ class BranchBrowser(repository.BranchBrowser, FeedController): latest = c.app.repo.latest(branch=self._branch) if is_empty or not latest: return dict(allow_fork=False, log=[], is_empty=is_empty) - permanent_redirect(c.app.repo.url_for_commit(c.app.default_branch_name) - + 'tree/') + permanent_redirect(h.urlquote(c.app.repo.url_for_commit(c.app.default_branch_name) + 'tree/')) @expose() def _lookup(self, rev, *remainder):