From: Rusty Russell Date: Sat, 7 Aug 2010 03:11:24 +0000 (+0930) Subject: web: handle symlinks in bzrbrowse.cgi, fix images. X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=bb4b8b6b32f34faf27b1c8e2b380f2df84810693;hp=b7cb6af18150e37c12a19e0fa5f4d8efdeae81ce web: handle symlinks in bzrbrowse.cgi, fix images. --- diff --git a/Makefile-web b/Makefile-web index 1fb0cb20..b1bf415f 100644 --- a/Makefile-web +++ b/Makefile-web @@ -10,7 +10,7 @@ WEB_SUBDIRS=$(WEBDIR)/tarballs $(WEBDIR)/junkcode $(WEBDIR)/tarballs/with-deps $ JUNKDIRS=$(wildcard junkcode/*) JUNKPAGES=$(JUNKDIRS:%=$(WEBDIR)/%.html) JUNKBALLS=$(JUNKDIRS:%=$(WEBDIR)/%.tar.bz2) -BZRBROWSE=$(WEBDIR)/bzrbrowse.cgi $(WEBDIR)/file.png $(WEBDIR)/folder.png +BZRBROWSE=$(WEBDIR)/bzrbrowse.cgi $(WEBDIR)/file.png $(WEBDIR)/folder.png $(WEBDIR)/symlink.png upload: fastcheck webpages bzr push diff --git a/web/bzrbrowse/bzrbrowse.cgi b/web/bzrbrowse/bzrbrowse.cgi index 3be2f216..2e3bf3c8 100755 --- a/web/bzrbrowse/bzrbrowse.cgi +++ b/web/bzrbrowse/bzrbrowse.cgi @@ -21,16 +21,16 @@ config = { 'root': '/home/ccan/ccan', 'base_url': '/browse', - 'images_url': '/browse', + 'images_url': '', 'branch_url': 'http://ccan.ozlabs.org/repo', } -import os, sys +import os, sys, string from bzrlib.branch import Branch from bzrlib.errors import NotBranchError from bzrlib import urlutils, osutils -__version__ = '0.0.1' +__version__ = '0.0.1-rusty' class HTTPError(Exception): @@ -55,6 +55,7 @@ class BzrBrowse(object): icons = { 'file': 'file.png', 'directory': 'folder.png', + 'symlink': 'symlink.png', } page_tmpl = ''' @@ -147,12 +148,24 @@ code { background-color: #000; color: #FFF; font-size: 90%%;} linenumbers + '
' + escape_html(text) +
                 '
') + # Symlinks in ccan contain .., and bzr refuses to serve that. Simplify. + def squish(self, linkname): + result = [] + for elem in string.split(linkname, os.sep): + if elem == '..': + result = result[:-1] + else: + result.append(elem) + return string.join(result, os.sep) + def list_branch_directory(self, branch, path, relpath): tree = branch.basis_tree() file_id = tree.path2id(relpath) ie = tree.inventory[file_id] if ie.kind == 'file': return self.view_branch_file(tree, ie) + if ie.kind == 'symlink': + return self.list_branch_directory(branch, path, self.squish(osutils.dirname(relpath) + os.sep + ie.symlink_target)) entries = [] if path: entries.append({ diff --git a/web/bzrbrowse/symlink.png b/web/bzrbrowse/symlink.png new file mode 100644 index 00000000..da3fa786 Binary files /dev/null and b/web/bzrbrowse/symlink.png differ