Version 1
[yaffs-website] / node_modules / fs-extra / lib / copy / copy.js
diff --git a/node_modules/fs-extra/lib/copy/copy.js b/node_modules/fs-extra/lib/copy/copy.js
new file mode 100644 (file)
index 0000000..6c5e224
--- /dev/null
@@ -0,0 +1,50 @@
+var fs = require('graceful-fs')
+var path = require('path')
+var ncp = require('./ncp')
+var mkdir = require('../mkdirs')
+
+function copy (src, dest, options, callback) {
+  if (typeof options === 'function' && !callback) {
+    callback = options
+    options = {}
+  } else if (typeof options === 'function' || options instanceof RegExp) {
+    options = {filter: options}
+  }
+  callback = callback || function () {}
+  options = options || {}
+
+  // Warn about using preserveTimestamps on 32-bit node:
+  if (options.preserveTimestamps && process.arch === 'ia32') {
+    console.warn('fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n' +
+    'see https://github.com/jprichardson/node-fs-extra/issues/269')
+  }
+
+  // don't allow src and dest to be the same
+  var basePath = process.cwd()
+  var currentPath = path.resolve(basePath, src)
+  var targetPath = path.resolve(basePath, dest)
+  if (currentPath === targetPath) return callback(new Error('Source and destination must not be the same.'))
+
+  fs.lstat(src, function (err, stats) {
+    if (err) return callback(err)
+
+    var dir = null
+    if (stats.isDirectory()) {
+      var parts = dest.split(path.sep)
+      parts.pop()
+      dir = parts.join(path.sep)
+    } else {
+      dir = path.dirname(dest)
+    }
+
+    fs.exists(dir, function (dirExists) {
+      if (dirExists) return ncp(src, dest, options, callback)
+      mkdir.mkdirs(dir, function (err) {
+        if (err) return callback(err)
+        ncp(src, dest, options, callback)
+      })
+    })
+  })
+}
+
+module.exports = copy