--- a/ForgeHg/forgehg/hg_main.py
+++ b/ForgeHg/forgehg/hg_main.py
@@ -8,7 +8,7 @@
from subprocess import Popen
from datetime import datetime
from itertools import islice, chain
-from urllib import urlencode
+from urllib import urlencode, quote, unquote
# Non-stdlib imports
import pkg_resources
@@ -38,6 +38,7 @@
from forgehg import version
from .widgets import HgRevisionWidget
from .reactors import reactors
+from .controllers import BranchBrowser, CommitBrowser
log = logging.getLogger(__name__)
@@ -152,13 +153,16 @@
def _check_security(self):
require(has_artifact_access('read'))
+ def __init__(self):
+ self.ref = Refs()
+ self.ci = Commits()
+
@expose('forgehg.templates.index')
- def index(self, offset=0, branch=None, tag=None):
+ def index(self, offset=0, limit=10, branch=None, tag=None):
offset=int(offset)
repo = c.app.repo
if repo and repo.status == 'ready':
- revisions = repo.log(branch=branch, tag=tag)
- revisions = islice(revisions, offset, offset+10)
+ revisions = repo.log(branch=branch, tag=tag, offset=offset, limit=limit)
args = dict(offset=offset+10)
if branch: args['branch'] = branch
if tag: args['tag'] = tag
@@ -167,6 +171,9 @@
revisions = []
next_link=None
c.revision_widget=W.revision_widget
+ revisions = [ dict(value=r) for r in revisions ]
+ for r in revisions:
+ r.update(r['value'].context())
return dict(repo=c.app.repo,
branch=branch,
tag=tag,
@@ -197,19 +204,23 @@
to_project.install_app('Hg', to_name, cloned_from=from_repo._id)
redirect('/'+to_project_name+'/'+to_name+'/')
+class Refs(object):
+
@expose()
- def _lookup(self, hash, *remainder):
- return CommitController(hash), remainder
-
-class CommitController(object):
-
- def __init__(self, hash):
- self._hash = hash
-
- @expose('forgehg.templates.commit')
- def index(self):
- commit = c.app.repo[self._hash]
- c.revision_widget=W.revision_widget
- return dict(commit=commit)
+ def _lookup(self, *parts):
+ parts = map(unquote, parts)
+ ref = []
+ while parts:
+ part = parts.pop(0)
+ ref.append(part)
+ if part.endswith(':'): break
+ ref = '/'.join(ref)[:-1]
+ return BranchBrowser(ref), parts
+
+class Commits(object):
+
+ @expose()
+ def _lookup(self, ci, *remainder):
+ return CommitBrowser(ci), remainder
h.mixin_reactors(ForgeHgApp, reactors)