You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/04/23 23:11:04 UTC

[3/5] git commit: [#5120] Fixed branches with / in them

[#5120] Fixed branches with / in them

Signed-off-by: Cory Johns <cj...@slashdotmedia.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/2eefae86
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/2eefae86
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/2eefae86

Branch: refs/heads/master
Commit: 2eefae860b249290fbb51a4c4e1f9a52265f7bb0
Parents: 90e263e
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Wed Apr 10 15:51:56 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Tue Apr 23 17:03:34 2013 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/repository.py          |   25 +++++-----
 Allura/allura/model/repository.py                |   44 +++++------------
 ForgeGit/forgegit/controllers.py                 |    4 +-
 ForgeGit/forgegit/git_main.py                    |    2 +-
 ForgeGit/forgegit/tests/model/test_repository.py |    2 +-
 ForgeSVN/forgesvn/controllers.py                 |    4 +-
 ForgeSVN/forgesvn/model/svn.py                   |   17 ++-----
 ForgeSVN/forgesvn/svn_main.py                    |    2 +-
 8 files changed, 36 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2eefae86/Allura/allura/controllers/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py
index e073f1a..80605be 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -73,8 +73,7 @@ class RepoRootController(BaseController):
     def index(self, offset=0, branch=None, **kw):
         if branch is None:
             branch=c.app.default_branch_name
-        redirect(url(quote('%s%s/' % (
-                        branch, c.app.END_OF_REF_ESCAPE))))
+        redirect(c.app.repo.url_for_commit(branch, url_type='ref'))
 
     @with_trailing_slash
     @expose('jinja:allura:templates/repo/forks.html')
@@ -377,21 +376,23 @@ class RefsController(object):
         self.BranchBrowserClass = BranchBrowserClass
 
     @expose()
-    def _lookup(self, *parts):
-        parts = map(unquote, parts)
-        ref = []
-        while parts:
-            part = parts.pop(0)
-            ref.append(part)
-            if part.endswith(c.app.END_OF_REF_ESCAPE):
-                break
-        ref = '/'.join(ref)[:-1]
-        return self.BranchBrowserClass(ref), parts
+    def _lookup(self, ref, *remainder):
+        EOR = quote(c.app.END_OF_REF_ESCAPE)
+        if EOR in remainder:
+            i = remainder.index(quote(c.app.END_OF_REF_ESCAPE))
+            ref = '/'.join((ci,) + remainder[:i])
+            remainder = remainder[i+1:]
+        return self.BranchBrowserClass(ref), remainder
 
 class CommitsController(object):
 
     @expose()
     def _lookup(self, ci, *remainder):
+        EOR = quote(c.app.END_OF_REF_ESCAPE)
+        if EOR in remainder:
+            i = remainder.index(quote(c.app.END_OF_REF_ESCAPE))
+            ci = '/'.join((ci,) + remainder[:i])
+            remainder = remainder[i+1:]
         return CommitBrowser(ci), remainder
 
 class BranchBrowser(BaseController):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2eefae86/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index cae4ce0..8a95993 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -179,40 +179,17 @@ class RepositoryImplementation(object):
         tags = [t.name for t in self._repo.repo_tags if t.object_id == commit._id]
         return branches, tags
 
-    def url_for_symbolic(self, commit):
-        if isinstance(commit, basestring):
-            object_id = commit
-        else:
-            object_id = commit._id
-
-        if self._repo.commit(object_id).symbolic_ids:
-            rev = None
-            branches, tags = self._repo.commit(object_id).symbolic_ids
-            for branch in branches:
-                last_commit = self._repo.latest(branch)
-                if last_commit and (object_id == last_commit._id):
-                    rev = branch
-                    break
-
-            for tag in tags:
-                last_commit = self._repo.latest(tag)
-                if last_commit and (object_id == last_commit._id):
-                    rev = tag
-                    break
-
-            if rev:
-                object_id = quote(rev, safe='')
-
-        return '%sci/%s/' % (self._repo.url(), object_id)
-
-    def url_for_commit(self, commit):
+    def url_for_commit(self, commit, url_type='ci'):
         'return an URL, given either a commit or object id'
         if isinstance(commit, basestring):
             object_id = commit
         else:
             object_id = commit._id
 
-        return '%sci/%s/' % (self._repo.url(), object_id)
+        if '/' in object_id:
+            object_id = os.path.join(object_id, self._repo.app.END_OF_REF_ESCAPE)
+
+        return os.path.join(self._repo.url(), url_type, object_id) + '/'
 
     def _setup_paths(self, create_repo_dir=True):
         '''
@@ -336,8 +313,8 @@ class Repository(Artifact, ActivityObject):
         return self._impl.shorthand_for_commit(oid)
     def symbolics_for_commit(self, commit):
         return self._impl.symbolics_for_commit(commit)
-    def url_for_commit(self, commit):
-        return self._impl.url_for_commit(commit)
+    def url_for_commit(self, commit, url_type='ci'):
+        return self._impl.url_for_commit(commit, url_type)
     def compute_tree_new(self, commit, path='/'):
         return self._impl.compute_tree_new(commit, path)
     def commits(self, path=None, rev=None, skip=None, limit=None):
@@ -453,8 +430,11 @@ class Repository(Artifact, ActivityObject):
         for oid in self.commitlog([ci._id]): result += 1
         return result
 
-    def latest(self, branch='master'):
-        if self._impl is None: return None
+    def latest(self, branch=None):
+        if self._impl is None:
+            return None
+        if branch is None:
+            branch = self.app.default_branch_name
         try:
             return self.commit(branch)
         except: # pragma no cover

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2eefae86/ForgeGit/forgegit/controllers.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/controllers.py b/ForgeGit/forgegit/controllers.py
index 320cc9b..93e9364 100644
--- a/ForgeGit/forgegit/controllers.py
+++ b/ForgeGit/forgegit/controllers.py
@@ -21,6 +21,7 @@ from pylons import tmpl_context as c
 
 from allura.controllers import repository
 
+
 class BranchBrowser(repository.BranchBrowser):
 
     @expose('jinja:forgegit:templates/git/index.html')
@@ -30,5 +31,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)
-        redirect(c.app.repo._impl.url_for_symbolic(latest._id) + 'tree/')
-
+        redirect(c.app.repo.url_for_commit(self._branch) + 'tree/')

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2eefae86/ForgeGit/forgegit/git_main.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/git_main.py b/ForgeGit/forgegit/git_main.py
index 7e3a79e..85219f8 100644
--- a/ForgeGit/forgegit/git_main.py
+++ b/ForgeGit/forgegit/git_main.py
@@ -50,7 +50,7 @@ class ForgeGitApp(RepositoryApp):
     """
     ordinal=2
     forkable=True
-    default_branch_name='ref/master'
+    default_branch_name='master'
 
     def __init__(self, project, config):
         super(ForgeGitApp, self).__init__(project, config)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2eefae86/ForgeGit/forgegit/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py
index 18de668..46c2daa 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -349,7 +349,7 @@ class TestGitCommit(unittest.TestCase):
 
     def test_url(self):
         assert self.rev.url().endswith('ca4a/')
-        assert self.repo._impl.url_for_symbolic(self.rev._id).endswith('master/'), self.repo._impl.url_for_symbolic(self.rev._id)
+        assert self.repo._impl.url_for_commit('master').endswith('master/'), self.repo._impl.url_for_commit('master')
 
     def test_committer_url(self):
         assert self.rev.committer_url is None

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2eefae86/ForgeSVN/forgesvn/controllers.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/controllers.py b/ForgeSVN/forgesvn/controllers.py
index 83537a9..2e39fc7 100644
--- a/ForgeSVN/forgesvn/controllers.py
+++ b/ForgeSVN/forgesvn/controllers.py
@@ -20,7 +20,7 @@ from tg.decorators import with_trailing_slash
 from pylons import tmpl_context as c
 
 from allura.controllers import repository
-from allura.lib import helpers as h
+
 
 class BranchBrowser(repository.BranchBrowser):
 
@@ -34,7 +34,7 @@ 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)
-        redirect(c.app.repo._impl.url_for_symbolic(latest._id) + 'tree/')
+        redirect(c.app.repo.url_for_commit(c.app.default_branch_name) + 'tree/')
 
     @expose()
     def _lookup(self, rev, *remainder):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2eefae86/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 9fc9ed1..de05fd0 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -179,23 +179,14 @@ class SVNImplementation(M.RepositoryImplementation):
     def shorthand_for_commit(self, oid):
         return '[r%d]' % self._revno(oid)
 
-    def url_for_symbolic(self, commit):
+    def url_for_commit(self, commit, url_type=None):
         if isinstance(commit, basestring):
             object_id = commit
         else:
             object_id = commit._id
-        if self._repo.latest()._id == object_id:
-            return '%sHEAD/' % self._repo.url()
-        return '%s%d/' % (
-            self._repo.url(), self._revno(object_id))
-
-    def url_for_commit(self, commit):
-        if isinstance(commit, basestring):
-            object_id = commit
-        else:
-            object_id = commit._id
-        return '%s%d/' % (
-            self._repo.url(), self._revno(object_id))
+        if ':' in object_id:
+            object_id = str(self._revno(object_id))
+        return os.path.join(self._repo.url(), object_id) + '/'
 
     def init(self, default_dirs=False, skip_special_files=False):
         fullname = self._setup_paths()

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2eefae86/ForgeSVN/forgesvn/svn_main.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/svn_main.py b/ForgeSVN/forgesvn/svn_main.py
index 0e8a900..cca94f7 100644
--- a/ForgeSVN/forgesvn/svn_main.py
+++ b/ForgeSVN/forgesvn/svn_main.py
@@ -57,7 +57,7 @@ class ForgeSVNApp(RepositoryApp):
     """
     ordinal=4
     forkable=False
-    default_branch_name=''
+    default_branch_name='HEAD'
 
     def __init__(self, project, config):
         super(ForgeSVNApp, self).__init__(project, config)