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):

Reply via email to