Cp.js 1.3 KB

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