From: david-sarah Date: Thu, 28 Jan 2010 22:08:00 +0000 (-0800) Subject: Show -IMM and -RO suffixes for types of immutable and read-only unknown nodes in... X-Git-Tag: trac-4200~2 X-Git-Url: https://git.rkrishnan.org/architecture.txt?a=commitdiff_plain;h=4560e021a9f9d3113134a917fe9bd747c24be576;p=tahoe-lafs%2Ftahoe-lafs.git Show -IMM and -RO suffixes for types of immutable and read-only unknown nodes in directory listings --- diff --git a/src/allmydata/test/test_web.py b/src/allmydata/test/test_web.py index 2f7437a2..6b363c57 100644 --- a/src/allmydata/test/test_web.py +++ b/src/allmydata/test/test_web.py @@ -3256,13 +3256,16 @@ class Grid(GridTestMixin, WebErrorMixin, unittest.TestCase, ShouldFailMixin): # make sure directory listing tolerates unknown nodes d.addCallback(lambda ign: self.GET(self.rooturl)) - def _check_directory_html(res): - self.failUnlessIn("%s" % (str(name),), res) + def _check_directory_html(res, expected_type_suffix): + pattern = re.compile(r'\?%s[ \t\n\r]*' + '%s' % (expected_type_suffix, str(name)), + re.DOTALL) + self.failUnless(re.search(pattern, res), res) # find the More Info link for name, should be relative mo = re.search(r'More Info', res) info_url = mo.group(1) self.failUnlessEqual(info_url, "%s?t=info" % (str(name),)) - d.addCallback(_check_directory_html) + d.addCallback(_check_directory_html, "-IMM" if immutable else "") d.addCallback(lambda ign: self.GET(self.rooturl+"?t=json")) def _check_directory_json(res, expect_rw_uri): @@ -3320,7 +3323,7 @@ class Grid(GridTestMixin, WebErrorMixin, unittest.TestCase, ShouldFailMixin): # rendered too. This version will not have future_write_uri, whether # or not future_node was immutable. d.addCallback(lambda ign: self.GET(self.rourl)) - d.addCallback(_check_directory_html) + d.addCallback(_check_directory_html, "-IMM" if immutable else "-RO") d.addCallback(lambda ign: self.GET(self.rourl+"?t=json")) d.addCallback(_check_directory_json, expect_rw_uri=False) diff --git a/src/allmydata/web/directory.py b/src/allmydata/web/directory.py index c6a38ffd..f046c7fc 100644 --- a/src/allmydata/web/directory.py +++ b/src/allmydata/web/directory.py @@ -13,7 +13,7 @@ from nevow.inevow import IRequest from foolscap.api import fireEventually from allmydata.util import base32, time_format -from allmydata.uri import from_string_dirnode +from allmydata.uri import from_string_dirnode, ALLEGED_IMMUTABLE_PREFIX from allmydata.interfaces import IDirectoryNode, IFileNode, IFilesystemNode, \ IImmutableFileNode, IMutableFileNode, ExistingChildError, \ NoSuchChildError, EmptyPathnameComponentError @@ -737,7 +737,13 @@ class DirectoryAsHTML(rend.Page): else: # unknown ctx.fillSlots("filename", html.escape(name)) - ctx.fillSlots("type", "?") + if target.get_write_uri() is not None: + unknowntype = "?" + elif not self.node.is_mutable() or target.get_readonly_uri().startswith(ALLEGED_IMMUTABLE_PREFIX): + unknowntype = "?-IMM" + else: + unknowntype = "?-RO" + ctx.fillSlots("type", unknowntype) ctx.fillSlots("size", "-") # use a directory-relative info link, so we can extract both the # writecap and the readcap