diff --git a/hpath-directory/CHANGELOG.md b/hpath-directory/CHANGELOG.md index 839b5bc..8ddb7b7 100644 --- a/hpath-directory/CHANGELOG.md +++ b/hpath-directory/CHANGELOG.md @@ -1,5 +1,9 @@ # Revision history for hpath-directory +## 0.13.2 -- 2020-02-17 + +* Fix bug in `createDirRecursive` with trailing path separators + ## 0.13.1 -- 2020-01-29 * Split some functionality out into 'hpath-posix' diff --git a/hpath-directory/hpath-directory.cabal b/hpath-directory/hpath-directory.cabal index f74c1ba..c399222 100644 --- a/hpath-directory/hpath-directory.cabal +++ b/hpath-directory/hpath-directory.cabal @@ -1,7 +1,7 @@ cabal-version: >=1.10 name: hpath-directory -version: 0.13.1 +version: 0.13.2 synopsis: Alternative to 'directory' package with ByteString based filepaths description: This provides a safer alternative to the 'directory' package. FilePaths are ByteString based, so this diff --git a/hpath-directory/src/System/Posix/RawFilePath/Directory.hs b/hpath-directory/src/System/Posix/RawFilePath/Directory.hs index d533774..152cdcc 100644 --- a/hpath-directory/src/System/Posix/RawFilePath/Directory.hs +++ b/hpath-directory/src/System/Posix/RawFilePath/Directory.hs @@ -742,8 +742,8 @@ createDirRecursive fm p = go p | en == eEXIST -> unlessM (doesDirectoryExist dest) (ioError e) | en == eNOENT - -> createDirRecursive fm (takeDirectory dest) - >> createDirectory dest fm + -> go (takeDirectory $ dropTrailingPathSeparator dest) + >> createDir fm dest | otherwise -> ioError e diff --git a/hpath-directory/test/System/Posix/RawFilePath/Directory/CreateDirRecursiveSpec.hs b/hpath-directory/test/System/Posix/RawFilePath/Directory/CreateDirRecursiveSpec.hs index ec5eaf1..60d6aa9 100644 --- a/hpath-directory/test/System/Posix/RawFilePath/Directory/CreateDirRecursiveSpec.hs +++ b/hpath-directory/test/System/Posix/RawFilePath/Directory/CreateDirRecursiveSpec.hs @@ -49,6 +49,11 @@ spec = beforeAll_ (upTmpDir >> setupFiles) $ afterAll_ cleanupFiles $ createDirRecursive' "newDir" deleteDir' "newDir" + it "createDirRecursive with trailing path separator, all fine" $ do + createDirRecursive' "newDir/foo/" + deleteDir' "newDir/foo" + deleteDir' "newDir" + it "createDirRecursive, parent directories do not exist" $ do createDirRecursive' "some/thing/dada" deleteDir' "some/thing/dada"