Don't throw a 'Tried to lookup a File as a Dir' exception if there's a same-named...
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 1 Mar 2005 02:01:53 +0000 (02:01 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 1 Mar 2005 02:01:53 +0000 (02:01 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1237 fdb21ef1-2011-0410-befe-b5e4ea1792b1

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

index e7b283dfafc3802e68e8d9c237a20d0af82769f0..e42166fcf4263464c55d49bcfc13df50313c992e 100644 (file)
@@ -1888,7 +1888,14 @@ def find_file(filename, paths, node_factory=default_fs.File, verbose=None):
 
     for pathdir in paths:
         verbose("looking for '%s' in '%s' ...\n" % (filename, pathdir))
-        dir = lookup_dir(pathdir)
+
+        try: dir = lookup_dir(pathdir)
+        except TypeError: dir = None
+        if not dir:
+            # We tried to look up a directory, but it seems there's
+            # already a file node (or something else) there.  No big.
+            continue
+
         def func(node):
             if isinstance(node, SCons.Node.FS.File) and \
                (node.is_derived() or node.is_pseudo_derived() or node.exists()):
index f123bb9d6c49dac716ff603fe8a952e2acb3e900..f841d32afff59d4110c6a74614b10714ee96c32a 100644 (file)
@@ -1432,23 +1432,34 @@ class find_fileTestCase(unittest.TestCase):
         test.subdir('bar')
         test.write(['bar', 'on_disk'], 'Another file\n')
         test.write(['bar', 'same'], 'bar/same\n')
+
         fs = SCons.Node.FS.FS(test.workpath(""))
-        os.chdir(test.workpath("")) # FS doesn't like the cwd to be something other than it's root
+        # FS doesn't like the cwd to be something other than its root.
+        os.chdir(test.workpath(""))
+
         node_derived = fs.File(test.workpath('bar/baz'))
         node_derived.builder_set(1) # Any non-zero value.
         node_pseudo = fs.File(test.workpath('pseudo'))
         node_pseudo.set_src_builder(1) # Any non-zero value.
+
         paths = map(fs.Dir, ['.', 'same', './bar'])
         nodes = [SCons.Node.FS.find_file('foo', paths, fs.File)]
         nodes.append(SCons.Node.FS.find_file('baz', paths, fs.File))
         nodes.append(SCons.Node.FS.find_file('pseudo', paths, fs.File))
-        nodes.append(SCons.Node.FS.find_file('same', paths, fs.File, verbose=1))
+        nodes.append(SCons.Node.FS.find_file('same', paths, fs.File))
+
         file_names = map(str, nodes)
         file_names = map(os.path.normpath, file_names)
         expect = ['./foo', './bar/baz', './pseudo', './bar/same']
         expect = map(os.path.normpath, expect)
         assert file_names == expect, file_names
 
+        # Make sure we don't blow up if there's already a File in place
+        # of a directory that we'd otherwise try to search.  If this
+        # is broken, we'll see an exception like "Tried to lookup File
+        # 'bar/baz' as a Dir.
+        SCons.Node.FS.find_file('baz/no_file_here', paths, fs.File)
+
         import StringIO
         save_sys_stdout = sys.stdout