mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-26 19:47:20 +00:00
parent
b0394f1560
commit
f3930ad69c
@ -1456,6 +1456,7 @@ $tw.boot.startup = function(options) {
|
||||
pluginsPath: "../plugins/",
|
||||
themesPath: "../themes/",
|
||||
languagesPath: "../languages/",
|
||||
editionsPath: "../editions/",
|
||||
wikiInfo: "./tiddlywiki.info",
|
||||
wikiPluginsSubDir: "./plugins",
|
||||
wikiThemesSubDir: "./themes",
|
||||
|
47
core/modules/commands/init.js
Normal file
47
core/modules/commands/init.js
Normal file
@ -0,0 +1,47 @@
|
||||
/*\
|
||||
title: $:/core/modules/commands/init.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to initialise an empty wiki folder
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "init",
|
||||
synchronous: true
|
||||
};
|
||||
|
||||
var Command = function(params,commander) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
var path = require("path"),
|
||||
editionName = this.params[0] || "empty";
|
||||
// Check that we don't already have a valid wiki folder
|
||||
if($tw.boot.wikiTiddlersPath) {
|
||||
return "Wiki folder is not empty";
|
||||
}
|
||||
// Check the edition exists
|
||||
var editionPath = path.resolve($tw.boot.corePath,$tw.config.editionsPath) + "/" + editionName;
|
||||
if(!$tw.utils.isDirectory(editionPath)) {
|
||||
return "Edition '" + editionName + "' not found";
|
||||
}
|
||||
// Copy the edition content
|
||||
var err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);
|
||||
if(!err) {
|
||||
this.commander.streams.output.write("Copied edition '" + editionName + "' to " + $tw.boot.wikiPath + "\n");
|
||||
}
|
||||
return err;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
111
core/modules/utils/filesystem.js
Normal file
111
core/modules/utils/filesystem.js
Normal file
@ -0,0 +1,111 @@
|
||||
/*\
|
||||
title: $:/core/modules/utils/filesystem.js
|
||||
type: application/javascript
|
||||
module-type: utils-node
|
||||
|
||||
File system utilities
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
var fs = require("fs"),
|
||||
path = require("path");
|
||||
|
||||
/*
|
||||
Recursively (and synchronously) copy a directory and all its content
|
||||
*/
|
||||
exports.copyDirectory = function(srcPath,dstPath) {
|
||||
// Remove any trailing path separators
|
||||
srcPath = $tw.utils.removeTrailingSeparator(srcPath);
|
||||
dstPath = $tw.utils.removeTrailingSeparator(dstPath);
|
||||
// Create the destination directory
|
||||
var err = $tw.utils.createDirectory(dstPath);
|
||||
if(err) {
|
||||
return err;
|
||||
}
|
||||
// Function to copy a folder full of files
|
||||
var copy = function(srcPath,dstPath) {
|
||||
var srcStats = fs.lstatSync(srcPath),
|
||||
dstExists = fs.existsSync(dstPath);
|
||||
if(srcStats.isFile()) {
|
||||
$tw.utils.copyFile(srcPath,dstPath);
|
||||
} else if(srcStats.isDirectory()) {
|
||||
var items = fs.readdirSync(srcPath);
|
||||
for(var t=0; t<items.length; t++) {
|
||||
var item = items[t],
|
||||
err = copy(srcPath + path.sep + item,dstPath + path.sep + item);
|
||||
if(err) {
|
||||
return err;
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
copy(srcPath,dstPath);
|
||||
return null;
|
||||
};
|
||||
|
||||
/*
|
||||
Copy a file
|
||||
*/
|
||||
var FILE_BUFFER_LENGTH = 64 * 1024,
|
||||
fileBuffer = $tw.node && new Buffer(FILE_BUFFER_LENGTH);
|
||||
|
||||
exports.copyFile = function(srcPath,dstPath) {
|
||||
// Create any directories in the destination
|
||||
$tw.utils.createDirectory(path.dirname(dstPath));
|
||||
// Copy the file
|
||||
var srcFile = fs.openSync(srcPath,"r"),
|
||||
dstFile = fs.openSync(dstPath,"w"),
|
||||
bytesRead = 1,
|
||||
pos = 0;
|
||||
while (bytesRead > 0) {
|
||||
bytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);
|
||||
fs.writeSync(dstFile,fileBuffer,0,bytesRead);
|
||||
pos += bytesRead;
|
||||
}
|
||||
fs.closeSync(srcFile);
|
||||
fs.closeSync(dstFile);
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
Remove trailing path separator
|
||||
*/
|
||||
exports.removeTrailingSeparator = function(dirPath) {
|
||||
var len = dirPath.length;
|
||||
if(dirPath.charAt(len-1) === path.sep) {
|
||||
dirPath = dirPath.substr(0,len-1);
|
||||
}
|
||||
return dirPath;
|
||||
};
|
||||
|
||||
/*
|
||||
Recursively create a directory
|
||||
*/
|
||||
exports.createDirectory = function(dirPath) {
|
||||
var parts = dirPath.split(path.sep);
|
||||
for(var component=0; component<parts.length; component++) {
|
||||
var subDirPath = parts.slice(0,component+1).join(path.sep);
|
||||
if(!$tw.utils.isDirectory(subDirPath)) {
|
||||
try {
|
||||
fs.mkdirSync(subDirPath);
|
||||
} catch(e) {
|
||||
return "Error creating directory '" + subDirPath + "'";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
/*
|
||||
Check if a path identifies a directory
|
||||
*/
|
||||
exports.isDirectory = function(dirPath) {
|
||||
return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();
|
||||
};
|
||||
|
||||
})();
|
21
editions/tw5.com/tiddlers/commands/InitCommand.tid
Normal file
21
editions/tw5.com/tiddlers/commands/InitCommand.tid
Normal file
@ -0,0 +1,21 @@
|
||||
created: 20140223195548209
|
||||
modified: 20140223195738745
|
||||
tags: command
|
||||
title: InitCommand
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.
|
||||
|
||||
```
|
||||
--init <edition>
|
||||
```
|
||||
|
||||
The "edition" defaults to ''empty''.
|
||||
|
||||
For example:
|
||||
|
||||
```
|
||||
tiddlywiki ./MyWikiFolder --init empty
|
||||
```
|
||||
|
||||
Note that the init command will fail if the wiki folder does not exist, or is not empty.
|
@ -1,5 +1,5 @@
|
||||
created: 20140223183404938
|
||||
modified: 20140223192031783
|
||||
modified: 20140223195514667
|
||||
tags: howto
|
||||
title: Notes for upgrading to 5.0.8-beta
|
||||
type: text/vnd.tiddlywiki
|
||||
@ -54,4 +54,4 @@ And a paragraph of text.
|
||||
|
||||
! Changed commands for [[TiddlyWiki on Node.js]]
|
||||
|
||||
The handling of wiki folders has changed. Previously, if the `tiddlywiki` command was run against a wiki folder that didn't have the necessary `tiddlywiki.info` file then it would be automatically created. Now, the wiki folder must be initialised with the CreateWikiCommand.
|
||||
The handling of wiki folders has changed. Previously, if the `tiddlywiki` command was run against a wiki folder that didn't have the necessary `tiddlywiki.info` file then it would be automatically created. Now, the wiki folder must be initialised with the InitCommand.
|
||||
|
Loading…
Reference in New Issue
Block a user