# # # patch "mtn.py" # from [adaa57e3b99c5ca134f9dbab2e8f42ec48e3ef0a] # to [e1715034ac1d310176d056eb90305a4c1c4b592f] # # patch "viewmtn.py" # from [f1159d02c5375dbe85c16b9b1ae9e99eac615dc7] # to [ca57a6ddaff6efdd97228152e797eb8796c5f8fb] # ============================================================ --- mtn.py adaa57e3b99c5ca134f9dbab2e8f42ec48e3ef0a +++ mtn.py e1715034ac1d310176d056eb90305a4c1c4b592f @@ -16,6 +16,8 @@ def group_compile(r): def group_compile(r): return re.compile('('+r+')') +hex_re = r'[A-Fa-f0-9]*' +hex_re_c = group_compile(hex_re) revision_re = r'[A-Fa-f0-9]{40}' revision_re_c = group_compile(revision_re) name_re = r'^[\S]+' @@ -26,10 +28,11 @@ class Revision(str): class Revision(str): def __init__(self, v): + # special case that must be handled: empty (initial) revisino ID '' str.__init__(v) self.obj_type = "revision" - if not revision_re_c.match(self): - raise MonotoneException("Not a valid revision ID") + if v != '' and not revision_re_c.match(self): + raise MonotoneException("Not a valid revision ID: %s" % (v)) def abbrev(self): return '[' + self[:8] + '..]' @@ -201,7 +204,7 @@ def basic_io_from_stream(gen): # new value of line (eg. with consumed tokens removed) def hex_consume(line): - m = revision_re_c.match(line[1:]) + m = hex_re_c.match(line[1:]) if line[0] != '[' or not m: raise MonotoneException("This is not a hex token: %s" % line) end_of_match = m.end(m.lastindex) ============================================================ --- viewmtn.py f1159d02c5375dbe85c16b9b1ae9e99eac615dc7 +++ viewmtn.py ca57a6ddaff6efdd97228152e797eb8796c5f8fb @@ -76,7 +76,8 @@ class FileLink(Link): class FileLink(Link): def __init__(self, file, **kwargs): Link.__init__(*(self, ), **kwargs) - self.relative_uri = 'revision/file/' + file.in_revision + '/' + urllib.quote("goat") + self.relative_uri = 'revision/file/' + file.in_revision + '/' + urllib.quote(file.name) + self.description = hq(file.name) class Diff: def __init__(self, from_rev, to_rev, fname=None): @@ -135,14 +136,20 @@ def revisions_for_template(revision, rev if not from_id: continue diff_links = ','.join([link(Diff(old_revision, revision, fname)).html() for old_revision in old_revisions]) - value = "Patch file %s (%s)" % (hq(fname), diff_links) + value = "Patch file %s (%s)" % (link(mtn.File(fname, revision)).html(), diff_links) elif stanza_type == "old_revision": old_revision = mtn.Revision(stanza[1]) old_revisions.append(old_revision) value = "Old revision is: %s (%s)" % (old_revision.abbrev(), link(Diff(old_revision, revision)).html()) elif stanza_type == "add_file": - fname = stanza - value = "Add file: %s" % (link(mtn.File(fname, revision))) + fname = stanza[1] + value = "Add file: %s" % (link(mtn.File(fname, revision)).html()) + elif stanza_type == "add_dir": + dname = stanza[1] + value = "Add directory: %s" % (hq(dname)) + elif stanza_type == "set": + fname, attr, value = stanza[1], stanza[3], stanza[5] + value = "Set attribute '%s' to '%s' upon %s" % (hq(attr), hq(value), link(mtn.File(fname, revision)).html()) else: value = "(this stanza type is not explicitly rendered; please report this.)\n%s" % hq(str(stanza))