diff --git a/lib/globule.js b/lib/globule.js index 5a3eeac..6bbcafc 100644 --- a/lib/globule.js +++ b/lib/globule.js @@ -89,8 +89,10 @@ globule.find = function() { }); // If srcBase and prefixBase were specified, prefix srcBase to matched paths. if (srcBase && options.prefixBase) { + var srcBaseAbsolute = path.resolve(process.cwd(), srcBase); + matches = matches.map(function(filepath) { - return path.join(srcBase, filepath); + return (filepath.indexOf(srcBaseAbsolute) === -1) ? path.join(srcBase, filepath) : filepath; }); } // Filter result set? diff --git a/test/globule_test.js b/test/globule_test.js index 4b921ea..6955d8b 100644 --- a/test/globule_test.js +++ b/test/globule_test.js @@ -303,13 +303,21 @@ exports['find'] = { test.done(); }, 'options.prefixBase': function(test) { - test.expect(2); + test.expect(3); test.deepEqual(globule.find(['**/deep*.txt'], {srcBase: 'deep', prefixBase: false}), ['deep.txt', 'deeper/deeper.txt', 'deeper/deepest/deepest.txt'], 'should not prefix srcBase to returned paths.'); test.deepEqual(globule.find(['**/deep*.txt'], {srcBase: 'deep', prefixBase: true}), ['deep/deep.txt', 'deep/deeper/deeper.txt', 'deep/deeper/deepest/deepest.txt'], 'should prefix srcBase to returned paths.'); + var dir = path.resolve('deep'); + test.deepEqual(globule.find([path.join(dir, '**/deep*.txt')], {srcBase: dir, prefixBase: true}), + [ + path.join(dir, 'deep.txt'), + path.join(dir, 'deeper/deeper.txt'), + path.join(dir, 'deeper/deepest/deepest.txt') + ], + 'should not prefix srcBase to absolute paths.'); test.done(); }, 'options.nonull': function(test) {