From: stevenknight Date: Tue, 1 Mar 2005 02:01:53 +0000 (+0000) Subject: Don't throw a 'Tried to lookup a File as a Dir' exception if there's a same-named... X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=a8e25cf68209c78c9c98e5248af5eecec6c8aa8d;p=scons.git Don't throw a 'Tried to lookup a File as a Dir' exception if there's a same-named file as a directory we might try to search for an included file. git-svn-id: http://scons.tigris.org/svn/scons/trunk@1237 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py index e7b283df..e42166fc 100644 --- a/src/engine/SCons/Node/FS.py +++ b/src/engine/SCons/Node/FS.py @@ -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()): diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py index f123bb9d..f841d32a 100644 --- a/src/engine/SCons/Node/FSTests.py +++ b/src/engine/SCons/Node/FSTests.py @@ -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