diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 252210e..b0f567e 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -498,6 +498,13 @@
     def url(self):
         return self.app_config.url()
 
+    def refresh_url(self):
+        return '/'.join([
+                tg.config.get('base_url', 'http://localhost:8080').rstrip('/'),
+                'auth/refresh_repo',
+                self.url().lstrip('/'),
+            ])
+
     def shorthand_id(self):
         return self.name
 
diff --git a/Allura/allura/tests/model/test_repo.py b/Allura/allura/tests/model/test_repo.py
index a2a66ff..f0bf936 100644
--- a/Allura/allura/tests/model/test_repo.py
+++ b/Allura/allura/tests/model/test_repo.py
@@ -95,6 +95,36 @@
         self.assertEqual(run.parent_commit_ids, [])
 
 
+class RepoTestBase(unittest.TestCase):
+    def setUp(self):
+        setup_basic_test()
+
+    @mock.patch('allura.model.repository.Repository.url')
+    def test_refresh_url(self, url):
+        url.return_value = '/p/test/repo'
+        c.app = mock.Mock(**{'config._id': 'deadbeef'})
+        repo = M.repository.Repository()
+        cases = [
+            [
+                None,
+                'http://localhost:8080/auth/refresh_repo/p/test/repo',
+            ],
+            [
+                'https://somewhere.com',
+                'https://somewhere.com/auth/refresh_repo/p/test/repo',
+            ],
+            [
+                'http://somewhere.com/',
+                'http://somewhere.com/auth/refresh_repo/p/test/repo',
+            ]]
+        for base_url, result in cases:
+            values = {}
+            if base_url:
+                values['base_url'] = base_url
+            with mock.patch.dict(config, values, clear=True):
+                self.assertEqual(result, repo.refresh_url())
+
+
 class TestLastCommit(unittest.TestCase):
     def setUp(self):
         setup_basic_test()
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index ae9f63e..9debcc9 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -417,8 +417,7 @@
     def _setup_hooks(self, source_path=None):
         'Set up the git post-commit hook'
         text = self.post_receive_template.substitute(
-            url=tg.config.get('base_url', 'http://localhost:8080')
-            + '/auth/refresh_repo' + self._repo.url())
+            url=self._repo.refresh_url())
         fn = os.path.join(self._repo.fs_path, self._repo.name, 'hooks', 'post-receive')
         with open(fn, 'w') as fp:
             fp.write(text)
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index f4d0ac0..a547913 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -630,8 +630,7 @@
         # setup a post-commit hook to notify Allura of changes to the repo
         # the hook should also call the user-defined post-commit-user hook
         text = self.post_receive_template.substitute(
-            url=tg.config.get('base_url', 'http://localhost:8080')
-            + '/auth/refresh_repo' + self._repo.url())
+            url=self._repo.refresh_url())
         fn = os.path.join(self._repo.fs_path, self._repo.name, 'hooks', 'post-commit')
         with open(fn, 'wb') as fp:
             fp.write(text)
