From eb1bf2399b2e537fa5fc8bbfa984fe4ff35d0656 Mon Sep 17 00:00:00 2001 From: donaldpipowitch Date: Thu, 5 Jul 2012 10:08:28 +0300 Subject: [PATCH 1/5] - added to new properties to opts param in copyDirSyncRecursive: -- opts.filter (RegExp): a RegExp which could look like this: /^CVS$|.idea$|.DS_Store$/. If added, every file or directory which matches the RegExp will be ignored. In this example every "CVS" directory and all ".idea" and ".DS_Stores" files would be ignored. -- opts.filter (Boolean): If set tu true, the RegExp in opts.filter will be used as a whitelist. Every file or directory which DOESN'T match opts.filter will be ignored. --- lib/wrench.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/wrench.js b/lib/wrench.js index 00f4166..ce7acda 100644 --- a/lib/wrench.js +++ b/lib/wrench.js @@ -183,6 +183,11 @@ exports.copyDirSyncRecursive = function(sourceDir, newDirLocation, opts) { var files = fs.readdirSync(sourceDir); for(var i = 0; i < files.length; i++) { + // ignores all files or directories which match the RegExp in opts.filter + if(!opts.whitelist && opts.filter && files[i].match(opts.filter)) continue; + // if opts.whitelist is true every file or directory which doesn't match opts.filter will be ignored + if(opts.whitelist && opts.filter && !files[i].match(opts.filter)) continue; + var currFile = fs.lstatSync(sourceDir + "/" + files[i]); if(currFile.isDirectory()) { From a0749b36ac44d9085739fb1ce7633b3ae61cc3be Mon Sep 17 00:00:00 2001 From: Farrin Reid Date: Sat, 7 Jul 2012 05:34:05 -0800 Subject: [PATCH 2/5] [fix] path.existsSync was moved to fs.existsSync --- tests/mkdir.js | 4 ++-- tests/readdir.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/mkdir.js b/tests/mkdir.js index e728516..933887b 100644 --- a/tests/mkdir.js +++ b/tests/mkdir.js @@ -7,11 +7,11 @@ module.exports = testCase({ test_mkdirSyncRecursive: function(test) { var dir = __dirname + '/_tmp/foo/bar'; - test.equals(path.existsSync(dir), false, 'Dir shouldn\'t exist - clean it up manually?'); + test.equals(fs.existsSync(dir), false, 'Dir shouldn\'t exist - clean it up manually?'); wrench.mkdirSyncRecursive(dir, 0777); - test.equals(path.existsSync(dir), true, 'Dir should exist now'); + test.equals(fs.existsSync(dir), true, 'Dir should exist now'); // clean up while (dir != __dirname) { diff --git a/tests/readdir.js b/tests/readdir.js index c314229..2460203 100644 --- a/tests/readdir.js +++ b/tests/readdir.js @@ -23,7 +23,7 @@ module.exports = testCase({ test_readdirSyncRecursive: function(test) { var dir = path.join(__dirname, 'readdir'); - test.ok(path.existsSync(dir), 'Folders should exist'); + test.ok(fs.existsSync(dir), 'Folders should exist'); var files = wrench.readdirSyncRecursive(dir); @@ -33,7 +33,7 @@ module.exports = testCase({ test_readdirRecursive: function(test) { var dir = path.join(__dirname, 'readdir'); - test.ok(path.existsSync(dir), 'Folders should exist'); + test.ok(fs.existsSync(dir), 'Folders should exist'); var allFiles = []; From 04d6db164e73cdc8bcc3c1ea9de7a3dba15236b0 Mon Sep 17 00:00:00 2001 From: Ryan McGrath Date: Fri, 9 Nov 2012 05:14:22 -0500 Subject: [PATCH 3/5] Fix for issue #35 --- lib/wrench.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/wrench.js b/lib/wrench.js index fe3b21d..c7d72e5 100644 --- a/lib/wrench.js +++ b/lib/wrench.js @@ -274,7 +274,7 @@ exports.rmdirRecursive = function rmdirRecursive(dir, clbk){ return fs.rmdir(dir, clbk); var file = dir+'/'+filename; - fs.stat(file, function(err, stat){ + fs.lstat(file, function(err, stat){ if (err) return clbk(err); if (stat.isDirectory()) rmdirRecursive(file, rmFile); From 676e210fc451a8da21074b7856729f9957af5d01 Mon Sep 17 00:00:00 2001 From: Ryan McGrath Date: Fri, 9 Nov 2012 05:20:15 -0500 Subject: [PATCH 4/5] Fixes issue #32 --- lib/wrench.js | 4 ++++ readme.md | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/wrench.js b/lib/wrench.js index c7d72e5..247874a 100644 --- a/lib/wrench.js +++ b/lib/wrench.js @@ -369,6 +369,10 @@ exports.LineReader = function(filename, bufferSize) { }; exports.LineReader.prototype = { + close: function() { + return fs.closeSync(this.fd); + }, + getBufferAndSetCurrentPosition: function(position) { var res = fs.readSync(this.fd, this.bufferSize, position, "ascii"); diff --git a/readme.md b/readme.md index 393e3da..243c0da 100644 --- a/readme.md +++ b/readme.md @@ -45,6 +45,10 @@ var f = new wrench.LineReader('x.txt'); while(f.hasNextLine()) { util.puts(x.getNextLine()); } + +// Note: You will need to close that above line reader at some point, otherwise +// you will run into a "too many open files" error. f.close() or fs.closeSync(f.fd) are +// your friends, as only you know when it is safe to close. ``` ### Asynchronous operations @@ -54,7 +58,6 @@ var files = []; wrench.readdirRecursive('my_directory_name', function(error, curFiles) { // curFiles is what you want }); - ``` Questions, comments? Hit me up. (ryan [at] venodesigns.net | http://twitter.com/ryanmcgrath) From a4ea1864eff6cc75772d4f67df1ad514f47c0118 Mon Sep 17 00:00:00 2001 From: Ryan McGrath Date: Fri, 9 Nov 2012 05:22:00 -0500 Subject: [PATCH 5/5] Version bump for dat NPM --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 09ee58e..36c296b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "wrench", "description": "Recursive filesystem (and other) operations that Node *should* have.", - "version": "1.3.9", + "version": "1.4.0", "author": "Ryan McGrath ", "repository": {