[CB-3542] Commit bin/node_modules so that it doesn't need to be npm installed.


Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/7be1f018
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/7be1f018
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/7be1f018

Branch: refs/heads/master
Commit: 7be1f018aa2729efaa569e422bee893686ad34b8
Parents: 437daa3
Author: Andrew Grieve <[email protected]>
Authored: Tue Sep 10 16:58:28 2013 -0400
Committer: Andrew Grieve <[email protected]>
Committed: Tue Sep 10 16:58:28 2013 -0400

----------------------------------------------------------------------
 .gitignore                                    |    1 -
 bin/create                                    |   35 +-
 bin/node_modules/.bin/shjs                    |    1 +
 bin/node_modules/shelljs/.documentup.json     |    6 +
 bin/node_modules/shelljs/.npmignore           |    1 +
 bin/node_modules/shelljs/.travis.yml          |    5 +
 bin/node_modules/shelljs/LICENSE              |   26 +
 bin/node_modules/shelljs/README.md            |  513 ++++++
 bin/node_modules/shelljs/bin/shjs             |   51 +
 bin/node_modules/shelljs/global.js            |    3 +
 bin/node_modules/shelljs/jshint.json          |    4 +
 bin/node_modules/shelljs/make.js              |   48 +
 bin/node_modules/shelljs/package.json         |   48 +
 bin/node_modules/shelljs/scripts/docs.js      |   15 +
 bin/node_modules/shelljs/scripts/run-tests.js |   50 +
 bin/node_modules/shelljs/shell.js             | 1901 ++++++++++++++++++++
 16 files changed, 2679 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 757a698..f0fc1ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,7 +20,6 @@ example
 test/bin
 test/assets/www/.tmp*
 tmp/**
-bin/node_modules
 .metadata
 tmp/**/*
 Thumbs.db

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/create
----------------------------------------------------------------------
diff --git a/bin/create b/bin/create
index 4ebc184..9c4586c 100755
--- a/bin/create
+++ b/bin/create
@@ -20,34 +20,13 @@
 */
 var path   = require('path');
 var args  = process.argv;
+var create = require('./lib/create');
 
-try {
-    require.resolve("shelljs");
-    create();
-} catch(e) {
-    console.log('Shelljs module was not found, running \'npm install\'.....');
-    var exec = require('child_process').exec;
-    var cwd = process.cwd();
-    process.chdir(__dirname);
-    exec('npm install',  function (error, stdout, stderr) {
-        if (error !== null) {
-          console.error('ERROR : running \'npm install\' is npm installed? ' + 
error);
-          console.error(stderr);
-          process.exit(error.code);
-        }
-        process.chdir(cwd);
-        create();
-    });
+// Support basic help commands
+if(args.length < 3 || (args[2] == '--help' || args[2] == '/?' || args[2] == 
'-h' ||
+                    args[2] == 'help' || args[2] == '-help' || args[2] == 
'/help')) {
+    create.help();
+} else {
+    create.run(args[2], args[3], args[4], args[5]);
 }
 
-function create() {
-  var create = require('./lib/create');
-  // Support basic help commands
-  if(args.length < 3 || (args[2] == '--help' || args[2] == '/?' || args[2] == 
'-h' ||
-                      args[2] == 'help' || args[2] == '-help' || args[2] == 
'/help')) {
-      create.help();
-  } else {
-      create.run(args[2], args[3], args[4], args[5]);
-      process.exit(0);
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/.bin/shjs
----------------------------------------------------------------------
diff --git a/bin/node_modules/.bin/shjs b/bin/node_modules/.bin/shjs
new file mode 120000
index 0000000..a044997
--- /dev/null
+++ b/bin/node_modules/.bin/shjs
@@ -0,0 +1 @@
+../shelljs/bin/shjs
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/.documentup.json
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/.documentup.json 
b/bin/node_modules/shelljs/.documentup.json
new file mode 100644
index 0000000..57fe301
--- /dev/null
+++ b/bin/node_modules/shelljs/.documentup.json
@@ -0,0 +1,6 @@
+{
+  "name": "ShellJS",
+  "twitter": [
+    "r2r"
+  ]
+}

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/.npmignore
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/.npmignore 
b/bin/node_modules/shelljs/.npmignore
new file mode 100644
index 0000000..c2658d7
--- /dev/null
+++ b/bin/node_modules/shelljs/.npmignore
@@ -0,0 +1 @@
+node_modules/

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/.travis.yml
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/.travis.yml 
b/bin/node_modules/shelljs/.travis.yml
new file mode 100644
index 0000000..5caf599
--- /dev/null
+++ b/bin/node_modules/shelljs/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+  - 0.6
+  - 0.8
+

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/LICENSE
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/LICENSE b/bin/node_modules/shelljs/LICENSE
new file mode 100644
index 0000000..1b35ee9
--- /dev/null
+++ b/bin/node_modules/shelljs/LICENSE
@@ -0,0 +1,26 @@
+Copyright (c) 2012, Artur Adib <[email protected]>
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Artur Adib nor the
+      names of the contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/README.md
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/README.md 
b/bin/node_modules/shelljs/README.md
new file mode 100644
index 0000000..8b45592
--- /dev/null
+++ b/bin/node_modules/shelljs/README.md
@@ -0,0 +1,513 @@
+# ShellJS - Unix shell commands for Node.js [![Build 
Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/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!
+
+The project is [unit-tested](http://travis-ci.org/arturadib/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).
+
+## 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
+```
+
+You can also just copy `shell.js` into your project's directory, and 
`require()` accordingly.
+
+
+## Examples
+
+### JavaScript
+
+```javascript
+require('shelljs/global');
+
+if (!which('git')) {
+  echo('Sorry, this script requires git');
+  exit(1);
+}
+
+// Copy files to release dir
+mkdir('-p', '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.*\n/, '', 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
+require 'shelljs/global'
+
+if not which 'git'
+  echo 'Sorry, this script requires git'
+  exit 1
+
+# Copy files to release dir
+mkdir '-p', '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.*\n/, '', 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');
+```
+
+## Make tool
+
+A convenience script `shelljs/make` is also provided to mimic the behavior of 
a Unix Makefile. In this case all shell objects are global, and command line 
arguments will cause the script to execute only the corresponding function in 
the global `target` object. To avoid redundant calls, target functions are 
executed only once per script.
+
+Example (CoffeeScript):
+
+```coffeescript
+require 'shelljs/make'
+
+target.all = ->
+  target.bundle()
+  target.docs()
+
+target.bundle = ->
+  cd __dirname
+  mkdir 'build'
+  cd 'lib'
+  (cat '*.js').to '../build/output.js'
+
+target.docs = ->
+  cd __dirname
+  mkdir 'docs'
+  cd 'lib'
+  for file in ls '*.js'
+    text = grep '//@', file     # extract special comments
+    text.replace '//@', ''      # remove comment tags
+    text.to 'docs/my_docs.md'
+```
+
+To run the target `all`, call the above script without arguments: `$ node 
make`. To run the target `docs`: `$ node make docs`, and so on.
+
+
+
+<!-- 
+
+  DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED
+
+-->
+
+
+## Command reference
+
+
+All commands run synchronously, unless otherwise stated.
+
+
+### cd('dir')
+Changes to directory `dir` for the duration of the script
+
+### pwd()
+Returns the current directory.
+
+### ls([options ,] path [,path ...])
+### ls([options ,] path_array)
+Available options:
+
++ `-R`: recursive
++ `-A`: all files (include files beginning with `.`, except for `.` and `..`)
+
+Examples:
+
+```javascript
+ls('projs/*.js');
+ls('-R', '/users/me', '/tmp');
+ls('-R', ['/users/me', '/tmp']); // same as above
+```
+
+Returns array of files in the given path, or in current directory if no path 
provided.
+
+### 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`.
+
+### cp([options ,] source [,source ...], dest)
+### cp([options ,] source_array, dest)
+Available options:
+
++ `-f`: force
++ `-r, -R`: recursive
+
+Examples:
+
+```javascript
+cp('file1', 'dir1');
+cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
+cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
+```
+
+Copies files. The wildcard `*` is accepted.
+
+### 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. The wildcard `*` is accepted.
+
+### mv(source [, source ...], dest')
+### mv(source_array, dest')
+Available options:
+
++ `f`: force
+
+Examples:
+
+```javascript
+mv('-f', 'file', 'dir/');
+mv('file1', 'file2', 'dir/');
+mv(['file1', 'file2'], 'dir/'); // same as above
+```
+
+Moves files. The wildcard `*` is accepted.
+
+### 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.
+
+### 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 symboilc 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.
+
+### 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). Wildcard `*` accepted.
+
+### 'string'.to(file)
+
+Examples:
+
+```javascript
+cat('input.txt').to('output.txt');
+```
+
+Analogous to the redirection operator `>` in Unix, but works with JavaScript 
strings (such as
+those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will 
overwrite any existing file!_
+
+### sed([options ,] search_regex, replace_str, file)
+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 `file` and performs a JavaScript `replace()` on the 
input
+using the given search regex and replacement string. Returns the new string 
after replacement.
+
+### 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.
+
+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`. Wildcard `*` accepted.
+
+### which(command)
+
+Examples:
+
+```javascript
+var nodeExec = which('node');
+```
+
+Searches for `command` in the system's PATH. On Windows looks for `.exe`, 
`.cmd`, and `.bat` extensions.
+Returns string containing the absolute path to the command.
+
+### echo(string [,string ...])
+
+Examples:
+
+```javascript
+echo('hello world');
+var str = echo('hello world');
+```
+
+Prints string to stdout, and returns string with additional utility methods
+like `.to()`.
+
+### 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
+
+### 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.
+
+### exit(code)
+Exits the current process with the given exit code.
+
+### env['VAR_NAME']
+Object containing environment variables (both getter and setter). Shortcut to 
process.env.
+
+### exec(command [, options] [, callback])
+Available options (all `false` by default):
+
++ `async`: Asynchronous execution. Defaults to true if a callback is provided.
++ `silent`: Do not echo program output to console.
+
+Examples:
+
+```javascript
+var version = exec('node --version', {silent:true}).output;
+
+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, output) {
+  console.log('Exit code:', code);
+  console.log('Program output:', output);
+});
+```
+
+Executes the given `command` _synchronously_, unless otherwise specified.
+When in synchronous mode returns the object `{ code:..., output:... }`, 
containing the program's
+`output` (stdout + stderr)  and its exit `code`. Otherwise returns the child 
process object, and
+the `callback` gets the arguments `(code, output)`.
+
+**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.
+
+### 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.
+
+## Configuration
+
+
+### config.silent
+Example:
+
+```javascript
+var silentState = config.silent; // save old silent state
+config.silent = true;
+/* ... */
+config.silent = silentState; // restore old silent state
+```
+
+Suppresses all command output if `true`, except for `echo()` calls.
+Default is `false`.
+
+### config.fatal
+Example:
+
+```javascript
+config.fatal = true;
+cp('this_file_does_not_exist', '/dev/null'); // dies here
+/* more commands... */
+```
+
+If `true` the script will die on errors. Default is `false`.
+
+## Non-Unix commands
+
+
+### tempdir()
+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).
+
+### error()
+Tests if error occurred in the last command. Returns `null` if no error 
occurred,
+otherwise returns string explaining the error

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/bin/shjs
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/bin/shjs 
b/bin/node_modules/shelljs/bin/shjs
new file mode 100755
index 0000000..d239a7a
--- /dev/null
+++ b/bin/node_modules/shelljs/bin/shjs
@@ -0,0 +1,51 @@
+#!/usr/bin/env node
+require('../global');
+
+if (process.argv.length < 3) {
+  console.log('ShellJS: missing argument (script name)');
+  console.log();
+  process.exit(1);
+}
+
+var args,
+  scriptName = process.argv[2];
+env['NODE_PATH'] = __dirname + '/../..';
+
+if (!scriptName.match(/\.js/) && !scriptName.match(/\.coffee/)) {
+  if (test('-f', scriptName + '.js'))
+    scriptName += '.js';
+  if (test('-f', scriptName + '.coffee'))
+    scriptName += '.coffee';
+}
+
+if (!test('-f', scriptName)) {
+  console.log('ShellJS: script not found ('+scriptName+')');
+  console.log();
+  process.exit(1);
+}
+
+args = process.argv.slice(3);
+
+for (var i = 0, l = args.length; i < l; i++) {
+  if (args[i][0] !== "-"){
+    args[i] = '"' + args[i] + '"'; // fixes arguments with multiple words
+  }
+}
+
+if (scriptName.match(/\.coffee$/)) {
+  //
+  // CoffeeScript
+  //
+  if (which('coffee')) {
+    exec('coffee ' + scriptName + ' ' + args.join(' '), { async: true });
+  } else {
+    console.log('ShellJS: CoffeeScript interpreter not found');
+    console.log();
+    process.exit(1);
+  }
+} else {
+  //
+  // JavaScript
+  //
+  exec('node ' + scriptName + ' ' + args.join(' '), { async: true });
+}

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/global.js
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/global.js 
b/bin/node_modules/shelljs/global.js
new file mode 100644
index 0000000..97f0033
--- /dev/null
+++ b/bin/node_modules/shelljs/global.js
@@ -0,0 +1,3 @@
+var shell = require('./shell.js');
+for (var cmd in shell)
+  global[cmd] = shell[cmd];

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/jshint.json
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/jshint.json 
b/bin/node_modules/shelljs/jshint.json
new file mode 100644
index 0000000..205ed9c
--- /dev/null
+++ b/bin/node_modules/shelljs/jshint.json
@@ -0,0 +1,4 @@
+{
+  "loopfunc": true,
+  "sub": true
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/make.js
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/make.js b/bin/node_modules/shelljs/make.js
new file mode 100644
index 0000000..b636447
--- /dev/null
+++ b/bin/node_modules/shelljs/make.js
@@ -0,0 +1,48 @@
+require('./global');
+config.fatal = true;
+
+global.target = {};
+
+// This ensures we only execute the script targets after the entire script has
+// been evaluated
+var args = process.argv.slice(2);
+setTimeout(function() {
+  var t;
+
+  if (args.length === 1 && args[0] === '--help') {
+    console.log('Available targets:');
+    for (t in target)
+      console.log('  ' + t);
+    return;
+  }
+
+  // Wrap targets to prevent duplicate execution
+  for (t in target) {
+    (function(t, oldTarget){
+
+      // Wrap it
+      target[t] = function(force) {
+        if (oldTarget.done && !force)
+          return;
+        oldTarget.done = true;
+        return oldTarget.apply(oldTarget, arguments);
+      };
+
+    })(t, target[t]);
+  }
+
+  // Execute desired targets
+  if (args.length > 0) {
+    args.forEach(function(arg) {
+      if (arg in target)
+        target[arg]();
+      else {
+        console.log('no such target: ' + arg);
+        exit(1);
+      }
+    });
+  } else if ('all' in target) {
+    target.all();
+  }
+
+}, 0);

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/package.json
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/package.json 
b/bin/node_modules/shelljs/package.json
new file mode 100644
index 0000000..6f545b9
--- /dev/null
+++ b/bin/node_modules/shelljs/package.json
@@ -0,0 +1,48 @@
+{
+  "name": "shelljs",
+  "version": "0.1.4",
+  "author": {
+    "name": "Artur Adib",
+    "email": "[email protected]"
+  },
+  "description": "Portable Unix shell commands for Node.js",
+  "keywords": [
+    "unix",
+    "shell",
+    "makefile",
+    "make",
+    "jake",
+    "synchronous"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/arturadib/shelljs.git"
+  },
+  "homepage": "http://github.com/arturadib/shelljs";,
+  "main": "./shell.js",
+  "scripts": {
+    "test": "node scripts/run-tests"
+  },
+  "bin": {
+    "shjs": "./bin/shjs"
+  },
+  "dependencies": {},
+  "devDependencies": {
+    "jshint": "~1.1.0"
+  },
+  "optionalDependencies": {},
+  "engines": {
+    "node": "*"
+  },
+  "readme": "# ShellJS - Unix shell commands for Node.js [![Build 
Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)\n\nShellJS
 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!\n\nThe project is 
[unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in 
projects like:\n\n+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's 
next-gen PDF reader\n+ [Firebug](http://getfirebug.com/) - Firefox's infamous 
debugger\n+ [JSHint](http://jshint.com) - Most popular JavaScript linter\n+ 
[Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern 
browsers\n+ [Yeoman](http://yeoman.io/) - Web application stack and d
 evelopment tool\n+ [Deployd.com](http://deployd.com) - Open source PaaS for 
quick API backend generation\n\nand [many 
more](https://npmjs.org/browse/depended/shelljs).\n\n## Installing\n\nVia 
npm:\n\n```bash\n$ npm install [-g] shelljs\n```\n\nIf the global option `-g` 
is specified, the binary `shjs` will be installed. This makes it possible 
to\nrun ShellJS scripts much like any shell script from the command line, i.e. 
without requiring a `node_modules` folder:\n\n```bash\n$ shjs 
my_script\n```\n\nYou can also just copy `shell.js` into your project's 
directory, and `require()` accordingly.\n\n\n## Examples\n\n### 
JavaScript\n\n```javascript\nrequire('shelljs/global');\n\nif (!which('git')) 
{\n  echo('Sorry, this script requires git');\n  exit(1);\n}\n\n// Copy files 
to release dir\nmkdir('-p', 'out/Release');\ncp('-R', 'stuff/*', 
'out/Release');\n\n// Replace macros in each .js 
file\ncd('lib');\nls('*.js').forEach(function(file) {\n  sed('-i', 
'BUILD_VERSION', 'v0.1.2', file);\n  se
 d('-i', /.*REMOVE_THIS_LINE.*\\n/, '', file);\n  sed('-i', 
/.*REPLACE_LINE_WITH_MACRO.*\\n/, cat('macro.js'), file);\n});\ncd('..');\n\n// 
Run external tool synchronously\nif (exec('git commit -am 
\"Auto-commit\"').code !== 0) {\n  echo('Error: Git commit failed');\n  
exit(1);\n}\n```\n\n### CoffeeScript\n\n```coffeescript\nrequire 
'shelljs/global'\n\nif not which 'git'\n  echo 'Sorry, this script requires 
git'\n  exit 1\n\n# Copy files to release dir\nmkdir '-p', 'out/Release'\ncp 
'-R', 'stuff/*', 'out/Release'\n\n# Replace macros in each .js file\ncd 
'lib'\nfor file in ls '*.js'\n  sed '-i', 'BUILD_VERSION', 'v0.1.2', file\n  
sed '-i', /.*REMOVE_THIS_LINE.*\\n/, '', file\n  sed '-i', 
/.*REPLACE_LINE_WITH_MACRO.*\\n/, cat 'macro.js', file\ncd '..'\n\n# Run 
external tool synchronously\nif (exec 'git commit -am \"Auto-commit\"').code != 
0\n  echo 'Error: Git commit failed'\n  exit 1\n```\n\n## Global vs. 
Local\n\nThe example above uses the convenience script `shelljs/global` to reduc
 e verbosity. If polluting your global namespace is not desirable, simply 
require `shelljs`.\n\nExample:\n\n```javascript\nvar shell = 
require('shelljs');\nshell.echo('hello world');\n```\n\n## Make tool\n\nA 
convenience script `shelljs/make` is also provided to mimic the behavior of a 
Unix Makefile. In this case all shell objects are global, and command line 
arguments will cause the script to execute only the corresponding function in 
the global `target` object. To avoid redundant calls, target functions are 
executed only once per script.\n\nExample 
(CoffeeScript):\n\n```coffeescript\nrequire 'shelljs/make'\n\ntarget.all = ->\n 
 target.bundle()\n  target.docs()\n\ntarget.bundle = ->\n  cd __dirname\n  
mkdir 'build'\n  cd 'lib'\n  (cat '*.js').to 
'../build/output.js'\n\ntarget.docs = ->\n  cd __dirname\n  mkdir 'docs'\n  cd 
'lib'\n  for file in ls '*.js'\n    text = grep '//@', file     # extract 
special comments\n    text.replace '//@', ''      # remove comment tags\n    
text.to 'do
 cs/my_docs.md'\n```\n\nTo run the target `all`, call the above script without 
arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so 
on.\n\n\n\n<!-- \n\n  DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY 
GENERATED\n\n-->\n\n\n## Command reference\n\n\nAll commands run synchronously, 
unless otherwise stated.\n\n\n### cd('dir')\nChanges to directory `dir` for the 
duration of the script\n\n### pwd()\nReturns the current directory.\n\n### 
ls([options ,] path [,path ...])\n### ls([options ,] path_array)\nAvailable 
options:\n\n+ `-R`: recursive\n+ `-A`: all files (include files beginning with 
`.`, except for `.` and 
`..`)\n\nExamples:\n\n```javascript\nls('projs/*.js');\nls('-R', '/users/me', 
'/tmp');\nls('-R', ['/users/me', '/tmp']); // same as above\n```\n\nReturns 
array of files in the given path, or in current directory if no path 
provided.\n\n### find(path [,path ...])\n### 
find(path_array)\nExamples:\n\n```javascript\nfind('src', 'lib');\nfind(['src', 
'li
 b']); // same as above\nfind('.').filter(function(file) { return 
file.match(/\\.js$/); });\n```\n\nReturns array of all files (however deep) in 
the given paths.\n\nThe main difference from `ls('-R', path)` is that the 
resulting file names\ninclude the base directories, e.g. `lib/resources/file1` 
instead of just `file1`.\n\n### cp([options ,] source [,source ...], dest)\n### 
cp([options ,] source_array, dest)\nAvailable options:\n\n+ `-f`: force\n+ `-r, 
-R`: recursive\n\nExamples:\n\n```javascript\ncp('file1', 'dir1');\ncp('-Rf', 
'/tmp/*', '/usr/local/*', '/home/tmp');\ncp('-Rf', ['/tmp/*', '/usr/local/*'], 
'/home/tmp'); // same as above\n```\n\nCopies files. The wildcard `*` is 
accepted.\n\n### rm([options ,] file [, file ...])\n### rm([options ,] 
file_array)\nAvailable options:\n\n+ `-f`: force\n+ `-r, -R`: 
recursive\n\nExamples:\n\n```javascript\nrm('-rf', 
'/tmp/*');\nrm('some_file.txt', 'another_file.txt');\nrm(['some_file.txt', 
'another_file.txt']); // same as above\n```\n\nRemo
 ves files. The wildcard `*` is accepted.\n\n### mv(source [, source ...], 
dest')\n### mv(source_array, dest')\nAvailable options:\n\n+ `f`: 
force\n\nExamples:\n\n```javascript\nmv('-f', 'file', 'dir/');\nmv('file1', 
'file2', 'dir/');\nmv(['file1', 'file2'], 'dir/'); // same as 
above\n```\n\nMoves files. The wildcard `*` is accepted.\n\n### mkdir([options 
,] dir [, dir ...])\n### mkdir([options ,] dir_array)\nAvailable options:\n\n+ 
`p`: full path (will create intermediate dirs if 
necessary)\n\nExamples:\n\n```javascript\nmkdir('-p', '/tmp/a/b/c/d', 
'/tmp/e/f/g');\nmkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as 
above\n```\n\nCreates directories.\n\n### test(expression)\nAvailable 
expression primaries:\n\n+ `'-b', 'path'`: true if path is a block device\n+ 
`'-c', 'path'`: true if path is a character device\n+ `'-d', 'path'`: true if 
path is a directory\n+ `'-e', 'path'`: true if path exists\n+ `'-f', 'path'`: 
true if path is a regular file\n+ `'-L', 'path'`: true if path is a
  symboilc link\n+ `'-p', 'path'`: true if path is a pipe (FIFO)\n+ `'-S', 
'path'`: true if path is a socket\n\nExamples:\n\n```javascript\nif (test('-d', 
path)) { /* do something with dir */ };\nif (!test('-f', path)) continue; // 
skip if it's a regular file\n```\n\nEvaluates expression using the available 
primaries and returns corresponding value.\n\n### cat(file [, file ...])\n### 
cat(file_array)\n\nExamples:\n\n```javascript\nvar str = cat('file*.txt');\nvar 
str = cat('file1', 'file2');\nvar str = cat(['file1', 'file2']); // same as 
above\n```\n\nReturns a string containing the given file, or a concatenated 
string\ncontaining the files if more than one file is given (a new line 
character is\nintroduced between each file). Wildcard `*` accepted.\n\n### 
'string'.to(file)\n\nExamples:\n\n```javascript\ncat('input.txt').to('output.txt');\n```\n\nAnalogous
 to the redirection operator `>` in Unix, but works with JavaScript strings 
(such as\nthose returned by `cat`, `grep`, etc). _Like 
 Unix redirections, `to()` will overwrite any existing file!_\n\n### 
sed([options ,] search_regex, replace_str, file)\nAvailable options:\n\n+ `-i`: 
Replace contents of 'file' in-place. _Note that no backups will be 
created!_\n\nExamples:\n\n```javascript\nsed('-i', 'PROGRAM_VERSION', 'v0.1.3', 
'source.js');\nsed(/.*DELETE_THIS_LINE.*\\n/, '', 'source.js');\n```\n\nReads 
an input string from `file` and performs a JavaScript `replace()` on the 
input\nusing the given search regex and replacement string. Returns the new 
string after replacement.\n\n### grep([options ,] regex_filter, file [, file 
...])\n### grep([options ,] regex_filter, file_array)\nAvailable options:\n\n+ 
`-v`: Inverse the sense of the regex and print the lines not matching the 
criteria.\n\nExamples:\n\n```javascript\ngrep('-v', 'GLOBAL_VARIABLE', 
'*.js');\ngrep('GLOBAL_VARIABLE', '*.js');\n```\n\nReads input string from 
given files and returns a string containing all lines of the\nfile that match 
the given `regex_filt
 er`. Wildcard `*` accepted.\n\n### 
which(command)\n\nExamples:\n\n```javascript\nvar nodeExec = 
which('node');\n```\n\nSearches for `command` in the system's PATH. On Windows 
looks for `.exe`, `.cmd`, and `.bat` extensions.\nReturns string containing the 
absolute path to the command.\n\n### echo(string [,string 
...])\n\nExamples:\n\n```javascript\necho('hello world');\nvar str = 
echo('hello world');\n```\n\nPrints string to stdout, and returns string with 
additional utility methods\nlike `.to()`.\n\n### dirs([options | '+N' | 
'-N'])\n\nAvailable options:\n\n+ `-c`: Clears the directory stack by deleting 
all of the elements.\n\nArguments:\n\n+ `+N`: Displays the Nth directory 
(counting from the left of the list printed by dirs when invoked without 
options), starting with zero.\n+ `-N`: Displays the Nth directory (counting 
from the right of the list printed by dirs when invoked without options), 
starting with zero.\n\nDisplay the list of currently remembered directories. 
Returns an ar
 ray of paths in the stack, or a single path if +N or -N was specified.\n\nSee 
also: pushd, popd\n\n### pushd([options,] [dir | '-N' | '+N'])\n\nAvailable 
options:\n\n+ `-n`: Suppresses the normal change of directory when adding 
directories to the stack, so that only the stack is 
manipulated.\n\nArguments:\n\n+ `dir`: Makes the current working directory be 
the top of the stack, and then executes the equivalent of `cd dir`.\n+ `+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+ `-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.\n\nExamples:\n\n```javascript\n// process.cwd() === 
'/usr'\npushd('/etc'); // Returns /etc /usr\npushd('+1');   // Returns /usr 
/etc\n```\n\nSave the current directory on the top of the directory stack and 
then cd to `dir`. With no arguments, pushd exchanges the t
 op two directories. Returns an array of paths in the stack.\n\n### 
popd([options,] ['-N' | '+N'])\n\nAvailable options:\n\n+ `-n`: Suppresses the 
normal change of directory when removing directories from the stack, so that 
only the stack is manipulated.\n\nArguments:\n\n+ `+N`: Removes the Nth 
directory (counting from the left of the list printed by dirs), starting with 
zero.\n+ `-N`: Removes the Nth directory (counting from the right of the list 
printed by dirs), starting with 
zero.\n\nExamples:\n\n```javascript\necho(process.cwd()); // 
'/usr'\npushd('/etc');       // '/etc /usr'\necho(process.cwd()); // 
'/etc'\npopd();              // '/usr'\necho(process.cwd()); // 
'/usr'\n```\n\nWhen 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.\n\n### 
exit(code)\nExits t
 he current process with the given exit code.\n\n### env['VAR_NAME']\nObject 
containing environment variables (both getter and setter). Shortcut to 
process.env.\n\n### exec(command [, options] [, callback])\nAvailable options 
(all `false` by default):\n\n+ `async`: Asynchronous execution. Defaults to 
true if a callback is provided.\n+ `silent`: Do not echo program output to 
console.\n\nExamples:\n\n```javascript\nvar version = exec('node --version', 
{silent:true}).output;\n\nvar child = exec('some_long_running_process', 
{async:true});\nchild.stdout.on('data', function(data) {\n  /* ... do something 
with data ... */\n});\n\nexec('some_long_running_process', function(code, 
output) {\n  console.log('Exit code:', code);\n  console.log('Program output:', 
output);\n});\n```\n\nExecutes the given `command` _synchronously_, unless 
otherwise specified.\nWhen in synchronous mode returns the object `{ code:..., 
output:... }`, containing the program's\n`output` (stdout + stderr)  and its 
exit `c
 ode`. Otherwise returns the child process object, and\nthe `callback` gets the 
arguments `(code, output)`.\n\n**Note:** For long-lived processes, it's best to 
run `exec()` asynchronously as\nthe current synchronous implementation uses a 
lot of CPU. This should be getting\nfixed soon.\n\n### chmod(octal_mode || 
octal_string, file)\n### chmod(symbolic_mode, file)\n\nAvailable options:\n\n+ 
`-v`: output a diagnostic for every file processed\n+ `-c`: like verbose but 
report only when a change is made\n+ `-R`: change files and directories 
recursively\n\nExamples:\n\n```javascript\nchmod(755, 
'/Users/brandon');\nchmod('755', '/Users/brandon'); // same as above 
\nchmod('u+x', '/Users/brandon');\n```\n\nAlters the permissions of a file or 
directory by either specifying the\nabsolute permissions in octal form or 
expressing the changes in symbols.\nThis command tries to mimic the POSIX 
behavior as much as possible.\nNotable exceptions:\n\n+ In symbolic modes, 
'a-r' and '-r' are identical.  No
  consideration is\n  given to the umask.\n+ There is no \"quiet\" option since 
default behavior is to run silent.\n\n## Configuration\n\n\n### 
config.silent\nExample:\n\n```javascript\nvar silentState = config.silent; // 
save old silent state\nconfig.silent = true;\n/* ... */\nconfig.silent = 
silentState; // restore old silent state\n```\n\nSuppresses all command output 
if `true`, except for `echo()` calls.\nDefault is `false`.\n\n### 
config.fatal\nExample:\n\n```javascript\nconfig.fatal = 
true;\ncp('this_file_does_not_exist', '/dev/null'); // dies here\n/* more 
commands... */\n```\n\nIf `true` the script will die on errors. Default is 
`false`.\n\n## Non-Unix commands\n\n\n### tempdir()\nSearches and returns 
string containing a writeable, platform-dependent temporary directory.\nFollows 
Python's [tempfile 
algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).\n\n###
 error()\nTests if error occurred in the last command. Returns `null` if no 
error occurred,\notherw
 ise returns string explaining the error\n",
+  "readmeFilename": "README.md",
+  "bugs": {
+    "url": "https://github.com/arturadib/shelljs/issues";
+  },
+  "_id": "[email protected]",
+  "dist": {
+    "shasum": "7a8aeaa3dc3c0be2e59d83168e83b4c4bc4dac95"
+  },
+  "_from": "[email protected]",
+  "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz";
+}

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/scripts/docs.js
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/scripts/docs.js 
b/bin/node_modules/shelljs/scripts/docs.js
new file mode 100755
index 0000000..68a2138
--- /dev/null
+++ b/bin/node_modules/shelljs/scripts/docs.js
@@ -0,0 +1,15 @@
+#!/usr/bin/env node
+require('../global');
+
+echo('Appending docs to README.md');
+
+cd(__dirname + '/..');
+
+// Extract docs from shell.js
+var docs = grep('//@', 'shell.js');
+// Remove '//@'
+docs = docs.replace(/\/\/\@ ?/g, '');
+// Append docs to README
+sed('-i', /## Command reference(.|\n)*/, '## Command reference\n\n' + docs, 
'README.md');
+
+echo('All done.');

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7be1f018/bin/node_modules/shelljs/scripts/run-tests.js
----------------------------------------------------------------------
diff --git a/bin/node_modules/shelljs/scripts/run-tests.js 
b/bin/node_modules/shelljs/scripts/run-tests.js
new file mode 100755
index 0000000..a9d32fc
--- /dev/null
+++ b/bin/node_modules/shelljs/scripts/run-tests.js
@@ -0,0 +1,50 @@
+#!/usr/bin/env node
+require('../global');
+
+var path = require('path');
+
+var failed = false;
+
+//
+// Lint
+//
+JSHINT_BIN = './node_modules/jshint/bin/jshint';
+cd(__dirname + '/..');
+
+if (!test('-f', JSHINT_BIN)) {
+  echo('JSHint not found. Run `npm install` in the root dir first.');
+  exit(1);
+}
+
+if (exec(JSHINT_BIN + ' --config jshint.json *.js test/*.js').code !== 0) {
+  failed = true;
+  echo('*** JSHINT FAILED! (return code != 0)');
+  echo();
+} else {
+  echo('All JSHint tests passed');
+  echo();
+}
+
+//
+// Unit tests
+//
+cd(__dirname + '/../test');
+ls('*.js').forEach(function(file) {
+  echo('Running test:', file);
+  if (exec('node ' + file).code !== 123) { // 123 avoids false positives (e.g. 
premature exit)
+    failed = true;
+    echo('*** TEST FAILED! (missing exit code "123")');
+    echo();
+  }
+});
+
+if (failed) {
+  echo();
+  echo('*******************************************************');
+  echo('WARNING: Some tests did not pass!');
+  echo('*******************************************************');
+  exit(1);
+} else {
+  echo();
+  echo('All tests passed.');
+}

Reply via email to