]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
Show -IMM and -RO suffixes for types of immutable and read-only unknown nodes in...
authordavid-sarah <david-sarah@jacaranda.org>
Thu, 28 Jan 2010 22:08:00 +0000 (14:08 -0800)
committerdavid-sarah <david-sarah@jacaranda.org>
Thu, 28 Jan 2010 22:08:00 +0000 (14:08 -0800)
src/allmydata/test/test_web.py
src/allmydata/web/directory.py

index 2f7437a2066a7681e09197608e09be3653f3fb37..6b363c5747d11d4bb892571aa07550b04bef7b2a 100644 (file)
@@ -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("<td>%s</td>" % (str(name),), res)
+        def _check_directory_html(res, expected_type_suffix):
+            pattern = re.compile(r'<td>\?%s</td>[ \t\n\r]*'
+                                  '<td>%s</td>' % (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'<a href="([^"]+)">More Info</a>', 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)
 
index c6a38ffd55374c63252a27d12eaed06cdc2a9ed7..f046c7fc7d646f8e2163335802e8192df55f966d 100644 (file)
@@ -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