From a2ff2823dc6d6c6c6e1d7593b4c3b96114de85d7 Mon Sep 17 00:00:00 2001 From: Alan Kligman Date: Thu, 30 May 2013 19:07:21 -0400 Subject: [PATCH] WIP --- examples/refactoring-test.html | 2 +- src/fs2.js | 106 ++++++++++++++++++++++++--------- 2 files changed, 79 insertions(+), 29 deletions(-) diff --git a/examples/refactoring-test.html b/examples/refactoring-test.html index 256af09..724c7c8 100644 --- a/examples/refactoring-test.html +++ b/examples/refactoring-test.html @@ -38,7 +38,7 @@ function remove_tmp_directory() { fs.promise.then(make_tmp_directory) .then(remove_tmp_directory) .then(function() { console.log('done'); }) - .otherwise(function(error) { console.error(error.message); }); + .otherwise(function(error) { console.error(error.stack); }); }); diff --git a/src/fs2.js b/src/fs2.js index 8b3db85..b08c535 100644 --- a/src/fs2.js +++ b/src/fs2.js @@ -5,9 +5,59 @@ define(function(require) { var _ = require('lodash'); var when = require('when'); var Path = require('src/path'); - var guid = require("src/guid"); + var guid = require('src/guid'); require("crypto-js/rollups/sha256"); var Crypto = CryptoJS; + function EPathExists(){ Error.apply(this, arguments); } + EPathExists.prototype = new Error(); + EPathExists.prototype.name = "EPathExists"; + EPathExists.prototype.constructor = EPathExists; + + function EIsDirectory(){ Error.apply(this, arguments); } + EIsDirectory.prototype = new Error(); + EIsDirectory.prototype.name = "EIsDirectory"; + EIsDirectory.prototype.constructor = EIsDirectory; + + function ENoEntry(){ Error.apply(this, arguments); } + ENoEntry.prototype = new Error(); + ENoEntry.prototype.name = "ENoEntry"; + ENoEntry.prototype.constructor = ENoEntry; + + function EBusy(){ Error.apply(this, arguments); } + EBusy.prototype = new Error(); + EBusy.prototype.name = "EBusy"; + EBusy.prototype.constructor = EBusy; + + function ENotEmpty(){ Error.apply(this, arguments); } + ENotEmpty.prototype = new Error(); + ENotEmpty.prototype.name = "ENotEmpty"; + ENotEmpty.prototype.constructor = ENotEmpty; + + function ENotDirectory(){ Error.apply(this, arguments); } + ENotDirectory.prototype = new Error(); + ENotDirectory.prototype.name = "NotADirectoryError"; + ENotDirectory.prototype.constructor = ENotDirectory; + + function EBadFileDescriptor(){ Error.apply(this, arguments); } + EBadFileDescriptor.prototype = new Error(); + EBadFileDescriptor.prototype.name = "EBadFileDescriptor"; + EBadFileDescriptor.prototype.constructor = EBadFileDescriptor; + + function ENotImplemented(){ Error.apply(this, arguments); } + ENotImplemented.prototype = new Error(); + ENotImplemented.prototype.name = "ENotImplemented"; + ENotImplemented.prototype.constructor = ENotImplemented; + + function ENotMounted(){ Error.apply(this, arguments); } + ENotMounted.prototype = new Error(); + ENotMounted.prototype.name = "ENotMounted"; + ENotMounted.prototype.constructor = ENotMounted; + + function EFileExists(){ Error.apply(this, arguments); } + EFileExists.prototype = new Error(); + EFileExists.prototype.name = "EFileExists"; + EFileExists.prototype.constructor = EFileExists; + var METADATA_STORE_NAME = 'metadata'; var FILE_STORE_NAME = 'files'; @@ -103,7 +153,7 @@ define(function(require) { if(error) { callback(error); } else if(!rootDirectoryNode) { - callback(new Error('ENOENT')); + callback(new ENoEntry()); } else { callback(undefined, rootDirectoryNode); } @@ -117,7 +167,7 @@ define(function(require) { if(error) { callback(error); } else if(!_(parentDirectoryNode).has('data') || !parentDirectoryNode.type == MODE_DIRECTORY) { - callback(new Error('ENOTDIR')); + callback(new ENotDirectory()); } else { read_object(objectStore, parentDirectoryNode.data, get_node_id_from_parent_directory_data); } @@ -130,7 +180,7 @@ define(function(require) { callback(error); } else { if(!_(parentDirectoryData).has(name)) { - callback(new Error('ENOENT')); + callback(new ENoEntry()); } else { var nodeId = parentDirectoryData[name].id; read_object(objectStore, nodeId, callback); @@ -150,8 +200,8 @@ define(function(require) { function write_directory_node(error, existingNode) { if(!error && existingNode) { - callback(new Error('EEXIST')); - } else if(error && 'ENOENT' != error.message) { + callback(new EPathExists()); + } else if(error && !error instanceof ENoEntry) { callback(error); } else { directoryNode = new Node(ROOT_NODE_ID, MODE_DIRECTORY); @@ -177,38 +227,38 @@ define(function(require) { var name = Path.basename(path); var parentPath = Path.dirname(path); - var _directoryNode; - var _directoryData; - var _parentDirectoryNode; - var _parentDirectoryData; + var directoryNode; + var directoryData; + var parentDirectoryNode; + var parentDirectoryData; - function check_if_directory_exists(error, existingNode) { - if(!error && existingNode) { - callback(new Error('EEXIST')); - } else if(error && 'ENOENT' != error.message) { + function check_if_directory_exists(error, result) { + if(!error && result) { + callback(new EPathExists()); + } else if(error && !error instanceof ENoEntry) { callback(error); } else { find_node(objectStore, parentPath, read_parent_directory_data); } } - function read_parent_directory_data(error, parentDirectoryNode) { + function read_parent_directory_data(error, result) { if(error) { callback(error); } else { - _parentDirectoryNode = parentDirectoryNode; - read_object(objectStore, _parentDirectoryNode.data, write_directory_node); + parentDirectoryNode = result; + read_object(objectStore, parentDirectoryNode.data, write_directory_node); } }; - function write_directory_node(error, parentDirectoryData) { + function write_directory_node(error, result) { if(error) { callback(error); } else { - _parentDirectoryData = parentDirectoryData; - _directoryNode = new Node(undefined, MODE_DIRECTORY); - _directoryNode.links += 1; - write_object(objectStore, _directoryNode, _directoryNode.id, write_directory_data); + parentDirectoryData = result; + directoryNode = new Node(undefined, MODE_DIRECTORY); + directoryNode.links += 1; + write_object(objectStore, directoryNode, directoryNode.id, write_directory_data); } }; @@ -216,8 +266,8 @@ define(function(require) { if(error) { callback(error); } else { - _directoryData = {}; - write_object(objectStore, _directoryData, _directoryNode.data, update_parent_directory_data); + directoryData = {}; + write_object(objectStore, directoryData, directoryNode.data, update_parent_directory_data); } }; @@ -225,8 +275,8 @@ define(function(require) { if(error) { callback(error); } else { - _parentDirectoryData[name] = new DirectoryEntry(_directoryNode.id, MODE_DIRECTORY); - write_object(objectStore, _parentDirectoryData, _parentDirectoryNode.data, callback); + parentDirectoryData[name] = new DirectoryEntry(directoryNode.id, MODE_DIRECTORY); + write_object(objectStore, parentDirectoryData, parentDirectoryNode.data, callback); } } @@ -247,7 +297,7 @@ define(function(require) { if(error) { callback(error); } else if(!result) { - callback(new Error('ENOENT')); + callback(new ENoEntry()); } else { directoryNode = result; read_object(objectStore, directoryNode.data, check_if_directory_is_empty); @@ -260,7 +310,7 @@ define(function(require) { } else { directoryData = result; if(_(directoryData).size() > 0) { - callback(new Error('ENOTEMPTY')); + callback(new ENotEmpty()); } else { find_node(objectStore, parentPath, read_parent_directory_data); }