#
#
# patch "templates/branch.html"
# from [e37668c02c96b419b0985a799550677b90737ae5]
# to [5a004d85304a8fd67730ad84d9e7bdea0e5bfb38]
#
# patch "templates/branchchanges.html"
# from [bab70162c2dd25a6eb276b7dc09933527b4131fd]
# to [802a6ef3b009623630d03aceb3f7dde6b406a056]
#
# patch "viewmtn.py"
# from [a2ea5c28701ff9a4d9f2ff0e9023640dc667fc8a]
# to [f795413ad19745dfaa9b80661c08e17bc179fa0b]
#
============================================================
--- templates/branch.html e37668c02c96b419b0985a799550677b90737ae5
+++ templates/branch.html 5a004d85304a8fd67730ad84d9e7bdea0e5bfb38
@@ -1,7 +1,7 @@
#extends base
#def extramenu
Branch $branch.name:
-Changes |
-Head revision
+Changes |
+Head revision
#end def
============================================================
--- templates/branchchanges.html bab70162c2dd25a6eb276b7dc09933527b4131fd
+++ templates/branchchanges.html 802a6ef3b009623630d03aceb3f7dde6b406a056
@@ -1,9 +1,9 @@
#extends branch
#def body
-Displaying topologically sorted log of changes (estimated as being changes 1 - 10)
+Changes $from_change to $to_change on this branch are displayed below, sorted in descending chronological order.
@@ -35,7 +35,36 @@ Displaying topologically sorted log of c
$when |
#end for
+
+
+
+
+#if $next_from and $next_to
+#filter Filter
+$link($branch, from_change=$next_from, to_change=$next_to).html("earlier changes")
+#filter WebSafe
+#else
+(no earlier changes)
+#end if
+ |
+
+
+#filter Filter
+$link($branch).html("recent changes")
+#filter WebSafe
+ |
+
+
+#if $previous_from and $previous_to
+#filter Filter
+$link($branch, from_change=$previous_from, to_change=$previous_to).html("later changes")
+#filter WebSafe
+#else
+(no later changes)
+#end if
+ |
+
#end def
============================================================
--- viewmtn.py a2ea5c28701ff9a4d9f2ff0e9023640dc667fc8a
+++ viewmtn.py f795413ad19745dfaa9b80661c08e17bc179fa0b
@@ -40,7 +40,7 @@ class Link:
static_join = lambda path: urlparse.urljoin(config.static_uri_path, path)
class Link:
- def __init__(self, description=None, link_type=None):
+ def __init__(self, description=None, link_type=None, **kwargs):
self.relative_uri = None
self.description = description
def html(self, override_description=None):
@@ -71,7 +71,11 @@ class BranchLink(Link):
class BranchLink(Link):
def __init__(self, branch, **kwargs):
Link.__init__(*(self, ), **kwargs)
- self.relative_uri = 'branch/changes/' + urllib.quote(branch.name)
+ from_change, to_change = kwargs.get('from_change'), kwargs.get('to_change')
+ if from_change and to_change:
+ self.relative_uri = 'branch/changes/%s/from/%d/to/%d' % (urllib.quote(branch.name), from_change, to_change)
+ else:
+ self.relative_uri = 'branch/changes/' + urllib.quote(branch.name)
self.description = hq(branch.name)
class DiffLink(Link):
@@ -179,11 +183,11 @@ type_to_link_class = {
'tag' : TagLink,
}
-def link(obj, link_type=None):
+def link(obj, link_type=None, **kwargs):
link_class = type_to_link_class.get(obj.obj_type)
if not link_class:
raise LinkException("Unable to link to objects of type: '%s'" % (obj.obj_type))
- return link_class(obj, link_type=link_type)
+ return link_class(obj, **kwargs)
class Renderer:
def __init__(self):
@@ -243,14 +247,12 @@ class BranchChanges:
renderer.render('help.html', page_title="Help")
class BranchChanges:
- def get_last_changes(self, branch, start_at, count):
- if len(start_at) == 0:
- revs = map(None, ops.heads(branch.name))
- else:
- revs = start_at
+ def get_last_changes(self, branch, from_change, to_change):
+ revs = map(None, ops.heads(branch.name))
if len(revs) == 0:
- raise Exception("get_last_changes() unable to find somewhere to start!")
+ raise Exception("get_last_changes() unable to find somewhere to start - probably a non-existent branch?")
to_parent = revs+[] # copy
+ count = to_change
while len(revs) < count:
new_to_parent = []
for rev in to_parent:
@@ -271,9 +273,9 @@ class BranchChanges:
return common.parse_timecert(cert[7])
return None
certs_for_revs.sort(lambda b, a: cmp(cd(a[1]), cd(b[1])))
- return certs_for_revs[:count], new_to_parent
+ return certs_for_revs[from_change:to_change], new_to_parent
- def GET(self, branch, start_at=[], old_start_at=[]):
+ def GET(self, branch, from_change, to_change):
def quicklog(changelog):
rv = changelog[0].strip()
if rv.startswith('*'):
@@ -314,10 +316,37 @@ class BranchChanges:
rv.append((revision, diffs, ago, author, '\n'.join(changelog), shortlog, when))
return rv
branch = mtn.Branch(branch)
- changed, new_starting_point = self.get_last_changes(branch, start_at, 10)
+ per_page = 10
+ if from_change:
+ from_change = int(from_change)
+ else:
+ from_change = 0
+ if to_change:
+ to_change = int(to_change)
+ else:
+ to_change = per_page
+ changed, new_starting_point = self.get_last_changes(branch, from_change, to_change)
+ # next and previous 'from' and 'to' indexes
+ if len(changed) == to_change - from_change:
+ next_from, next_to = to_change, to_change + per_page
+ else:
+ next_from, next_to = None, None
+ if from_change > 0:
+ previous_from = from_change - per_page
+ if previous_from < 0: previous_from = 0
+ previous_to = previous_from + per_page
+ else:
+ previous_from, previous_to = None, None
+
renderer.render('branchchanges.html',
page_title="Branch %s" % branch.name,
branch=branch,
+ from_change=from_change,
+ to_change=to_change,
+ previous_from=previous_from,
+ previous_to=previous_to,
+ next_from=next_from,
+ next_to=next_to,
display_revs=for_template(changed))
class RevisionInfo:
@@ -389,23 +418,25 @@ urls = (
branch_re = r''
urls = (
- '/', 'Index', #done
- '/about', 'About', #done
- '/tags', 'Tags', #done
- '/help', 'Help', #done
- '/json/(A-Za-z)/(.*)', 'Json',
+ r'/', 'Index', #done
+ r'/about', 'About', #done
+ r'/tags', 'Tags', #done
+ r'/help', 'Help', #done
+ r'/json/(A-Za-z)/(.*)', 'Json',
- '/revision/browse/('+mtn.revision_re+')/(.*)', 'RevisionBrowse',
- '/revision/diff/('+mtn.revision_re+')/with/('+mtn.revision_re+')', 'RevisionDiff',
- '/revision/diff/('+mtn.revision_re+')/with/('+mtn.revision_re+')'+'/(.*)', 'RevisionDiff',
- '/revision/file/('+mtn.revision_re+')/(.*)', 'RevisionFile',
- '/revision/info/('+mtn.revision_re+')', 'RevisionInfo',
- '/revision/tar/('+mtn.revision_re+')', 'RevisionTar',
+ r'/revision/browse/('+mtn.revision_re+')/(.*)', 'RevisionBrowse',
+ r'/revision/diff/('+mtn.revision_re+')/with/('+mtn.revision_re+')', 'RevisionDiff',
+ r'/revision/diff/('+mtn.revision_re+')/with/('+mtn.revision_re+')'+'/(.*)', 'RevisionDiff',
+ r'/revision/file/('+mtn.revision_re+')/(.*)', 'RevisionFile',
+ r'/revision/info/('+mtn.revision_re+')', 'RevisionInfo',
+ r'/revision/tar/('+mtn.revision_re+')', 'RevisionTar',
- '/branch/changes/(.*)()()', 'BranchChanges',
- '/branch/head/(.*)', 'BranchHead',
- '/branch/tar/(.*)', 'BranchTar',
- '/static/(.*)', 'Static'
+ r'/branch/changes/(.*)/from/(\d+)/to/(\d+)', 'BranchChanges',
+ r'/branch/changes/([^/]+)()()', 'BranchChanges',
+ r'/branch/head/([^/]+)', 'BranchHead',
+ r'/branch/tar/([^/]+)', 'BranchTar',
+
+ r'/static/(.*)', 'Static'
)
if __name__ == '__main__':