mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-30 05:19:57 +00:00
parent
b0394f1560
commit
f3930ad69c
@ -1456,6 +1456,7 @@ $tw.boot.startup = function(options) {
|
|||||||
pluginsPath: "../plugins/",
|
pluginsPath: "../plugins/",
|
||||||
themesPath: "../themes/",
|
themesPath: "../themes/",
|
||||||
languagesPath: "../languages/",
|
languagesPath: "../languages/",
|
||||||
|
editionsPath: "../editions/",
|
||||||
wikiInfo: "./tiddlywiki.info",
|
wikiInfo: "./tiddlywiki.info",
|
||||||
wikiPluginsSubDir: "./plugins",
|
wikiPluginsSubDir: "./plugins",
|
||||||
wikiThemesSubDir: "./themes",
|
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
|
created: 20140223183404938
|
||||||
modified: 20140223192031783
|
modified: 20140223195514667
|
||||||
tags: howto
|
tags: howto
|
||||||
title: Notes for upgrading to 5.0.8-beta
|
title: Notes for upgrading to 5.0.8-beta
|
||||||
type: text/vnd.tiddlywiki
|
type: text/vnd.tiddlywiki
|
||||||
@ -54,4 +54,4 @@ And a paragraph of text.
|
|||||||
|
|
||||||
! Changed commands for [[TiddlyWiki on Node.js]]
|
! 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