Skip to content

Commit 70a5dc2

Browse files
author
mmoczulski
committedOct 25, 2013
Started developing the sql-diff
* Reading directories content * Finding common files in two directories
1 parent 0085669 commit 70a5dc2

File tree

4 files changed

+123
-0
lines changed

4 files changed

+123
-0
lines changed
 

‎.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

‎lib/diff.js

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
var path = require("path");
2+
3+
exports.findDifferences = function(leftFiles, rightFiles, done) {
4+
var leftFileNames = leftFiles.map(path.basename);
5+
var rightFileNames = rightFiles.map(path.basename);
6+
7+
var differences = {};
8+
9+
findDifferencesInFilesWithSameNames(differences, leftFiles, rightFiles);
10+
11+
done(differences);
12+
};
13+
14+
function findDifferencesInFilesWithSameNames(differences, leftFiles, rightFiles) {
15+
var leftFileNames = leftFiles.map(path.basename);
16+
var rightFileNames = rightFiles.map(path.basename);
17+
18+
var commonFiles = readCommonFiles();
19+
20+
console.log("common:", commonFiles);
21+
22+
commonFiles.forEach(function (fileName) {
23+
24+
});
25+
26+
function readCommonFiles() {
27+
return leftFileNames.filter(function (fileName) {
28+
return rightFileNames.indexOf(fileName) !== -1;
29+
}).sort().map(toFileInfo.bind(null, leftFiles, rightFiles));
30+
}
31+
}
32+
33+
34+
function toFileInfo(leftFiles, rightFiles, fileName) {
35+
var byName = filterByName.bind(null, fileName);
36+
return {
37+
fileName: fileName,
38+
left: leftFiles.filter(byName)[0],
39+
right: rightFiles.filter(byName)[0]
40+
};
41+
}
42+
43+
function filterByName(fileName, filePath) {
44+
return path.basename(filePath) === fileName;
45+
}

‎package.json

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
"start": "node index.js"
88
},
99
"dependencies": {
10+
"optimist": "0.6.0",
11+
"async": "0.2.9"
1012
},
1113
"devDependencies": {
1214
}

‎sql-diff.js

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
var fs = require("fs");
2+
var async = require("async");
3+
var path = require("path");
4+
var arguments = require("optimist").
5+
usage("Usage: $0 --left [path] --right [path]").
6+
demand(["left", "right"]).
7+
describe("left", "Left folder (earlier one) to compare").
8+
describe("right", "Right folder (later one) to compare").
9+
argv;
10+
11+
12+
var leftDir = arguments.left;
13+
var rightDir = arguments.right;
14+
15+
var diff = require("./lib/diff");
16+
17+
18+
if (leftDir === rightDir) {
19+
console.error("Cannot compare two same directories!");
20+
process.exit(-1);
21+
}
22+
23+
async.each([leftDir, rightDir], directoryExists, function(err) {
24+
if (err) {
25+
console.error("The provided directory does not exists", err);
26+
process.exit(-1);
27+
}
28+
29+
async.map([leftDir, rightDir], readDir, function(err, directories) {
30+
if (err) {
31+
console.error("Cannot read directory", err);
32+
process.exit(-1);
33+
}
34+
35+
var leftDirectory = directories[0];
36+
var rightDirectory = directories[1];
37+
38+
diff.findDifferences(leftDirectory, rightDirectory, function(differences) {
39+
console.log("Diff: ", differences);
40+
});
41+
});
42+
});
43+
44+
function directoryExists(dirPath, done) {
45+
fs.exists(dirPath, function (exists) {
46+
if (exists) {
47+
fs.stat(dirPath, function(err, stats) {
48+
if (err) {
49+
done(err);
50+
return;
51+
}
52+
if (stats.isDirectory()) {
53+
done();
54+
} else {
55+
done("Is not a directory: " + dirPath);
56+
}
57+
});
58+
} else {
59+
done("Not exist: " + dirPath);
60+
}
61+
});
62+
}
63+
64+
function readDir(directory, done) {
65+
fs.readdir(directory, function(err, content) {
66+
if (err) {
67+
done(err, null);
68+
return;
69+
}
70+
71+
done(null, content.map(function (file) {
72+
return directory + path.sep + file;
73+
}));
74+
});
75+
}

0 commit comments

Comments
 (0)