From e28bb83697900ef0b92e7b437676d2505bcf8c88 Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Sun, 22 Mar 2020 14:55:10 +0100 Subject: [PATCH 1/2] Allow creating app in existing empty dir MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I tried `yarn create redwood-app .` in an empty directory where I wanted the files generated, and got an error saying the dir already exists. I think it should be OK to use an existing directory if it's empty 🙂 I have also moved the error out of the Listr task itself, because it seems Listr is not actually stopping execution of the following tasks. At least, it continues outputting the next tasks' titles, which is confusing: I'd say an early exit for this particular error is acceptable? --- .../create-redwood-app/src/create-redwood-app.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/create-redwood-app/src/create-redwood-app.js b/packages/create-redwood-app/src/create-redwood-app.js index c17c027bc896..bbf8e594c407 100644 --- a/packages/create-redwood-app/src/create-redwood-app.js +++ b/packages/create-redwood-app/src/create-redwood-app.js @@ -57,6 +57,11 @@ if (!targetDir) { } const newAppDir = path.resolve(process.cwd(), targetDir) +const appDirExists = fs.existsSync(newAppDir) + +if (appDirExists && fs.readdirSync(newAppDir).length > 0) { + throw new Error(`'${newAppDir}' already exists and is not empty.`) +} const createProjectTasks = ({ newAppDir }) => { const tmpDownloadPath = tmp.tmpNameSync({ @@ -66,11 +71,8 @@ const createProjectTasks = ({ newAppDir }) => { return [ { - title: `Creating directory '${newAppDir}'`, + title: `${appDirExists ? 'Using' : 'Creating'} directory '${newAppDir}'`, task: () => { - if (fs.existsSync(newAppDir)) { - throw new Error(`'${newAppDir}' already exists.`) - } fs.mkdirSync(newAppDir, { recursive: true }) }, }, @@ -159,7 +161,7 @@ new Listr( .then(() => { // TODO: show helpful out for next steps. console.log() - console.log(`Thanks for trying out Redwood! We've created '${newAppDir}'`) + console.log(`Thanks for trying out Redwood! We've created your app in '${newAppDir}'`) console.log() console.log( 'Inside that directory you can run `yarn rw dev` to start the development server.' From 63397621ffd4343b38ad601816046ae65bd35ee4 Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Mon, 23 Mar 2020 10:39:01 +0100 Subject: [PATCH 2/2] Avoid uncaught exception --- packages/create-redwood-app/src/create-redwood-app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/create-redwood-app/src/create-redwood-app.js b/packages/create-redwood-app/src/create-redwood-app.js index bbf8e594c407..fdd109413fbc 100644 --- a/packages/create-redwood-app/src/create-redwood-app.js +++ b/packages/create-redwood-app/src/create-redwood-app.js @@ -60,7 +60,8 @@ const newAppDir = path.resolve(process.cwd(), targetDir) const appDirExists = fs.existsSync(newAppDir) if (appDirExists && fs.readdirSync(newAppDir).length > 0) { - throw new Error(`'${newAppDir}' already exists and is not empty.`) + console.error(`'${newAppDir}' already exists and is not empty.`) + process.exit(1) } const createProjectTasks = ({ newAppDir }) => {