source: Dev/trunk/src/client/util/build/node/process.js @ 529

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

Added Dojo 1.9.3 release.

File size: 1.6 KB
Line 
1define(["../fileHandleThrottle", "../messages"], function(fht, messages){
2
3        var match = process.version.match(/(\d+)\.(\d+)\.(\d+)/),
4                versionMajor = Number(match[1]),
5                versionMinor = Number(match[2]),
6                versionPatch = Number(match[3]),
7                spawn = require.nodeRequire("child_process").spawn;
8        return {
9                cwd:process.cwd,
10                exit:function(code){
11                        // no more messages
12                        messages.stop();
13
14                        process.exit(code);
15                },
16
17                exec:function() {
18                        // signature is (command, arg1, ..., argn, errorMessage, bc, callback)
19                        for(var command = arguments[0], args = [], i = 1; i<arguments.length-3; i++){
20                                args.push(arguments[i]);
21                        }
22                        var
23                                errorMessage = arguments[i++],
24                                bc = arguments[i++],
25                                callback = arguments[i];
26                        fht.enqueue(function(){
27                                var
28                                        text = "",
29                                        process = spawn(command, args),
30                                        status = 0,
31                                        finish = function(code){
32                                                // release when both exit and close events occur; see below
33                                                if(++status===2){
34                                                        fht.release();
35                                                        if(code){
36                                                                bc.log("execFailed", ["message", errorMessage, "output", text]);
37                                                        }
38                                                        callback && callback(code, text);
39                                                }
40                                        };
41
42                                process.on("exit", finish);
43                                // for node>=0.8, close is called; for node <0.8 close appears to not be called (verified for 0.6)
44                                // in 0.8+ releasing the file handle before close is called can use up file handles too fast (see #15620)
45                                if(versionMajor==0 && versionMinor<=7){
46                                        ++status;
47                                }else{
48                                        process.on("close", finish);
49                                }
50                                process.stdout.on("data", function(data){
51                                        text+= data;
52                                });
53                                process.stderr.on("data", function(data){
54                                        text+= data;
55                                });
56                        });
57                }
58        };
59});
60
Note: See TracBrowser for help on using the repository browser.