From 5fa34ddba17d89deccb616eb03503e10b9468b75 Mon Sep 17 00:00:00 2001
From: Dinuka De Silva <dinukadesilva@users.noreply.github.com>
Date: Sun, 18 Dec 2016 23:21:05 +0530
Subject: [PATCH] gh-1269: Enabling nested folder paths for project name
 (#1270)

* gh-1269: Enabling nested folder paths for project name

* gh-1269: Added "fs-extra" and removed "path-exists"

* gh-1269: Added e2e test cases to verify nested folder names
---
 packages/create-react-app/index.js     |  9 +++------
 packages/create-react-app/package.json |  2 +-
 tasks/e2e.sh                           | 26 ++++++++++++++++++++++++++
 3 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/packages/create-react-app/index.js b/packages/create-react-app/index.js
index 7c9394ea3..ab356d4d7 100644
--- a/packages/create-react-app/index.js
+++ b/packages/create-react-app/index.js
@@ -52,12 +52,11 @@ if (currentNodeVersion.split('.')[0] < 4) {
   process.exit(1);
 }
 
-var fs = require('fs');
+var fs = require('fs-extra');
 var path = require('path');
 var execSync = require('child_process').execSync;
 var spawn = require('cross-spawn');
 var semver = require('semver');
-var pathExists = require('path-exists');
 
 var projectName;
 
@@ -103,10 +102,8 @@ function createApp(name, verbose, version) {
   var appName = path.basename(root);
 
   checkAppName(appName);
-
-  if (!pathExists.sync(name)) {
-    fs.mkdirSync(root);
-  } else if (!isSafeToCreateProjectIn(root)) {
+  fs.ensureDirSync(name);
+  if (!isSafeToCreateProjectIn(root)) {
     console.log('The directory ' + chalk.green(name) + ' contains files that could conflict.');
     console.log('Try using a new directory name.');
     process.exit(1);
diff --git a/packages/create-react-app/package.json b/packages/create-react-app/package.json
index 1c466c7f8..94525c3e8 100644
--- a/packages/create-react-app/package.json
+++ b/packages/create-react-app/package.json
@@ -23,7 +23,7 @@
     "chalk": "^1.1.1",
     "commander": "^2.9.0",
     "cross-spawn": "^4.0.0",
-    "path-exists": "^2.1.0",
+    "fs-extra": "^1.0.0",
     "semver": "^5.0.3"
   }
 }
diff --git a/tasks/e2e.sh b/tasks/e2e.sh
index 5a2ecdf31..27cd0ae45 100755
--- a/tasks/e2e.sh
+++ b/tasks/e2e.sh
@@ -230,5 +230,31 @@ cd test-app-fork
 # Check corresponding scripts version is installed.
 test -e node_modules/react-scripts-fork
 
+# ******************************************************************************
+# Test nested folder path as the project name
+# ******************************************************************************
+
+#Testing a path that exists
+cd $temp_app_path
+mkdir test-app-nested-paths-t1
+cd test-app-nested-paths-t1
+mkdir -p test-app-nested-paths-t1/aa/bb/cc/dd
+create_react_app test-app-nested-paths-t1/aa/bb/cc/dd
+cd test-app-nested-paths-t1/aa/bb/cc/dd
+npm start -- --smoke-test
+
+#Testing a path that does not exist
+cd $temp_app_path
+create_react_app test-app-nested-paths-t2/aa/bb/cc/dd
+cd test-app-nested-paths-t2/aa/bb/cc/dd
+npm start -- --smoke-test
+
+#Testing a path that is half exists
+cd $temp_app_path
+mkdir -p test-app-nested-paths-t3/aa
+create_react_app test-app-nested-paths-t3/aa/bb/cc/dd
+cd test-app-nested-paths-t3/aa/bb/cc/dd
+npm start -- --smoke-test
+
 # Cleanup
 cleanup
-- 
GitLab