Cp.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. var Fs = require("fs");
  2. var Semaphore = require('./Semaphore');
  3. var nThen = require('nthen');
  4. var sema = Semaphore.create(64);
  5. var cp = module.exports = function (src, dest, callback) {
  6. Fs.stat(src, function (err, stat) {
  7. if (err) { throw err; }
  8. if (stat.isDirectory()) {
  9. var subFiles;
  10. nThen(function (waitFor) {
  11. Fs.mkdir(dest, waitFor(function (err) {
  12. if (err) { throw err; }
  13. }));
  14. Fs.readdir(src, waitFor(function (err, list) {
  15. if (err) { throw err; }
  16. subFiles = list;
  17. }));
  18. }).nThen(function (waitFor) {
  19. subFiles.forEach(function (file) {
  20. cp(src + '/' + file, dest + '/' + file, waitFor());
  21. });
  22. }).nThen(function (waitFor) {
  23. callback();
  24. });
  25. } else {
  26. sema.take(function (returnAfter) {
  27. Fs.readFile(src, function (err, content) {
  28. if (err) { throw err; }
  29. Fs.writeFile(dest, content, returnAfter(function (err) {
  30. if (err) { throw err; }
  31. callback();
  32. }));
  33. });
  34. });
  35. }
  36. });
  37. };