Add Node.FS.{Dir,File}.Entry() methods.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sun, 4 May 2003 15:22:16 +0000 (15:22 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sun, 4 May 2003 15:22:16 +0000 (15:22 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@670 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/Node/FS.py
src/engine/SCons/Node/FSTests.py

index 0c239390d411e1292d6f182d6e28db77bb2e8183..227ef59a8375b5386a0efa19dfa470723cb39098 100644 (file)
@@ -72,6 +72,8 @@ RELEASE 0.14 - XXX
     to {Target,Source}Signatures().  Deprecate the old names but support
     them for backwards compatibility.
 
+  - Add internal SCons.Node.FS.{Dir,File}.Entry() methods.
+
   From Damyan Pepper:
 
   - Quote the "Entering directory" message like Make.
index a2d9414434f8b4732ad3202fcff81f2bf6604da4..0a016ad16ceca867a8718bbe99b7daeba0717c81 100644 (file)
@@ -833,15 +833,19 @@ class Dir(Entry):
     def __resetDuplicate(self, node):
         if node != self:
             node.duplicate = node.get_dir().duplicate
-        
+
+    def Entry(self, name):
+        """Create an entry node named 'name' relative to this directory."""
+        return self.fs.Entry(name, self)
+
     def Dir(self, name):
         """Create a directory node named 'name' relative to this directory."""
         return self.fs.Dir(name, self)
 
     def File(self, name):
-        """Create  file node named 'name' relatove to this directory."""
+        """Create a file node named 'name' relative to this directory."""
         return self.fs.File(name, self)
-                
+
     def link(self, srcdir, duplicate):
         """Set this directory as the build directory for the
         supplied source directory."""
@@ -976,6 +980,10 @@ class File(Entry):
         Entry.__init__(self, name, directory, fs)
         self._morph()
 
+    def Entry(self, name):
+        """Create an entry node named 'name' relative to
+        the SConscript directory of this file."""
+        return self.fs.Entry(name, self.cwd)
 
     def Dir(self, name):
         """Create a directory node named 'name' relative to
index b9328968c177441db6d5efda4a8224d857fdd96d..f2d8dd9ee58951a436c99fe74124cd09d04432ab 100644 (file)
@@ -509,50 +509,76 @@ class FSTestCase(unittest.TestCase):
 
         fs = SCons.Node.FS.FS()
 
+        e1 = fs.Entry('e1')
+        assert isinstance(e1, SCons.Node.FS.Entry)
+
         d1 = fs.Dir('d1')
+        assert isinstance(d1, SCons.Node.FS.Dir)
         assert d1.cwd is d1, d1
 
         f1 = fs.File('f1', directory = d1)
+        assert isinstance(f1, SCons.Node.FS.File)
 
         d1_f1 = os.path.join('d1', 'f1')
         assert f1.path == d1_f1, "f1.path %s != %s" % (f1.path, d1_f1)
         assert str(f1) == d1_f1, "str(f1) %s != %s" % (str(f1), d1_f1)
 
         x1 = d1.File('x1')
+        assert isinstance(x1, SCons.Node.FS.File)
         assert str(x1) == os.path.join('d1', 'x1')
 
         x2 = d1.Dir('x2')
+        assert isinstance(x2, SCons.Node.FS.Dir)
         assert str(x2) == os.path.join('d1', 'x2')
 
+        x3 = d1.Entry('x3')
+        assert isinstance(x3, SCons.Node.FS.Entry)
+        assert str(x3) == os.path.join('d1', 'x3')
+
         assert d1.File(x1) == x1
         assert d1.Dir(x2) == x2
+        assert d1.Entry(x3) == x3
 
         x1.cwd = d1
 
-        x3 = x1.File('x3')
-        assert str(x3) == os.path.join('d1', 'x3')
-
-        x4 = x1.Dir('x4')
+        x4 = x1.File('x4')
         assert str(x4) == os.path.join('d1', 'x4')
 
-        assert x1.File(x3) == x3
-        assert x1.Dir(x4) == x4
+        x5 = x1.Dir('x5')
+        assert str(x5) == os.path.join('d1', 'x5')
 
+        x6 = x1.Entry('x6')
+        assert str(x6) == os.path.join('d1', 'x6')
+        x7 = x1.Entry('x7')
+        assert str(x7) == os.path.join('d1', 'x7')
+
+        assert x1.File(x4) == x4
+        assert x1.Dir(x5) == x5
+        assert x1.Entry(x6) == x6
+        assert x1.Entry(x7) == x7
+
+        assert x1.Entry(x5) == x5
         try:
-            x1.File(x4)
+            x1.File(x5)
         except TypeError:
             pass
         else:
             assert 0
 
+        assert x1.Entry(x4) == x4
         try:
-            x1.Dir(x3)
+            x1.Dir(x4)
         except TypeError:
             pass
         else:
             assert 0
 
-        
+        x6 = x1.File(x6)
+        assert isinstance(x6, SCons.Node.FS.File)
+
+        x7 = x1.Dir(x7)
+        assert isinstance(x7, SCons.Node.FS.Dir)
+
         seps = [os.sep]
         if os.sep != '/':
             seps = seps + ['/']