made syntax changes, updated readme, and added more tests
This commit is contained in:
parent
3f746b014c
commit
babe89c069
19
README.md
19
README.md
|
@ -388,6 +388,7 @@ const fs = new Filer.FileSystem(options, callback);
|
||||||
* [fs.removexattr(path, name, callback)](#removexattr)
|
* [fs.removexattr(path, name, callback)](#removexattr)
|
||||||
* [fs.fremovexattr(fd, name, callback)](#fremovexattr)
|
* [fs.fremovexattr(fd, name, callback)](#fremovexattr)
|
||||||
* [fs.watch(filename, [options], [listener])](#watch)
|
* [fs.watch(filename, [options], [listener])](#watch)
|
||||||
|
* [fs.watchFile(filename, [options], [listener])](#watchFile)
|
||||||
|
|
||||||
#### fs.rename(oldPath, newPath, callback)<a name="rename"></a>
|
#### fs.rename(oldPath, newPath, callback)<a name="rename"></a>
|
||||||
|
|
||||||
|
@ -1323,6 +1324,24 @@ var watcher = fs.watch('/data', { recursive: true }, function(event, filename) {
|
||||||
fs.writeFile('/data/subdir/file', 'data');
|
fs.writeFile('/data/subdir/file', 'data');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### fs.watchFile(filename, [options], [listener])<a name="watch"></a>
|
||||||
|
|
||||||
|
Watch for changes on a file at `filename`. The callback `listener` will be called each time the file is accessed.
|
||||||
|
|
||||||
|
The `options` argument only supports the change in interval between checks measured in milliseconds and does not support perstistence like node.
|
||||||
|
|
||||||
|
The `listener` receives two arguments that are the current stat object and previous stat object that are instances of `fs.Stat`. Reference to `fs.Stat` can be found
|
||||||
|
here: [`fs.Stat`](https://nodejs.org/api/fs.html#fs_class_fs_stats)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```javascript
|
||||||
|
fs.watchFile('/myfile.txt', (curr, prev) => {
|
||||||
|
console.log(`the current mtime is: ${curr.mtime}`);
|
||||||
|
console.log(`the previous mtime was: ${prev.mtime}`);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
### FileSystemShell<a name="FileSystemShell"></a>
|
### FileSystemShell<a name="FileSystemShell"></a>
|
||||||
|
|
||||||
Many common file system shell operations are available by using a `FileSystemShell` object.
|
Many common file system shell operations are available by using a `FileSystemShell` object.
|
||||||
|
|
|
@ -226,15 +226,16 @@ function FileSystem(options, callback) {
|
||||||
|
|
||||||
let intervalValue = statWatchers.get(filename);
|
let intervalValue = statWatchers.get(filename);
|
||||||
|
|
||||||
// Checks to see if there's a pre-existing watcher on the file
|
if(intervalValue) {
|
||||||
if (intervalValue === undefined) {
|
return;
|
||||||
// Stores initial prev value to compare
|
}
|
||||||
|
else {
|
||||||
fs.stat(filename, function (err, stats) {
|
fs.stat(filename, function (err, stats) {
|
||||||
var value = setInterval(function () {
|
var value = setInterval(function () {
|
||||||
prevStat = currStat;
|
prevStat = currStat;
|
||||||
|
|
||||||
//Conditional check for first run to set initial state for prevStat
|
//Conditional check for first run to set initial state for prevStat
|
||||||
if(prevStat === undefined) {
|
if(!prevStat) {
|
||||||
prevStat = stats;
|
prevStat = stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,21 +243,21 @@ function FileSystem(options, callback) {
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
clearInterval(value);
|
clearInterval(value);
|
||||||
console.warn('[Filer Error] fs.watchFile encountered an error: ' + err);
|
console.warn('[Filer Error] fs.watchFile encountered an error' + err.message);
|
||||||
}
|
}
|
||||||
if (JSON.stringify(prevStat) !== JSON.stringify(currStat)) {
|
if (JSON.stringify(prevStat) !== JSON.stringify(currStat)) {
|
||||||
listener(prevStat, currStat);
|
listener(prevStat, currStat);
|
||||||
}
|
}
|
||||||
// Set a new prevStat based on previous
|
// Set a new prevStat based on previous
|
||||||
prevStat = currStat;
|
prevStat = currStat;
|
||||||
},
|
},
|
||||||
interval
|
interval
|
||||||
);
|
);
|
||||||
|
|
||||||
// Stores interval return values
|
// Stores interval return values
|
||||||
statWatchers.set(filename, value);
|
statWatchers.set(filename, value);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Deal with various approaches to node ID creation
|
// Deal with various approaches to node ID creation
|
||||||
|
|
|
@ -19,7 +19,25 @@ describe('fs.watchFile', function() {
|
||||||
expect(fn).to.throw();
|
expect(fn).to.throw();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('prev and curr should be populated', function() {
|
it('should throw an error if a file is deleted', function() {
|
||||||
|
const fs = util.fs();
|
||||||
|
|
||||||
|
fs.writeFile('/myfile', 'data', function(error) {
|
||||||
|
if(error) throw error;
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.watchFile('/myfile', function(prev, curr) {
|
||||||
|
expect(prev).to.exist;
|
||||||
|
expect(curr).to.exist;
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.unlink('/myfile');
|
||||||
|
|
||||||
|
const fn = () => fs.watchFile('/myfile');
|
||||||
|
expect(fn).to.throw();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('prev and curr should be equal if nothing has been changed in the file', function() {
|
||||||
const fs = util.fs();
|
const fs = util.fs();
|
||||||
|
|
||||||
fs.writeFile('/myfile', 'data', function(error) {
|
fs.writeFile('/myfile', 'data', function(error) {
|
||||||
|
@ -27,8 +45,25 @@ describe('fs.watchFile', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
fs.watchFile('/myfile', function(prev, curr) {
|
fs.watchFile('/myfile', function(prev, curr) {
|
||||||
expect(prev).to.exist;
|
expect(prev).to.equal(curr);
|
||||||
expect(curr).to.exist;
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('prev and curr should not be equal if something has been changed in the file', function() {
|
||||||
|
const fs = util.fs();
|
||||||
|
|
||||||
|
fs.writeFile('/myfile', 'data', function(error) {
|
||||||
|
if(error) throw error;
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.watchFile('/myfile', function(prev, curr) {
|
||||||
|
expect(prev).to.equal(curr);
|
||||||
|
|
||||||
|
fs.writeFile('/myfile', 'data2', function(error) {
|
||||||
|
if(error) throw error;
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(prev).to.not.equal(curr);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
Loading…
Reference in New Issue