source: Dev/trunk/node_modules/grunt-path-check/tasks/grunt-path-check.js @ 516

Last change on this file since 516 was 516, checked in by hendrikvanantwerpen, 11 years ago

Enable deployment with Grunt.

File size: 3.8 KB
Line 
1/*
2**  grunt-path-check -- Grunt Task for Checking Existence of Programs on PATH
3**  Copyright (c) 2013 Ralf S. Engelschall <rse@engelschall.com>
4**
5**  Permission is hereby granted, free of charge, to any person obtaining
6**  a copy of this software and associated documentation files (the
7**  "Software"), to deal in the Software without restriction, including
8**  without limitation the rights to use, copy, modify, merge, publish,
9**  distribute, sublicense, and/or sell copies of the Software, and to
10**  permit persons to whom the Software is furnished to do so, subject to
11**  the following conditions:
12**
13**  The above copyright notice and this permission notice shall be included
14**  in all copies or substantial portions of the Software.
15**
16**  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17**  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18**  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19**  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20**  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21**  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22**  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23*/
24
25/* global module: false */
26module.exports = function (grunt) {
27    /* global require: false */
28    var path  = require("path");
29    var chalk = require("chalk");
30
31    /*  define the Grunt task  */
32    grunt.registerMultiTask("path-check", "Check Existence of Programs on PATH", function () {
33        /*  prepare task options  */
34        var options = this.options({
35            mandatory: true,
36            tasks: []
37        });
38        grunt.verbose.writeflags(options, "Options");
39
40        /*  retrieve the PATH elements  */
41        /* global process: false */
42        var PATH = process.env.PATH.split(path.delimiter);
43
44        /*  iterate over all src-dest file pairs  */
45        var errors = 0;
46        this.files.forEach(function (f) {
47            /*  iterate over all programs  */
48            f.orig.src.forEach(function (name) {
49                /*  iterate over all path elements  */
50                var found = false;
51                PATH.forEach(function (dir) {
52                    /*  short-circuiting  */
53                    if (found)
54                        return;
55
56                    /*  check for program existence  */
57                    var file = path.join(dir, name);
58                    if (grunt.file.exists(file)) {
59                        grunt.log.writeln("Program \"" + chalk.green(name) + "\" found under \"" + chalk.green(file) + "\".");
60                        found = true;
61                    }
62                });
63
64                /*  just record the fact that a program is not found
65                    (intentionally still does not abort Grunt processing)  */
66                if (!found) {
67                    grunt.log.warn("Program \"" + chalk.red(name) + "\" not found in PATH.");
68                    errors++;
69                }
70            });
71        });
72        if (errors > 0) {
73            if (options.mandatory)
74                grunt.fail.warn(chalk.red(errors) + " program(s) not found in PATH!");
75            else
76                grunt.log.warn(chalk.red(errors) + " program(s) not found in PATH!");
77            if (options.tasks.length > 0)
78                grunt.log.writeln("Skipping dependent tasks: \"" +
79                    options.tasks
80                    .map(function (task) { return chalk.red(task); })
81                    .join("\", \"") +
82                "\"");
83        }
84        else if (options.tasks.length > 0) {
85            grunt.log.writeln("Running dependent tasks: \"" +
86                options.tasks
87                .map(function (task) { return chalk.green(task); })
88                .join("\", \"") +
89            "\"");
90            grunt.task.run(options.tasks);
91        }
92    });
93};
94
Note: See TracBrowser for help on using the repository browser.