From ed0ce1650bb4b6a8562aba8e1d40bece9e1def36 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Thu, 1 Sep 2016 16:32:00 -0700 Subject: [PATCH] fix recursive directory creation --- tests/webTestServer.ts | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/tests/webTestServer.ts b/tests/webTestServer.ts index 4d2cb7d4672..9f4612f828e 100644 --- a/tests/webTestServer.ts +++ b/tests/webTestServer.ts @@ -94,20 +94,24 @@ function deleteFolderRecursive(dirPath: string) { } }; -function writeFile(path: string, data: any, opts: { recursive: boolean }) { +function writeFile(p: string, data: any, opts: { recursive: boolean }) { try { - fs.writeFileSync(path, data); + fs.writeFileSync(p, data); } catch (e) { - // assume file was written to a directory that exists, if not, start recursively creating them as necessary - const parts = switchToForwardSlashes(path).split("/"); - for (let i = 0; i < parts.length; i++) { - const subDir = parts.slice(0, i).join("/"); - if (!fs.existsSync(subDir)) { - fs.mkdir(subDir); - } - } - fs.writeFileSync(path, data); + mkdir(path.dirname(p)); + fs.writeFileSync(p, data); + } +} + +function mkdir(p: string) { + const basePath = path.dirname(p); + let shouldCreateParent = p !== basePath && !fs.existsSync(basePath); + if (shouldCreateParent) { + mkdir(basePath); + } + if (shouldCreateParent || !fs.existsSync(p)) { + fs.mkdirSync(p); } }