Corrected incomplete fix for makedirs with symlink
- fixed #220
diff --git a/fake_filesystem_test.py b/fake_filesystem_test.py
index bcda591..4322922 100755
--- a/fake_filesystem_test.py
+++ b/fake_filesystem_test.py
@@ -1557,6 +1557,16 @@
self.os.symlink(link_target, link_path)
self.assertRaisesOSError(errno.ELOOP, self.os.makedirs, link_path)
+ def testMakedirsIfParentIsSymlink(self):
+ self.filesystem.is_windows_fs = False
+ base_dir = "/foo/bar"
+ self.filesystem.CreateDirectory(base_dir)
+ link_dir = base_dir + "/linked"
+ self.os.symlink(base_dir, link_dir)
+ new_dir = link_dir + '/f'
+ self.os.makedirs(new_dir)
+ self.assertTrue(self.filesystem.Exists(new_dir))
+
def testMakedirsRaisesIfAccessDenied(self):
"""makedirs raises exception if access denied."""
directory = '/a'
diff --git a/pyfakefs/fake_filesystem.py b/pyfakefs/fake_filesystem.py
index 506c318..ddf775b 100644
--- a/pyfakefs/fake_filesystem.py
+++ b/pyfakefs/fake_filesystem.py
@@ -1920,9 +1920,9 @@
current_dir.AddEntry(new_dir)
current_dir = new_dir
else:
- current_dir = directory
if directory.st_mode & stat.S_IFLNK == stat.S_IFLNK:
- current_dir = self.ResolveObject(directory.contents)
+ directory = self.ResolveObject(directory.contents)
+ current_dir = directory
if directory.st_mode & stat.S_IFDIR != stat.S_IFDIR:
raise OSError(errno.ENOTDIR, 'Not a directory', current_dir.GetPath())
@@ -2275,7 +2275,7 @@
current_dir = self.root
for component in path_components:
if (component not in current_dir.contents
- or not isinstance(current_dir.contents, list)):
+ or not isinstance(current_dir.contents, dict)):
break
else:
current_dir = current_dir.contents[component]