aboutsummaryrefslogtreecommitdiff
path: root/node_modules/shelljs
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/shelljs')
-rw-r--r--node_modules/shelljs/CHANGELOG.md97
-rw-r--r--node_modules/shelljs/README.md6
-rw-r--r--node_modules/shelljs/README.md~817
-rw-r--r--node_modules/shelljs/package.json2
-rw-r--r--node_modules/shelljs/shell.js6
-rw-r--r--node_modules/shelljs/src/cat.js2
-rw-r--r--node_modules/shelljs/src/common.js28
-rw-r--r--node_modules/shelljs/src/cp.js43
-rw-r--r--node_modules/shelljs/src/find.js2
-rw-r--r--node_modules/shelljs/src/head.js23
-rw-r--r--node_modules/shelljs/src/ln.js2
-rw-r--r--node_modules/shelljs/src/mkdir.js10
-rw-r--r--node_modules/shelljs/src/mv.js20
-rw-r--r--node_modules/shelljs/src/rm.js88
-rw-r--r--node_modules/shelljs/src/sort.js13
-rw-r--r--node_modules/shelljs/src/tail.js13
-rw-r--r--node_modules/shelljs/src/uniq.js13
-rw-r--r--node_modules/shelljs/src/which.js5
18 files changed, 308 insertions, 882 deletions
diff --git a/node_modules/shelljs/CHANGELOG.md b/node_modules/shelljs/CHANGELOG.md
index e66d72cf9..5e0355bf6 100644
--- a/node_modules/shelljs/CHANGELOG.md
+++ b/node_modules/shelljs/CHANGELOG.md
@@ -1,5 +1,98 @@
# Change Log
+## [Unreleased](https://github.com/shelljs/shelljs/tree/HEAD)
+
+[Full Changelog](https://github.com/shelljs/shelljs/compare/v0.7.7...HEAD)
+
+**Closed issues:**
+
+- Add node v8 to CI [\#729](https://github.com/shelljs/shelljs/issues/729)
+- Exec not working in Electron ! [\#726](https://github.com/shelljs/shelljs/issues/726)
+- is rechoir used anywhere? [\#723](https://github.com/shelljs/shelljs/issues/723)
+- ShellJS: internal error on shelljs.mkdir\('myFile/myDir'\) [\#720](https://github.com/shelljs/shelljs/issues/720)
+- Can't make sed perform global replace [\#719](https://github.com/shelljs/shelljs/issues/719)
+- grep: option not recognized: l [\#717](https://github.com/shelljs/shelljs/issues/717)
+- Problems getting code, stdout, stderr [\#715](https://github.com/shelljs/shelljs/issues/715)
+- Copying hidden files fails on Windows 10 [\#711](https://github.com/shelljs/shelljs/issues/711)
+- How am I suppose to handle errors with ShellJS? [\#707](https://github.com/shelljs/shelljs/issues/707)
+- use cp\('-r', './src', './dist'\) bug [\#705](https://github.com/shelljs/shelljs/issues/705)
+- Way to ignore files in globs. [\#699](https://github.com/shelljs/shelljs/issues/699)
+- Buffer constructor is deprecated [\#694](https://github.com/shelljs/shelljs/issues/694)
+- source command not working via exec method. [\#693](https://github.com/shelljs/shelljs/issues/693)
+- Would you be interested in a PR for `open`? [\#692](https://github.com/shelljs/shelljs/issues/692)
+- Get rid of common.platform in favor of process.platform [\#670](https://github.com/shelljs/shelljs/issues/670)
+- Passing empty string to cp throws internal error [\#664](https://github.com/shelljs/shelljs/issues/664)
+- Why does sed split files into an array, call replace on each line and rejoin? [\#645](https://github.com/shelljs/shelljs/issues/645)
+- feat: cp & mv should not overwrite recently created files [\#631](https://github.com/shelljs/shelljs/issues/631)
+- Echo tests unnecessarily run tests in own process [\#622](https://github.com/shelljs/shelljs/issues/622)
+- rm -rf on a symbolic link to a dir deletes its contents [\#587](https://github.com/shelljs/shelljs/issues/587)
+- "Cannot extract package" with node-webkit [\#181](https://github.com/shelljs/shelljs/issues/181)
+- EBADF, bad file descriptor [\#180](https://github.com/shelljs/shelljs/issues/180)
+
+**Merged pull requests:**
+
+- Add node 8 to CI [\#730](https://github.com/shelljs/shelljs/pull/730) ([freitagbr](https://github.com/freitagbr))
+- Deprecate common.getUserHome, advise using os.homedir instead [\#725](https://github.com/shelljs/shelljs/pull/725) ([freitagbr](https://github.com/freitagbr))
+- fix\(mkdir\): improve error handling around files [\#721](https://github.com/shelljs/shelljs/pull/721) ([nfischer](https://github.com/nfischer))
+- Properly handle directories as arguments [\#713](https://github.com/shelljs/shelljs/pull/713) ([nfischer](https://github.com/nfischer))
+- Add common.buffer [\#710](https://github.com/shelljs/shelljs/pull/710) ([freitagbr](https://github.com/freitagbr))
+- Fix common.expand error [\#709](https://github.com/shelljs/shelljs/pull/709) ([freitagbr](https://github.com/freitagbr))
+- Echo test mocks [\#708](https://github.com/shelljs/shelljs/pull/708) ([freitagbr](https://github.com/freitagbr))
+- refactor: remove unnecessary common.js imports [\#703](https://github.com/shelljs/shelljs/pull/703) ([nfischer](https://github.com/nfischer))
+- Fix \#631 throw error when overwriting recently created file [\#702](https://github.com/shelljs/shelljs/pull/702) ([uttpal](https://github.com/uttpal))
+- Small clarification of verbose flag [\#691](https://github.com/shelljs/shelljs/pull/691) ([zommerfelds](https://github.com/zommerfelds))
+- fix\(grep, sed, sort, uniq\): Split only on newline characters [\#690](https://github.com/shelljs/shelljs/pull/690) ([freitagbr](https://github.com/freitagbr))
+- Refactor: Use process.platform across codebase [\#689](https://github.com/shelljs/shelljs/pull/689) ([freitagbr](https://github.com/freitagbr))
+- Remove contents of symlink to dir with rm -rf [\#688](https://github.com/shelljs/shelljs/pull/688) ([freitagbr](https://github.com/freitagbr))
+- Echo stdout [\#677](https://github.com/shelljs/shelljs/pull/677) ([nfischer](https://github.com/nfischer))
+
+## [v0.7.7](https://github.com/shelljs/shelljs/tree/v0.7.7) (2017-03-09)
+[Full Changelog](https://github.com/shelljs/shelljs/compare/v0.7.6...v0.7.7)
+
+**Closed issues:**
+
+- Error output should be consistent across all platforms. [\#681](https://github.com/shelljs/shelljs/issues/681)
+- \*CRITICAL data loss\* shell.cp\(\) Content of file is erased when trying to copy it to the folder it already belongs to [\#678](https://github.com/shelljs/shelljs/issues/678)
+- Use with webpack broken in 0.7.6 [\#667](https://github.com/shelljs/shelljs/issues/667)
+- Difference between bash ls -R and ShellJS ls -R with symlinks [\#666](https://github.com/shelljs/shelljs/issues/666)
+- Refactor which\(\) \(too many repeated code blocks\) [\#656](https://github.com/shelljs/shelljs/issues/656)
+- find\(\) raises error when unable to find any files matching, expected to return empty array. [\#653](https://github.com/shelljs/shelljs/issues/653)
+- Drop support for v0.12 [\#647](https://github.com/shelljs/shelljs/issues/647)
+- Reformat the markdown in RELEASE.md [\#642](https://github.com/shelljs/shelljs/issues/642)
+- rm -rf doesn't work if the directory contains an asar archive in Electron [\#618](https://github.com/shelljs/shelljs/issues/618)
+- Add support for other file types in rm [\#617](https://github.com/shelljs/shelljs/issues/617)
+- Feature request: ls -L option [\#563](https://github.com/shelljs/shelljs/issues/563)
+- How to send SIGINT signal to child process launched with exec [\#518](https://github.com/shelljs/shelljs/issues/518)
+- exec doesnt seem to be working [\#480](https://github.com/shelljs/shelljs/issues/480)
+- feature request: option to add node\_modules to the path for shelljs scripts [\#469](https://github.com/shelljs/shelljs/issues/469)
+- high cpu usage during synchronous exec [\#167](https://github.com/shelljs/shelljs/issues/167)
+
+**Merged pull requests:**
+
+- Add support for removing fifos [\#687](https://github.com/shelljs/shelljs/pull/687) ([freitagbr](https://github.com/freitagbr))
+- chore: add codecov script to appveyor CI [\#686](https://github.com/shelljs/shelljs/pull/686) ([nfischer](https://github.com/nfischer))
+- Refactor tests to improve readability [\#685](https://github.com/shelljs/shelljs/pull/685) ([nfischer](https://github.com/nfischer))
+- fix: convert error output to be consistent cross-platform [\#684](https://github.com/shelljs/shelljs/pull/684) ([nfischer](https://github.com/nfischer))
+- chore: add codecov [\#682](https://github.com/shelljs/shelljs/pull/682) ([nfischer](https://github.com/nfischer))
+- Fix cp overwriting identical files [\#679](https://github.com/shelljs/shelljs/pull/679) ([freitagbr](https://github.com/freitagbr))
+- Modified glob pattern. Fixes \#666 [\#676](https://github.com/shelljs/shelljs/pull/676) ([frandiox](https://github.com/frandiox))
+- refactor\(parseOptions\): better handle errors [\#674](https://github.com/shelljs/shelljs/pull/674) ([nfischer](https://github.com/nfischer))
+- test: add misc. tests to improve coverage [\#673](https://github.com/shelljs/shelljs/pull/673) ([nfischer](https://github.com/nfischer))
+- test: don't count hard-to-test lines for coverage [\#672](https://github.com/shelljs/shelljs/pull/672) ([nfischer](https://github.com/nfischer))
+- fix: switch commands.json -\> commands.js [\#668](https://github.com/shelljs/shelljs/pull/668) ([nfischer](https://github.com/nfischer))
+- ls -L \(follow symlinks\) [\#665](https://github.com/shelljs/shelljs/pull/665) ([frandiox](https://github.com/frandiox))
+- docs\(chmod\): document `options` argument [\#663](https://github.com/shelljs/shelljs/pull/663) ([gkalpak](https://github.com/gkalpak))
+- docs: clean up RELEASE.md [\#662](https://github.com/shelljs/shelljs/pull/662) ([nfischer](https://github.com/nfischer))
+- docs: miscellaneous README changes [\#661](https://github.com/shelljs/shelljs/pull/661) ([nfischer](https://github.com/nfischer))
+- Fix typo in README [\#660](https://github.com/shelljs/shelljs/pull/660) ([faheel](https://github.com/faheel))
+- refactor: reduce repeated code in which\(\) [\#659](https://github.com/shelljs/shelljs/pull/659) ([nfischer](https://github.com/nfischer))
+- feature: add -a option for which command [\#655](https://github.com/shelljs/shelljs/pull/655) ([termosa](https://github.com/termosa))
+- Fix find ENOENT [\#654](https://github.com/shelljs/shelljs/pull/654) ([freitagbr](https://github.com/freitagbr))
+- Safely exit by throwing an error [\#649](https://github.com/shelljs/shelljs/pull/649) ([freitagbr](https://github.com/freitagbr))
+- Chore drop 0.12 [\#648](https://github.com/shelljs/shelljs/pull/648) ([nfischer](https://github.com/nfischer))
+- chore\(lint\): Enforce a trailing comma for multi-line [\#646](https://github.com/shelljs/shelljs/pull/646) ([nfischer](https://github.com/nfischer))
+- docs\(release\): use bulleted list [\#643](https://github.com/shelljs/shelljs/pull/643) ([freitagbr](https://github.com/freitagbr))
+
## [v0.7.6](https://github.com/shelljs/shelljs/tree/v0.7.6) (2017-01-08)
[Full Changelog](https://github.com/shelljs/shelljs/compare/v0.7.5...v0.7.6)
@@ -553,8 +646,8 @@
**Merged pull requests:**
-- Addition of a toEnd\(\) function modeled after the Unix \>\> pipe. [\#78](https://github.com/shelljs/shelljs/pull/78) ([andreweduffy](https://github.com/andreweduffy))
-- Added appendTo\(\) function to imitate '\>\>' redirect-and-append pipe. [\#75](https://github.com/shelljs/shelljs/pull/75) ([andreweduffy](https://github.com/andreweduffy))
+- Addition of a toEnd\(\) function modeled after the Unix \>\> pipe. [\#78](https://github.com/shelljs/shelljs/pull/78) ([a10y](https://github.com/a10y))
+- Added appendTo\(\) function to imitate '\>\>' redirect-and-append pipe. [\#75](https://github.com/shelljs/shelljs/pull/75) ([a10y](https://github.com/a10y))
- Fix a small typo in README.md [\#71](https://github.com/shelljs/shelljs/pull/71) ([asmblah](https://github.com/asmblah))
- adding an `.npmignore` file [\#70](https://github.com/shelljs/shelljs/pull/70) ([stephenmathieson](https://github.com/stephenmathieson))
- tempdir: use `os.tmpDir` when possible [\#67](https://github.com/shelljs/shelljs/pull/67) ([stephenmathieson](https://github.com/stephenmathieson))
diff --git a/node_modules/shelljs/README.md b/node_modules/shelljs/README.md
index 91f110ff4..1f3e6ec0f 100644
--- a/node_modules/shelljs/README.md
+++ b/node_modules/shelljs/README.md
@@ -732,14 +732,16 @@ Example:
```javascript
config.verbose = true; // or set('-v');
cd('dir/');
-ls('subdir/');
+rm('-rf', 'foo.txt', 'bar.txt');
+exec('echo hello');
```
Will print each command as follows:
```
cd dir/
-ls subdir/
+rm -rf foo.txt bar.txt
+exec echo hello
```
### config.globOptions
diff --git a/node_modules/shelljs/README.md~ b/node_modules/shelljs/README.md~
deleted file mode 100644
index cf5a0dd77..000000000
--- a/node_modules/shelljs/README.md~
+++ /dev/null
@@ -1,817 +0,0 @@
-# ShellJS - Unix shell commands for Node.js
-
-[![Gitter](https://img.shields.io/gitter/room/nwjs/nw.js.svg?style=flat-square)](https://gitter.im/shelljs/shelljs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[![Travis](https://img.shields.io/travis/shelljs/shelljs/master.svg?style=flat-square&label=unix)](https://travis-ci.org/shelljs/shelljs)
-[![AppVeyor](https://img.shields.io/appveyor/ci/shelljs/shelljs/master.svg?style=flat-square&label=windows)](https://ci.appveyor.com/project/shelljs/shelljs/branch/master)
-[![npm version](https://img.shields.io/npm/v/shelljs.svg?style=flat-square)](https://www.npmjs.com/package/shelljs)
-[![npm downloads](https://img.shields.io/npm/dm/shelljs.svg?style=flat-square)](https://www.npmjs.com/package/shelljs)
-
-ShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the
-Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping
-its familiar and powerful commands. You can also install it globally so you can run it from outside
-Node projects - say goodbye to those gnarly Bash scripts!
-
-ShellJS is proudly tested on every node release since `v0.11`!
-
-The project is [unit-tested](http://travis-ci.org/shelljs/shelljs) and battled-tested in projects like:
-
-+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader
-+ [Firebug](http://getfirebug.com/) - Firefox's infamous debugger
-+ [JSHint](http://jshint.com) - Most popular JavaScript linter
-+ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers
-+ [Yeoman](http://yeoman.io/) - Web application stack and development tool
-+ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation
-+ And [many more](https://npmjs.org/browse/depended/shelljs).
-
-If you have feedback, suggestions, or need help, feel free to post in our [issue tracker](https://github.com/shelljs/shelljs/issues).
-
-Think ShellJS is cool? Check out some related projects (like
-[cash](https://github.com/dthree/cash)--a javascript-based POSIX shell)
-in our [Wiki page](https://github.com/shelljs/shelljs/wiki)!
-
-Upgrading from an older version? Check out our [breaking
-changes](https://github.com/shelljs/shelljs/wiki/Breaking-Changes) page to see
-what changes to watch out for while upgrading.
-
-## Command line use
-
-If you just want cross platform UNIX commands, checkout our new project
-[shelljs/shx](https://github.com/shelljs/shx), a utility to expose `shelljs` to
-the command line.
-
-For example:
-
-```
-$ shx mkdir -p foo
-$ shx touch foo/bar.txt
-$ shx rm -rf foo
-```
-
-## A quick note about the docs
-
-For documentation on all the latest features, check out our
-[README](https://github.com/shelljs/shelljs). To read docs that are consistent
-with the latest release, check out [the npm
-page](https://www.npmjs.com/package/shelljs) or
-[shelljs.org](http://documentup.com/shelljs/shelljs).
-
-## Installing
-
-Via npm:
-
-```bash
-$ npm install [-g] shelljs
-```
-
-If the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to
-run ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder:
-
-```bash
-$ shjs my_script
-```
-
-## Examples
-
-### JavaScript
-
-```javascript
-require('shelljs/global');
-
-if (!which('git')) {
- echo('Sorry, this script requires git');
- exit(1);
-}
-
-// Copy files to release dir
-rm('-rf', 'out/Release');
-cp('-R', 'stuff/', 'out/Release');
-
-// Replace macros in each .js file
-cd('lib');
-ls('*.js').forEach(function(file) {
- sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
- sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file);
- sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file);
-});
-cd('..');
-
-// Run external tool synchronously
-if (exec('git commit -am "Auto-commit"').code !== 0) {
- echo('Error: Git commit failed');
- exit(1);
-}
-```
-
-### CoffeeScript
-
-CoffeeScript is also supported automatically:
-
-```coffeescript
-require 'shelljs/global'
-
-if not which 'git'
- echo 'Sorry, this script requires git'
- exit 1
-
-# Copy files to release dir
-rm '-rf', 'out/Release'
-cp '-R', 'stuff/', 'out/Release'
-
-# Replace macros in each .js file
-cd 'lib'
-for file in ls '*.js'
- sed '-i', 'BUILD_VERSION', 'v0.1.2', file
- sed '-i', /^.*REMOVE_THIS_LINE.*$/, '', file
- sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file
-cd '..'
-
-# Run external tool synchronously
-if (exec 'git commit -am "Auto-commit"').code != 0
- echo 'Error: Git commit failed'
- exit 1
-```
-
-## Global vs. Local
-
-The example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`.
-
-Example:
-
-```javascript
-var shell = require('shelljs');
-shell.echo('hello world');
-```
-
-<!-- DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED -->
-
-
-## Command reference
-
-
-All commands run synchronously, unless otherwise stated.
-All commands accept standard bash globbing characters (`*`, `?`, etc.),
-compatible with the [node glob module](https://github.com/isaacs/node-glob).
-
-For less-commonly used commands and features, please check out our [wiki
-page](https://github.com/shelljs/shelljs/wiki).
-
-
-### cat(file [, file ...])
-### cat(file_array)
-
-Examples:
-
-```javascript
-var str = cat('file*.txt');
-var str = cat('file1', 'file2');
-var str = cat(['file1', 'file2']); // same as above
-```
-
-Returns a string containing the given file, or a concatenated string
-containing the files if more than one file is given (a new line character is
-introduced between each file).
-
-
-### cd([dir])
-Changes to directory `dir` for the duration of the script. Changes to home
-directory if no argument is supplied.
-
-
-### chmod(octal_mode || octal_string, file)
-### chmod(symbolic_mode, file)
-
-Available options:
-
-+ `-v`: output a diagnostic for every file processed
-+ `-c`: like verbose but report only when a change is made
-+ `-R`: change files and directories recursively
-
-Examples:
-
-```javascript
-chmod(755, '/Users/brandon');
-chmod('755', '/Users/brandon'); // same as above
-chmod('u+x', '/Users/brandon');
-```
-
-Alters the permissions of a file or directory by either specifying the
-absolute permissions in octal form or expressing the changes in symbols.
-This command tries to mimic the POSIX behavior as much as possible.
-Notable exceptions:
-
-+ In symbolic modes, 'a-r' and '-r' are identical. No consideration is
- given to the umask.
-+ There is no "quiet" option since default behavior is to run silent.
-
-
-### cp([options,] source [, source ...], dest)
-### cp([options,] source_array, dest)
-Available options:
-
-+ `-f`: force (default behavior)
-+ `-n`: no-clobber
-+ `-u`: only copy if source is newer than dest
-+ `-r`, `-R`: recursive
-+ `-L`: follow symlinks
-+ `-P`: don't follow symlinks
-
-Examples:
-
-```javascript
-cp('file1', 'dir1');
-cp('-R', 'path/to/dir/', '~/newCopy/');
-cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
-cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
-```
-
-Copies files.
-
-
-### pushd([options,] [dir | '-N' | '+N'])
-
-Available options:
-
-+ `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
-
-Arguments:
-
-+ `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
-+ `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-+ `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-
-Examples:
-
-```javascript
-// process.cwd() === '/usr'
-pushd('/etc'); // Returns /etc /usr
-pushd('+1'); // Returns /usr /etc
-```
-
-Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
-
-### popd([options,] ['-N' | '+N'])
-
-Available options:
-
-+ `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
-
-Arguments:
-
-+ `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
-+ `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
-
-Examples:
-
-```javascript
-echo(process.cwd()); // '/usr'
-pushd('/etc'); // '/etc /usr'
-echo(process.cwd()); // '/etc'
-popd(); // '/usr'
-echo(process.cwd()); // '/usr'
-```
-
-When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
-
-### dirs([options | '+N' | '-N'])
-
-Available options:
-
-+ `-c`: Clears the directory stack by deleting all of the elements.
-
-Arguments:
-
-+ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
-+ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
-
-Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
-
-See also: pushd, popd
-
-
-### echo([options,] string [, string ...])
-Available options:
-
-+ `-e`: interpret backslash escapes (default)
-
-Examples:
-
-```javascript
-echo('hello world');
-var str = echo('hello world');
-```
-
-Prints string to stdout, and returns string with additional utility methods
-like `.to()`.
-
-
-### exec(command [, options] [, callback])
-Available options (all `false` by default):
-
-+ `async`: Asynchronous execution. If a callback is provided, it will be set to
- `true`, regardless of the passed value.
-+ `silent`: Do not echo program output to console.
-+ and any option available to NodeJS's
- [child_process.exec()](https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback)
-
-Examples:
-
-```javascript
-var version = exec('node --version', {silent:true}).stdout;
-
-var child = exec('some_long_running_process', {async:true});
-child.stdout.on('data', function(data) {
- /* ... do something with data ... */
-});
-
-exec('some_long_running_process', function(code, stdout, stderr) {
- console.log('Exit code:', code);
- console.log('Program output:', stdout);
- console.log('Program stderr:', stderr);
-});
-```
-
-Executes the given `command` _synchronously_, unless otherwise specified. When in synchronous
-mode, this returns a ShellString (compatible with ShellJS v0.6.x, which returns an object
-of the form `{ code:..., stdout:... , stderr:... }`). Otherwise, this returns the child process
-object, and the `callback` gets the arguments `(code, stdout, stderr)`.
-
-Not seeing the behavior you want? `exec()` runs everything through `sh`
-by default (or `cmd.exe` on Windows), which differs from `bash`. If you
-need bash-specific behavior, try out the `{shell: 'path/to/bash'}` option.
-
-**Note:** For long-lived processes, it's best to run `exec()` asynchronously as
-the current synchronous implementation uses a lot of CPU. This should be getting
-fixed soon.
-
-
-### find(path [, path ...])
-### find(path_array)
-Examples:
-
-```javascript
-find('src', 'lib');
-find(['src', 'lib']); // same as above
-find('.').filter(function(file) { return file.match(/\.js$/); });
-```
-
-Returns array of all files (however deep) in the given paths.
-
-The main difference from `ls('-R', path)` is that the resulting file names
-include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
-
-
-### grep([options,] regex_filter, file [, file ...])
-### grep([options,] regex_filter, file_array)
-Available options:
-
-+ `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
-+ `-l`: Print only filenames of matching files
-
-Examples:
-
-```javascript
-grep('-v', 'GLOBAL_VARIABLE', '*.js');
-grep('GLOBAL_VARIABLE', '*.js');
-```
-
-Reads input string from given files and returns a string containing all lines of the
-file that match the given `regex_filter`.
-
-
-### head([{'-n': \<num\>},] file [, file ...])
-### head([{'-n': \<num\>},] file_array)
-Available options:
-
-+ `-n <num>`: Show the first `<num>` lines of the files
-
-Examples:
-
-```javascript
-var str = head({'-n': 1}, 'file*.txt');
-var str = head('file1', 'file2');
-var str = head(['file1', 'file2']); // same as above
-```
-
-Read the start of a file.
-
-
-### ln([options,] source, dest)
-Available options:
-
-+ `-s`: symlink
-+ `-f`: force
-
-Examples:
-
-```javascript
-ln('file', 'newlink');
-ln('-sf', 'file', 'existing');
-```
-
-Links source to dest. Use -f to force the link, should dest already exist.
-
-
-### ls([options,] [path, ...])
-### ls([options,] path_array)
-Available options:
-
-+ `-R`: recursive
-+ `-A`: all files (include files beginning with `.`, except for `.` and `..`)
-+ `-d`: list directories themselves, not their contents
-+ `-l`: list objects representing each file, each with fields containing `ls
- -l` output fields. See
- [fs.Stats](https://nodejs.org/api/fs.html#fs_class_fs_stats)
- for more info
-
-Examples:
-
-```javascript
-ls('projs/*.js');
-ls('-R', '/users/me', '/tmp');
-ls('-R', ['/users/me', '/tmp']); // same as above
-ls('-l', 'file.txt'); // { name: 'file.txt', mode: 33188, nlink: 1, ...}
-```
-
-Returns array of files in the given path, or in current directory if no path provided.
-
-
-### mkdir([options,] dir [, dir ...])
-### mkdir([options,] dir_array)
-Available options:
-
-+ `-p`: full path (will create intermediate dirs if necessary)
-
-Examples:
-
-```javascript
-mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
-mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
-```
-
-Creates directories.
-
-
-### mv([options ,] source [, source ...], dest')
-### mv([options ,] source_array, dest')
-Available options:
-
-+ `-f`: force (default behavior)
-+ `-n`: no-clobber
-
-Examples:
-
-```javascript
-mv('-n', 'file', 'dir/');
-mv('file1', 'file2', 'dir/');
-mv(['file1', 'file2'], 'dir/'); // same as above
-```
-
-Moves files.
-
-
-### pwd()
-Returns the current directory.
-
-
-### rm([options,] file [, file ...])
-### rm([options,] file_array)
-Available options:
-
-+ `-f`: force
-+ `-r, -R`: recursive
-
-Examples:
-
-```javascript
-rm('-rf', '/tmp/*');
-rm('some_file.txt', 'another_file.txt');
-rm(['some_file.txt', 'another_file.txt']); // same as above
-```
-
-Removes files.
-
-
-### sed([options,] search_regex, replacement, file [, file ...])
-### sed([options,] search_regex, replacement, file_array)
-Available options:
-
-+ `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
-
-Examples:
-
-```javascript
-sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
-sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
-```
-
-Reads an input string from `files` and performs a JavaScript `replace()` on the input
-using the given search regex and replacement string or function. Returns the new string after replacement.
-
-Note:
-
-Like unix `sed`, ShellJS `sed` supports capture groups. Capture groups are specified
-using the `$n` syntax:
-
-```javascript
-sed(/(\w+)\s(\w+)/, '$2, $1', 'file.txt');
-```
-
-
-### set(options)
-Available options:
-
-+ `+/-e`: exit upon error (`config.fatal`)
-+ `+/-v`: verbose: show all commands (`config.verbose`)
-+ `+/-f`: disable filename expansion (globbing)
-
-Examples:
-
-```javascript
-set('-e'); // exit upon first error
-set('+e'); // this undoes a "set('-e')"
-```
-
-Sets global configuration variables
-
-
-### sort([options,] file [, file ...])
-### sort([options,] file_array)
-Available options:
-
-+ `-r`: Reverse the result of comparisons
-+ `-n`: Compare according to numerical value
-
-Examples:
-
-```javascript
-sort('foo.txt', 'bar.txt');
-sort('-r', 'foo.txt');
-```
-
-Return the contents of the files, sorted line-by-line. Sorting multiple
-files mixes their content, just like unix sort does.
-
-
-### tail([{'-n': \<num\>},] file [, file ...])
-### tail([{'-n': \<num\>},] file_array)
-Available options:
-
-+ `-n <num>`: Show the last `<num>` lines of the files
-
-Examples:
-
-```javascript
-var str = tail({'-n': 1}, 'file*.txt');
-var str = tail('file1', 'file2');
-var str = tail(['file1', 'file2']); // same as above
-```
-
-Read the end of a file.
-
-
-### tempdir()
-
-Examples:
-
-```javascript
-var tmp = tempdir(); // "/tmp" for most *nix platforms
-```
-
-Searches and returns string containing a writeable, platform-dependent temporary directory.
-Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
-
-
-### test(expression)
-Available expression primaries:
-
-+ `'-b', 'path'`: true if path is a block device
-+ `'-c', 'path'`: true if path is a character device
-+ `'-d', 'path'`: true if path is a directory
-+ `'-e', 'path'`: true if path exists
-+ `'-f', 'path'`: true if path is a regular file
-+ `'-L', 'path'`: true if path is a symbolic link
-+ `'-p', 'path'`: true if path is a pipe (FIFO)
-+ `'-S', 'path'`: true if path is a socket
-
-Examples:
-
-```javascript
-if (test('-d', path)) { /* do something with dir */ };
-if (!test('-f', path)) continue; // skip if it's a regular file
-```
-
-Evaluates expression using the available primaries and returns corresponding value.
-
-
-### ShellString.prototype.to(file)
-
-Examples:
-
-```javascript
-cat('input.txt').to('output.txt');
-```
-
-Analogous to the redirection operator `>` in Unix, but works with
-ShellStrings (such as those returned by `cat`, `grep`, etc). _Like Unix
-redirections, `to()` will overwrite any existing file!_
-
-
-### ShellString.prototype.toEnd(file)
-
-Examples:
-
-```javascript
-cat('input.txt').toEnd('output.txt');
-```
-
-Analogous to the redirect-and-append operator `>>` in Unix, but works with
-ShellStrings (such as those returned by `cat`, `grep`, etc).
-
-
-### touch([options,] file [, file ...])
-### touch([options,] file_array)
-Available options:
-
-+ `-a`: Change only the access time
-+ `-c`: Do not create any files
-+ `-m`: Change only the modification time
-+ `-d DATE`: Parse DATE and use it instead of current time
-+ `-r FILE`: Use FILE's times instead of current time
-
-Examples:
-
-```javascript
-touch('source.js');
-touch('-c', '/path/to/some/dir/source.js');
-touch({ '-r': FILE }, '/path/to/some/dir/source.js');
-```
-
-Update the access and modification times of each FILE to the current time.
-A FILE argument that does not exist is created empty, unless -c is supplied.
-This is a partial implementation of *[touch(1)](http://linux.die.net/man/1/touch)*.
-
-
-### uniq([options,] [input, [output]])
-Available options:
-
-+ `-i`: Ignore case while comparing
-+ `-c`: Prefix lines by the number of occurrences
-+ `-d`: Only print duplicate lines, one for each group of identical lines
-
-Examples:
-
-```javascript
-uniq('foo.txt');
-uniq('-i', 'foo.txt');
-uniq('-cd', 'foo.txt', 'bar.txt');
-```
-
-Filter adjacent matching lines from input
-
-
-### which(command)
-
-Examples:
-
-```javascript
-var nodeExec = which('node');
-```
-
-Searches for `command` in the system's PATH. On Windows, this uses the
-`PATHEXT` variable to append the extension if it's not already executable.
-Returns string containing the absolute path to the command.
-
-
-### exit(code)
-Exits the current process with the given exit code.
-
-### error()
-Tests if error occurred in the last command. Returns a truthy value if an
-error returned and a falsy value otherwise.
-
-**Note**: do not rely on the
-return value to be an error message. If you need the last error message, use
-the `.stderr` attribute from the last command's return value instead.
-
-
-### ShellString(str)
-
-Examples:
-
-```javascript
-var foo = ShellString('hello world');
-```
-
-Turns a regular string into a string-like object similar to what each
-command returns. This has special methods, like `.to()` and `.toEnd()`
-
-
-### env['VAR_NAME']
-Object containing environment variables (both getter and setter). Shortcut
-to process.env.
-
-### Pipes
-
-Examples:
-
-```javascript
-grep('foo', 'file1.txt', 'file2.txt').sed(/o/g, 'a').to('output.txt');
-echo('files with o\'s in the name:\n' + ls().grep('o'));
-cat('test.js').exec('node'); // pipe to exec() call
-```
-
-Commands can send their output to another command in a pipe-like fashion.
-`sed`, `grep`, `cat`, `exec`, `to`, and `toEnd` can appear on the right-hand
-side of a pipe. Pipes can be chained.
-
-## Configuration
-
-
-### config.silent
-
-Example:
-
-```javascript
-var sh = require('shelljs');
-var silentState = sh.config.silent; // save old silent state
-sh.config.silent = true;
-/* ... */
-sh.config.silent = silentState; // restore old silent state
-```
-
-Suppresses all command output if `true`, except for `echo()` calls.
-Default is `false`.
-
-### config.fatal
-
-Example:
-
-```javascript
-require('shelljs/global');
-config.fatal = true; // or set('-e');
-cp('this_file_does_not_exist', '/dev/null'); // throws Error here
-/* more commands... */
-```
-
-If `true` the script will throw a Javascript error when any shell.js
-command encounters an error. Default is `false`. This is analogous to
-Bash's `set -e`
-
-### config.verbose
-
-Example:
-
-```javascript
-config.verbose = true; // or set('-v');
-cd('dir/');
-ls('subdir/');
-```
-
-Will print each command as follows:
-
-```
-cd dir/
-ls subdir/
-```
-
-### config.globOptions
-
-Example:
-
-```javascript
-config.globOptions = {nodir: true};
-```
-
-Use this value for calls to `glob.sync()` instead of the default options.
-
-### config.reset()
-
-Example:
-
-```javascript
-var shell = require('shelljs');
-// Make changes to shell.config, and do stuff...
-/* ... */
-shell.config.reset(); // reset to original state
-// Do more stuff, but with original settings
-/* ... */
-```
-
-Reset shell.config to the defaults:
-
-```javascript
-{
- fatal: false,
- globOptions: {},
- maxdepth: 255,
- noglob: false,
- silent: false,
- verbose: false,
-}
-```
-
-## Team
-
-| [![Nate Fischer](https://avatars.githubusercontent.com/u/5801521?s=130)](https://github.com/nfischer) | [![Ari Porad](https://avatars1.githubusercontent.com/u/1817508?v=3&s=130)](http://github.com/ariporad) |
-|:---:|:---:|
-| [Nate Fischer](https://github.com/nfischer) | [Ari Porad](http://github.com/ariporad) |
diff --git a/node_modules/shelljs/package.json b/node_modules/shelljs/package.json
index fb1c75428..c93e33420 100644
--- a/node_modules/shelljs/package.json
+++ b/node_modules/shelljs/package.json
@@ -1,6 +1,6 @@
{
"name": "shelljs",
- "version": "0.7.7",
+ "version": "0.7.8",
"description": "Portable Unix shell commands for Node.js",
"keywords": [
"shelljs",
diff --git a/node_modules/shelljs/shell.js b/node_modules/shelljs/shell.js
index f155f3d3a..2541a2036 100644
--- a/node_modules/shelljs/shell.js
+++ b/node_modules/shelljs/shell.js
@@ -103,14 +103,16 @@ exports.config = common.config;
//@ ```javascript
//@ config.verbose = true; // or set('-v');
//@ cd('dir/');
-//@ ls('subdir/');
+//@ rm('-rf', 'foo.txt', 'bar.txt');
+//@ exec('echo hello');
//@ ```
//@
//@ Will print each command as follows:
//@
//@ ```
//@ cd dir/
-//@ ls subdir/
+//@ rm -rf foo.txt bar.txt
+//@ exec echo hello
//@ ```
//@
diff --git a/node_modules/shelljs/src/cat.js b/node_modules/shelljs/src/cat.js
index a74a25c84..af1ad1d4d 100644
--- a/node_modules/shelljs/src/cat.js
+++ b/node_modules/shelljs/src/cat.js
@@ -30,6 +30,8 @@ function _cat(options, files) {
files.forEach(function (file) {
if (!fs.existsSync(file)) {
common.error('no such file or directory: ' + file);
+ } else if (fs.statSync(file).isDirectory()) {
+ common.error(file + ': Is a directory');
}
cat += fs.readFileSync(file, 'utf8');
diff --git a/node_modules/shelljs/src/common.js b/node_modules/shelljs/src/common.js
index f5197d8ec..4a1f43456 100644
--- a/node_modules/shelljs/src/common.js
+++ b/node_modules/shelljs/src/common.js
@@ -38,6 +38,7 @@ var DEFAULT_CONFIG = {
silent: false,
verbose: false,
execPath: null,
+ bufLength: 64 * 1024, // 64KB
};
var config = {
@@ -66,9 +67,6 @@ exports.state = state;
delete process.env.OLDPWD; // initially, there's no previous directory
-var platform = os.type().match(/^Win/) ? 'win' : 'unix';
-exports.platform = platform;
-
// This is populated by calls to commonl.wrap()
var pipeMethods = [];
@@ -260,15 +258,33 @@ function expand(list) {
if (typeof listEl !== 'string') {
expanded.push(listEl);
} else {
- var ret = glob.sync(listEl, config.globOptions);
- // if glob fails, interpret the string literally
- expanded = expanded.concat(ret.length > 0 ? ret : [listEl]);
+ var ret;
+ try {
+ ret = glob.sync(listEl, config.globOptions);
+ // if nothing matched, interpret the string literally
+ ret = ret.length > 0 ? ret : [listEl];
+ } catch (e) {
+ // if glob fails, interpret the string literally
+ ret = [listEl];
+ }
+ expanded = expanded.concat(ret);
}
});
return expanded;
}
exports.expand = expand;
+// Normalizes Buffer creation, using Buffer.alloc if possible.
+// Also provides a good default buffer length for most use cases.
+var buffer = typeof Buffer.alloc === 'function' ?
+ function (len) {
+ return Buffer.alloc(len || config.bufLength);
+ } :
+ function (len) {
+ return new Buffer(len || config.bufLength);
+ };
+exports.buffer = buffer;
+
// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e.
// file can be unlinked even if it's read-only, see https://github.com/joyent/node/issues/3006
function unlinkSync(file) {
diff --git a/node_modules/shelljs/src/cp.js b/node_modules/shelljs/src/cp.js
index 04c4e57ef..99c97b2eb 100644
--- a/node_modules/shelljs/src/cp.js
+++ b/node_modules/shelljs/src/cp.js
@@ -1,7 +1,6 @@
var fs = require('fs');
var path = require('path');
var common = require('./common');
-var os = require('os');
common.register('cp', _cp, {
cmdOptions: {
@@ -24,6 +23,8 @@ function copyFileSync(srcFile, destFile, options) {
common.error('copyFileSync: no such file or directory: ' + srcFile);
}
+ var isWindows = process.platform === 'win32';
+
// Check the mtimes of the files if the '-u' flag is provided
try {
if (options.update && fs.statSync(srcFile).mtime < fs.statSync(destFile).mtime) {
@@ -42,11 +43,11 @@ function copyFileSync(srcFile, destFile, options) {
}
var symlinkFull = fs.readlinkSync(srcFile);
- fs.symlinkSync(symlinkFull, destFile, os.platform() === 'win32' ? 'junction' : null);
+ fs.symlinkSync(symlinkFull, destFile, isWindows ? 'junction' : null);
} else {
- var BUF_LENGTH = 64 * 1024;
- var buf = new Buffer(BUF_LENGTH);
- var bytesRead = BUF_LENGTH;
+ var buf = common.buffer();
+ var bufLength = buf.length;
+ var bytesRead = bufLength;
var pos = 0;
var fdr = null;
var fdw = null;
@@ -65,8 +66,8 @@ function copyFileSync(srcFile, destFile, options) {
common.error('copyFileSync: could not write to dest file (code=' + e.code + '):' + destFile);
}
- while (bytesRead === BUF_LENGTH) {
- bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos);
+ while (bytesRead === bufLength) {
+ bytesRead = fs.readSync(fdr, buf, 0, bufLength, pos);
fs.writeSync(fdw, buf, 0, bytesRead);
pos += bytesRead;
}
@@ -93,6 +94,8 @@ function cpdirSyncRecursive(sourceDir, destDir, currentDepth, opts) {
if (currentDepth >= common.config.maxdepth) return;
currentDepth++;
+ var isWindows = process.platform === 'win32';
+
// Create the directory where all our junk is moving to; read the mode of the
// source directory and mirror it
try {
@@ -116,7 +119,7 @@ function cpdirSyncRecursive(sourceDir, destDir, currentDepth, opts) {
// Cycle link found.
console.error('Cycle link found.');
symlinkFull = fs.readlinkSync(srcFile);
- fs.symlinkSync(symlinkFull, destFile, os.platform() === 'win32' ? 'junction' : null);
+ fs.symlinkSync(symlinkFull, destFile, isWindows ? 'junction' : null);
continue;
}
}
@@ -131,7 +134,7 @@ function cpdirSyncRecursive(sourceDir, destDir, currentDepth, opts) {
} catch (e) {
// it doesn't exist, so no work needs to be done
}
- fs.symlinkSync(symlinkFull, destFile, os.platform() === 'win32' ? 'junction' : null);
+ fs.symlinkSync(symlinkFull, destFile, isWindows ? 'junction' : null);
} else if (srcFileStat.isSymbolicLink() && opts.followsymlink) {
srcFileStat = fs.statSync(srcFile);
if (srcFileStat.isDirectory()) {
@@ -150,6 +153,14 @@ function cpdirSyncRecursive(sourceDir, destDir, currentDepth, opts) {
} // for files
} // cpdirSyncRecursive
+// Checks if cureent file was created recently
+function checkRecentCreated(sources, index) {
+ var lookedSource = sources[index];
+ return sources.slice(0, index).some(function (src) {
+ return path.basename(src) === path.basename(lookedSource);
+ });
+}
+
function cpcheckcycle(sourceDir, srcFile) {
var srcFileStat = fs.lstatSync(srcFile);
if (srcFileStat.isSymbolicLink()) {
@@ -224,8 +235,9 @@ function _cp(options, sources, dest) {
return new common.ShellString('', '', 0);
}
- sources.forEach(function (src) {
+ sources.forEach(function (src, srcIndex) {
if (!fs.existsSync(src)) {
+ if (src === '') src = "''"; // if src was empty string, display empty string
common.error('no such file or directory: ' + src, { continue: true });
return; // skip file
}
@@ -259,7 +271,16 @@ function _cp(options, sources, dest) {
thisDest = path.normalize(dest + '/' + path.basename(src));
}
- if (fs.existsSync(thisDest) && options.no_force) {
+ var thisDestExists = fs.existsSync(thisDest);
+ if (thisDestExists && checkRecentCreated(sources, srcIndex)) {
+ // cannot overwrite file created recently in current execution, but we want to continue copying other files
+ if (!options.no_force) {
+ common.error("will not overwrite just-created '" + thisDest + "' with '" + src + "'", { continue: true });
+ }
+ return;
+ }
+
+ if (thisDestExists && options.no_force) {
return; // skip file
}
diff --git a/node_modules/shelljs/src/find.js b/node_modules/shelljs/src/find.js
index 625aa2972..76a16c4ee 100644
--- a/node_modules/shelljs/src/find.js
+++ b/node_modules/shelljs/src/find.js
@@ -30,7 +30,7 @@ function _find(options, paths) {
var list = [];
function pushFile(file) {
- if (common.platform === 'win') {
+ if (process.platform === 'win32') {
file = file.replace(/\\/g, '/');
}
list.push(file);
diff --git a/node_modules/shelljs/src/head.js b/node_modules/shelljs/src/head.js
index 13d582977..e112e49e1 100644
--- a/node_modules/shelljs/src/head.js
+++ b/node_modules/shelljs/src/head.js
@@ -10,9 +10,9 @@ common.register('head', _head, {
// This reads n or more lines, or the entire file, whichever is less.
function readSomeLines(file, numLines) {
- var BUF_LENGTH = 64 * 1024;
- var buf = new Buffer(BUF_LENGTH);
- var bytesRead = BUF_LENGTH;
+ var buf = common.buffer();
+ var bufLength = buf.length;
+ var bytesRead = bufLength;
var pos = 0;
var fdr = null;
@@ -24,8 +24,8 @@ function readSomeLines(file, numLines) {
var numLinesRead = 0;
var ret = '';
- while (bytesRead === BUF_LENGTH && numLinesRead < numLines) {
- bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos);
+ while (bytesRead === bufLength && numLinesRead < numLines) {
+ bytesRead = fs.readSync(fdr, buf, 0, bufLength, pos);
var bufStr = buf.toString('utf8', 0, bytesRead);
numLinesRead += bufStr.split('\n').length - 1;
ret += bufStr;
@@ -72,9 +72,16 @@ function _head(options, files) {
var shouldAppendNewline = false;
files.forEach(function (file) {
- if (!fs.existsSync(file) && file !== '-') {
- common.error('no such file or directory: ' + file, { continue: true });
- return;
+ if (file !== '-') {
+ if (!fs.existsSync(file)) {
+ common.error('no such file or directory: ' + file, { continue: true });
+ return;
+ } else if (fs.statSync(file).isDirectory()) {
+ common.error("error reading '" + file + "': Is a directory", {
+ continue: true,
+ });
+ return;
+ }
}
var contents;
diff --git a/node_modules/shelljs/src/ln.js b/node_modules/shelljs/src/ln.js
index 7393d9fcd..9b8beb9ec 100644
--- a/node_modules/shelljs/src/ln.js
+++ b/node_modules/shelljs/src/ln.js
@@ -43,7 +43,7 @@ function _ln(options, source, dest) {
}
if (options.symlink) {
- var isWindows = common.platform === 'win';
+ var isWindows = process.platform === 'win32';
var linkType = isWindows ? 'file' : null;
var resolvedSourcePath = isAbsolute ? sourcePath : path.resolve(process.cwd(), path.dirname(dest), source);
if (!fs.existsSync(resolvedSourcePath)) {
diff --git a/node_modules/shelljs/src/mkdir.js b/node_modules/shelljs/src/mkdir.js
index 115f75ca4..44b1b2162 100644
--- a/node_modules/shelljs/src/mkdir.js
+++ b/node_modules/shelljs/src/mkdir.js
@@ -57,9 +57,11 @@ function _mkdir(options, dirs) {
dirs.forEach(function (dir) {
try {
- fs.lstatSync(dir);
+ var stat = fs.lstatSync(dir);
if (!options.fullpath) {
common.error('path already exists: ' + dir, { continue: true });
+ } else if (stat.isFile()) {
+ common.error('cannot create directory ' + dir + ': File exists', { continue: true });
}
return; // skip dir
} catch (e) {
@@ -80,12 +82,16 @@ function _mkdir(options, dirs) {
fs.mkdirSync(dir, parseInt('0777', 8));
}
} catch (e) {
+ var reason;
if (e.code === 'EACCES') {
- common.error('cannot create directory ' + dir + ': Permission denied');
+ reason = 'Permission denied';
+ } else if (e.code === 'ENOTDIR' || e.code === 'ENOENT') {
+ reason = 'Not a directory';
} else {
/* istanbul ignore next */
throw e;
}
+ common.error('cannot create directory ' + dir + ': ' + reason, { continue: true });
}
});
return '';
diff --git a/node_modules/shelljs/src/mv.js b/node_modules/shelljs/src/mv.js
index 7fc7cf04c..6ebaa8a03 100644
--- a/node_modules/shelljs/src/mv.js
+++ b/node_modules/shelljs/src/mv.js
@@ -11,6 +11,14 @@ common.register('mv', _mv, {
},
});
+// Checks if cureent file was created recently
+function checkRecentCreated(sources, index) {
+ var lookedSource = sources[index];
+ return sources.slice(0, index).some(function (src) {
+ return path.basename(src) === path.basename(lookedSource);
+ });
+}
+
//@
//@ ### mv([options ,] source [, source ...], dest')
//@ ### mv([options ,] source_array, dest')
@@ -55,7 +63,7 @@ function _mv(options, sources, dest) {
common.error('dest file already exists: ' + dest);
}
- sources.forEach(function (src) {
+ sources.forEach(function (src, srcIndex) {
if (!fs.existsSync(src)) {
common.error('no such file or directory: ' + src, { continue: true });
return; // skip file
@@ -70,6 +78,16 @@ function _mv(options, sources, dest) {
thisDest = path.normalize(dest + '/' + path.basename(src));
}
+ var thisDestExists = fs.existsSync(thisDest);
+
+ if (thisDestExists && checkRecentCreated(sources, srcIndex)) {
+ // cannot overwrite file created recently in current execution, but we want to continue copying other files
+ if (!options.no_force) {
+ common.error("will not overwrite just-created '" + thisDest + "' with '" + src + "'", { continue: true });
+ }
+ return;
+ }
+
if (fs.existsSync(thisDest) && options.no_force) {
common.error('dest file already exists: ' + thisDest, { continue: true });
return; // skip file
diff --git a/node_modules/shelljs/src/rm.js b/node_modules/shelljs/src/rm.js
index 595368114..2ad6914b4 100644
--- a/node_modules/shelljs/src/rm.js
+++ b/node_modules/shelljs/src/rm.js
@@ -17,7 +17,7 @@ common.register('rm', _rm, {
//
// Licensed under the MIT License
// http://www.opensource.org/licenses/mit-license.php
-function rmdirSyncRecursive(dir, force) {
+function rmdirSyncRecursive(dir, force, fromSymlink) {
var files;
files = fs.readdirSync(dir);
@@ -43,6 +43,10 @@ function rmdirSyncRecursive(dir, force) {
}
}
+ // if was directory was referenced through a symbolic link,
+ // the contents should be removed, but not the directory itself
+ if (fromSymlink) return;
+
// Now that we know everything in the sub-tree has been deleted, we can delete the main directory.
// Huzzah for the shopkeep.
@@ -91,6 +95,57 @@ function isWriteable(file) {
return writePermission;
}
+function handleFile(file, options) {
+ if (options.force || isWriteable(file)) {
+ // -f was passed, or file is writable, so it can be removed
+ common.unlinkSync(file);
+ } else {
+ common.error('permission denied: ' + file, { continue: true });
+ }
+}
+
+function handleDirectory(file, options) {
+ if (options.recursive) {
+ // -r was passed, so directory can be removed
+ rmdirSyncRecursive(file, options.force);
+ } else {
+ common.error('path is a directory', { continue: true });
+ }
+}
+
+function handleSymbolicLink(file, options) {
+ var stats;
+ try {
+ stats = fs.statSync(file);
+ } catch (e) {
+ // symlink is broken, so remove the symlink itself
+ common.unlinkSync(file);
+ return;
+ }
+
+ if (stats.isFile()) {
+ common.unlinkSync(file);
+ } else if (stats.isDirectory()) {
+ if (file[file.length - 1] === '/') {
+ // trailing separator, so remove the contents, not the link
+ if (options.recursive) {
+ // -r was passed, so directory can be removed
+ var fromSymlink = true;
+ rmdirSyncRecursive(file, options.force, fromSymlink);
+ } else {
+ common.error('path is a directory', { continue: true });
+ }
+ } else {
+ // no trailing separator, so remove the link
+ common.unlinkSync(file);
+ }
+ }
+}
+
+function handleFIFO(file) {
+ common.unlinkSync(file);
+}
+
//@
//@ ### rm([options,] file [, file ...])
//@ ### rm([options,] file_array)
@@ -115,9 +170,12 @@ function _rm(options, files) {
files = [].slice.call(arguments, 1);
files.forEach(function (file) {
- var stats;
+ var lstats;
try {
- stats = fs.lstatSync(file); // test for existence
+ var filepath = (file[file.length - 1] === '/')
+ ? file.slice(0, -1) // remove the '/' so lstatSync can detect symlinks
+ : file;
+ lstats = fs.lstatSync(filepath); // test for existence
} catch (e) {
// Path does not exist, no force flag given
if (!options.force) {
@@ -127,22 +185,14 @@ function _rm(options, files) {
}
// If here, path exists
- if (stats.isFile()) {
- if (options.force || isWriteable(file)) {
- // -f was passed, or file is writable, so it can be removed
- common.unlinkSync(file);
- } else {
- common.error('permission denied: ' + file, { continue: true });
- }
- } else if (stats.isDirectory()) {
- if (options.recursive) {
- // -r was passed, so directory can be removed
- rmdirSyncRecursive(file, options.force);
- } else {
- common.error('path is a directory', { continue: true });
- }
- } else if (stats.isSymbolicLink() || stats.isFIFO()) {
- common.unlinkSync(file);
+ if (lstats.isFile()) {
+ handleFile(file, options);
+ } else if (lstats.isDirectory()) {
+ handleDirectory(file, options);
+ } else if (lstats.isSymbolicLink()) {
+ handleSymbolicLink(file, options);
+ } else if (lstats.isFIFO()) {
+ handleFIFO(file);
}
}); // forEach(file)
return '';
diff --git a/node_modules/shelljs/src/sort.js b/node_modules/shelljs/src/sort.js
index 041b03772..2ebccd7f4 100644
--- a/node_modules/shelljs/src/sort.js
+++ b/node_modules/shelljs/src/sort.js
@@ -69,9 +69,16 @@ function _sort(options, files) {
var lines = [];
files.forEach(function (file) {
- if (!fs.existsSync(file) && file !== '-') {
- // exit upon any sort of error
- common.error('no such file or directory: ' + file);
+ if (file !== '-') {
+ if (!fs.existsSync(file)) {
+ common.error('no such file or directory: ' + file, { continue: true });
+ return;
+ } else if (fs.statSync(file).isDirectory()) {
+ common.error('read failed: ' + file + ': Is a directory', {
+ continue: true,
+ });
+ return;
+ }
}
var contents = file === '-' ? pipe : fs.readFileSync(file, 'utf8');
diff --git a/node_modules/shelljs/src/tail.js b/node_modules/shelljs/src/tail.js
index 7ece654b1..e5a88055c 100644
--- a/node_modules/shelljs/src/tail.js
+++ b/node_modules/shelljs/src/tail.js
@@ -46,9 +46,16 @@ function _tail(options, files) {
var shouldAppendNewline = false;
files.forEach(function (file) {
- if (!fs.existsSync(file) && file !== '-') {
- common.error('no such file or directory: ' + file, { continue: true });
- return;
+ if (file !== '-') {
+ if (!fs.existsSync(file)) {
+ common.error('no such file or directory: ' + file, { continue: true });
+ return;
+ } else if (fs.statSync(file).isDirectory()) {
+ common.error("error reading '" + file + "': Is a directory", {
+ continue: true,
+ });
+ return;
+ }
}
var contents = file === '-' ? pipe : fs.readFileSync(file, 'utf8');
diff --git a/node_modules/shelljs/src/uniq.js b/node_modules/shelljs/src/uniq.js
index 8f5da0028..30121616a 100644
--- a/node_modules/shelljs/src/uniq.js
+++ b/node_modules/shelljs/src/uniq.js
@@ -40,7 +40,18 @@ function _uniq(options, input, output) {
// Check if this is coming from a pipe
var pipe = common.readFromPipe();
- if (!input && !pipe) common.error('no input given');
+ if (!pipe) {
+ if (!input) common.error('no input given');
+
+ if (!fs.existsSync(input)) {
+ common.error(input + ': No such file or directory');
+ } else if (fs.statSync(input).isDirectory()) {
+ common.error("error reading '" + input + "'");
+ }
+ }
+ if (output && fs.existsSync(output) && fs.statSync(output).isDirectory()) {
+ common.error(output + ': Is a directory');
+ }
var lines = (input ? fs.readFileSync(input, 'utf8') : pipe).
trimRight().
diff --git a/node_modules/shelljs/src/which.js b/node_modules/shelljs/src/which.js
index 03db57bcd..a5f9e15eb 100644
--- a/node_modules/shelljs/src/which.js
+++ b/node_modules/shelljs/src/which.js
@@ -37,6 +37,7 @@ function checkPath(pathName) {
function _which(options, cmd) {
if (!cmd) common.error('must specify command');
+ var isWindows = process.platform === 'win32';
var pathEnv = process.env.path || process.env.Path || process.env.PATH;
var pathArray = splitPath(pathEnv);
@@ -47,7 +48,7 @@ function _which(options, cmd) {
// Assume that there are no extensions to append to queries (this is the
// case for unix)
var pathExtArray = [''];
- if (common.platform === 'win') {
+ if (isWindows) {
// In case the PATHEXT variable is somehow not set (e.g.
// child_process.spawn with an empty environment), use the XP default.
var pathExtEnv = process.env.PATHEXT || XP_DEFAULT_PATHEXT;
@@ -61,7 +62,7 @@ function _which(options, cmd) {
var attempt = path.resolve(pathArray[k], cmd);
- if (common.platform === 'win') {
+ if (isWindows) {
attempt = attempt.toUpperCase();
}