thanksexports.mergeTree = function(source, target) {
var self = this;
return Q.when(self.stat(source), function(stat) {
if (stat.isFile()) {
return self.copy(source, target);
} else if (stat.isDirectory()) {
return self.exists(target).then(function(dstExists) {
var mergeSubTree = Q.when(self.list(source), function(list) {
return Q.all(list.map(function(child) {
return self.mergeTree(self.join(source, child), self.join(target, child));
}));
});
if (dstExists) {
return mergeSubTree;
} else {
return Q.when(self.makeDirectory(target), function() {
return mergeSubTree;
});
}
});
} else if (stat.isSymbolicLink()) {
return self.symbolicCopy(source, target);
}
});
};