Fix issue #235 - Allow recursive watches on root directory

This commit is contained in:
David Humphrey (:humph) david.humphrey@senecacollege.ca 2014-07-14 15:51:40 -04:00
parent e23cf3a056
commit 87e291da64
4 changed files with 49 additions and 4 deletions

View File

@ -1,5 +1,5 @@
var EventEmitter = require('../lib/eventemitter.js'); var EventEmitter = require('../lib/eventemitter.js');
var isNullPath = require('./path.js').isNull; var Path = require('./path.js');
var Intercom = require('../lib/intercom.js'); var Intercom = require('../lib/intercom.js');
/** /**
@ -26,11 +26,15 @@ function FSWatcher() {
return; return;
} }
if(isNullPath(filename_)) { if(Path.isNull(filename_)) {
throw new Error('Path must be a string without null bytes.'); throw new Error('Path must be a string without null bytes.');
} }
// TODO: get realpath for symlinks on filename... // TODO: get realpath for symlinks on filename...
filename = filename_;
// Filer's Path.normalize strips trailing slashes, which we use here.
// See https://github.com/js-platform/filer/issues/105
filename = Path.normalize(filename_);
// Whether to watch beneath this path or not // Whether to watch beneath this path or not
recursive = recursive_ === true; recursive = recursive_ === true;

View File

@ -32,6 +32,7 @@ require("./spec/fs.utimes.spec");
require("./spec/fs.xattr.spec"); require("./spec/fs.xattr.spec");
require("./spec/fs.stats.spec"); require("./spec/fs.stats.spec");
require("./spec/path-resolution.spec"); require("./spec/path-resolution.spec");
require("./spec/trailing-slashes.spec");
require("./spec/times.spec"); require("./spec/times.spec");
require("./spec/time-flags.spec"); require("./spec/time-flags.spec");
require("./spec/fs.watch.spec"); require("./spec/fs.watch.spec");

View File

@ -26,7 +26,7 @@ describe('fs.watch', function() {
}); });
}); });
it('should get a change event when writing a file in a dir with recursive=true', function(done) { it('should get a change event when writing a file beneath root dir with recursive=true', function(done) {
var fs = util.fs(); var fs = util.fs();
var watcher = fs.watch('/', { recursive: true }, function(event, filename) { var watcher = fs.watch('/', { recursive: true }, function(event, filename) {
@ -40,4 +40,29 @@ describe('fs.watch', function() {
if(error) throw error; if(error) throw error;
}); });
}); });
it('should get a change event when writing a file in a dir with recursive=true', function(done) {
var fs = util.fs();
fs.mkdir('/foo', function(err) {
if(err) throw err;
var watcher = fs.watch('/foo', { recursive: true }, function(event, filename) {
expect(event).to.equal('change');
expect(filename).to.equal('/foo');
watcher.close();
done();
});
// This shouldn't produce a change event
fs.writeFile('/myfile-not-in-foo', 'data', function(error) {
if(error) throw error;
});
// This should
fs.writeFile('/foo/myfile', 'data', function(error) {
if(error) throw error;
});
});
});
}); });

View File

@ -0,0 +1,15 @@
var Path = require('../..').Path;
var expect = require('chai').expect;
describe('Path.normalize and trailing slashes', function() {
it('should remove trailing slashes as expected', function() {
var strip = Path.normalize;
expect(strip('/')).to.equal('/');
expect(strip('/foo/')).to.equal('/foo');
expect(strip('/foo//')).to.equal('/foo');
expect(strip('/foo/bar/baz/')).to.equal('/foo/bar/baz');
});
});