From 3de5db0c78af819d6834336a5dfe1ec137adaf1f Mon Sep 17 00:00:00 2001 From: Doug Bunting Date: Thu, 5 Feb 2015 07:52:17 -0800 Subject: [PATCH] Provide `deep-clean` target to remove folders `git clean` cannot - use `rimraf` instead of noisier, slower `robocopy-delete` - _rimraf.shade is modeled after bower.shade --- build/_k-standard-goals.shade | 16 +++++++++++++--- build/_rimraf.shade | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 build/_rimraf.shade diff --git a/build/_k-standard-goals.shade b/build/_k-standard-goals.shade index 9ab4d2ffdd..7d4e5bd72f 100644 --- a/build/_k-standard-goals.shade +++ b/build/_k-standard-goals.shade @@ -42,10 +42,20 @@ default Configuration='${E("Configuration")}' var gruntDirs = '${GetDirectoriesContaining(Directory.GetCurrentDirectory(), "gruntfile.js")}' grunt each='var gruntDir in gruntDirs' -#clean-npm-modules if='!IsMono' +#clean-bin-folder + rimraf rimrafDir='bin' if='Directory.Exists("bin")' + +#clean-npm-modules -// Find all dirs that contain a package.json file - var npmDirs = '${GetDirectoriesContaining(Directory.GetCurrentDirectory(), "package.json").Select(d => Path.Combine(d, "node_modules"))}' - robocopy-delete dir='${npmDir}' each='var npmDir in npmDirs' + var npmDirs = '${ + GetDirectoriesContaining(Directory.GetCurrentDirectory(), "package.json") + .Select(directory => Path.Combine(directory, "node_modules")) + .Where(directory => Directory.Exists(directory)) + }' + rimraf each='var rimrafDir in npmDirs' + +-// Target order is important because clean-npm-modules may (re)create bin folder. +#deep-clean .clean-npm-modules .clean-bin-folder description='Clean folders that may cause problems for `git clean`.' #repo-initialize target='initialize' k-restore diff --git a/build/_rimraf.shade b/build/_rimraf.shade new file mode 100644 index 0000000000..1ef7d86b47 --- /dev/null +++ b/build/_rimraf.shade @@ -0,0 +1,16 @@ +default currentDir = '${Directory.GetCurrentDirectory()}' +default workingDir = '${ currentDir }' +default nodeDir = '${Path.Combine(currentDir, "bin", "nodejs")}' +default rimrafLibrary = '${ Path.Combine(nodeDir, "node_modules", "rimraf", "bin.js") }' +var rimrafInstalled = '${ File.Exists(Path.Combine(rimrafLibrary)) }' + +default rimrafGloballyInstalled = '${ !rimrafInstalled && TestCommand("rimraf", "::") }' +var rimrafCmd = '${ rimrafGloballyInstalled ? "rimraf" : rimrafLibrary }' + +- // Install rimraf locally if not already installed either globally or locally; creates rimrafLibrary file if run +npm npmCommand='install ${E("npm_install_options")} --prefix ${nodeDir} rimraf' if='!(rimrafGloballyInstalled || rimrafInstalled)' once='installRimraf' + +- // Run rimraf +exec program='cmd' commandline='/C ${rimrafCmd} ${rimrafDir}' workingdir='${workingDir}' if='rimrafGloballyInstalled && !IsLinux' +exec program='${rimrafCmd}' commandline='${rimrafDir}' workingdir='${workingDir}' if='rimrafGloballyInstalled && IsLinux' +node nodeCommand='${rimrafCmd} ${rimrafDir}' workingdir='${workingDir}' if='!rimrafGloballyInstalled' \ No newline at end of file