From 3d8a4584dcb4e3c5a9f6468cd7fa18320b6307ed Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Fri, 20 Feb 2015 10:49:40 +0100 Subject: [PATCH] Addded a wrapper around FS move that is actually able to move directories accross mountpoints and on FAT file systems --- js/common/bootstrap/module-fs.js | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/js/common/bootstrap/module-fs.js b/js/common/bootstrap/module-fs.js index 61f2afd67f..56500844ae 100644 --- a/js/common/bootstrap/module-fs.js +++ b/js/common/bootstrap/module-fs.js @@ -430,7 +430,37 @@ //////////////////////////////////////////////////////////////////////////////// if (typeof FS_MOVE !== "undefined") { - exports.move = FS_MOVE; + var move = FS_MOVE; + var fs = exports; + // File system moving directories fallback function + exports.move = function(source, target) { + if (fs.isDirectory(source)) { + // File systems cannot move directories correctly + var tempFile = fs.getTempFile("zip", false); + var tree = fs.listTree(source); + var files = []; + var i; + var filename; + for (i = 0; i < tree.length; ++i) { + filename = fs.join(source, tree[i]); + if (fs.isFile(filename)) { + files.push(tree[i]); + } + } + var res; + if (files.length === 0) { + res = fs.makeDirectory(target); + fs.removeDirectoryRecursive(source, true); + } else { + fs.zipFile(tempFile, source, files); + res = fs.unzipFile(tempFile, target, false, true); + fs.remove(tempFile); + fs.removeDirectoryRecursive(source, true); + } + return res; + } + return move(source, target); + }; delete FS_MOVE; }