diff --git a/doc/api.txt b/doc/api.txt index 1b3b102db9..071b88a9dc 100644 --- a/doc/api.txt +++ b/doc/api.txt @@ -153,30 +153,6 @@ Send a signal to a process. +pid+ is the process id and +signal+ is the signal to send; for example, "SIGINT" or "SIGUSR1". See kill(2) for more information. -+process.watchFile(filename, [options,] listener)+:: -Watch for changes on +filename+. The callback +listener+ will be called each -time the file changes. -+ -The second argument is optional. The +options+ if provided should be an -object containing two members a boolean, +persistent+, and +interval+, a -polling value in milliseconds. The default is +{persistent: true, interval: -0}+. -+ -The +listener+ gets two arguments the current stat object and the previous -stat object: -+ -------------------------- -process.watchFile(f, function (curr, prev) { - sys.puts("the current mtime is: " + curr.mtime); - sys.puts("the previous mtime was: " + prev.mtime); -}); -------------------------- -+ -These stat objects are instances of +fs.Stat+. - -+process.unwatchFile(filename)+:: -Stop watching for changes on +filename+. - +process.compile(source, scriptOrigin)+:: Just like +eval()+ except that you can specify a +scriptOrigin+ for better error reporting. @@ -755,6 +731,30 @@ fs.writeFile("message.txt", "Hello Node", function (err) { +fs.writeFileSync(filename, data, encoding="utf8")+:: The synchronous version of +fs.writeFile+. ++fs.watchFile(filename, [options,] listener)+:: +Watch for changes on +filename+. The callback +listener+ will be called each +time the file changes. ++ +The second argument is optional. The +options+ if provided should be an +object containing two members a boolean, +persistent+, and +interval+, a +polling value in milliseconds. The default is +{persistent: true, interval: +0}+. ++ +The +listener+ gets two arguments the current stat object and the previous +stat object: ++ +------------------------- +fs.watchFile(f, function (curr, prev) { + sys.puts("the current mtime is: " + curr.mtime); + sys.puts("the previous mtime was: " + prev.mtime); +}); +------------------------- ++ +These stat objects are instances of +fs.Stat+. + ++fs.unwatchFile(filename)+:: +Stop watching for changes on +filename+. + === +fs.Stats+ diff --git a/lib/fs.js b/lib/fs.js index afa6623d3b..0bc68a58bb 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -250,3 +250,43 @@ exports.catSync = function () { throw new Error("fs.catSync is deprecated. Please use fs.readFileSync instead."); }; +// Stat Change Watchers + +var statWatchers = {}; + +exports.watchFile = function (filename) { + var stat; + var options; + var listener; + + if ("object" == typeof arguments[1]) { + options = arguments[1]; + listener = arguments[2]; + } else { + options = {}; + listener = arguments[1]; + } + + if (options.persistent === undefined) options.persistent = true; + if (options.interval === undefined) options.interval = 0; + + if (filename in statWatchers) { + stat = statWatchers[filename]; + } else { + statWatchers[filename] = new process.Stat(); + stat = statWatchers[filename]; + stat.start(filename, options.persistent, options.interval); + } + stat.addListener("change", listener); + return stat; +}; + +exports.unwatchFile = function (filename) { + if (filename in statWatchers) { + stat = statWatchers[filename]; + stat.stop(); + statWatchers[filename] = undefined; + } +}; + + diff --git a/src/node.js b/src/node.js index a764d0285e..ceae632983 100644 --- a/src/node.js +++ b/src/node.js @@ -19,6 +19,8 @@ GLOBAL.print = removed("print() has moved. Use require('sys') to bring it back." GLOBAL.p = removed("p() has moved. Use require('sys') to bring it back."); process.debug = removed("process.debug() has moved. Use require('sys') to bring it back."); process.error = removed("process.error() has moved. Use require('sys') to bring it back."); +process.watchFile = removed("process.watchFile() has moved to fs.watchFile()"); +process.unwatchFile = removed("process.unwatchFile() has moved to fs.unwatchFile()"); GLOBAL.node = {}; @@ -246,46 +248,6 @@ process.addListener("newListener", function (event) { }); -// Stat Change Watchers - -var statWatchers = {}; - -process.watchFile = function (filename) { - var stat; - var options; - var listener; - - if ("object" == typeof arguments[1]) { - options = arguments[1]; - listener = arguments[2]; - } else { - options = {}; - listener = arguments[1]; - } - - if (options.persistent === undefined) options.persistent = true; - if (options.interval === undefined) options.interval = 0; - - if (filename in statWatchers) { - stat = statWatchers[filename]; - } else { - statWatchers[filename] = new process.Stat(); - stat = statWatchers[filename]; - stat.start(filename, options.persistent, options.interval); - } - stat.addListener("change", listener); - return stat; -}; - -process.unwatchFile = function (filename) { - if (filename in statWatchers) { - stat = statWatchers[filename]; - stat.stop(); - statWatchers[filename] = undefined; - } -}; - - // Timers function addTimerListener (callback) { var timer = this; diff --git a/test/pummel/test-watch-file.js b/test/pummel/test-watch-file.js index 1c235d6d17..3b9890037c 100644 --- a/test/pummel/test-watch-file.js +++ b/test/pummel/test-watch-file.js @@ -1,5 +1,6 @@ process.mixin(require("../common")); +var fs = require("fs"); var path = require("path"); var f = path.join(fixturesDir, "x.txt"); @@ -8,16 +9,14 @@ var f2 = path.join(fixturesDir, "x2.txt"); puts("watching for changes of " + f); var changes = 0; -process.watchFile(f, function (curr, prev) { +fs.watchFile(f, function (curr, prev) { puts(f + " change"); changes++; assert.ok(curr.mtime != prev.mtime); - process.unwatchFile(f); + fs.unwatchFile(f); }); -var fs = require("fs"); - var fd = fs.openSync(f, "w+"); fs.writeSync(fd, 'xyz\n'); fs.closeSync(fd);