purelog-storage-git
Version:
从git读取markdown文件,适用于Purelog
100 lines (86 loc) • 2.84 kB
JavaScript
/*
扫描指定文件夹下的所有博客文章,要求文章必需包含meta
*/
var _fs = require('fs-extra')
, _path = require('path')
, _purelog = null
, _options = null
, _localStorage = null
, _strformat = require('strformat')
, _package = require('./package.json');
//必需存在supportPurelog,以便校验合法性
exports.supportPurelog = true;
//插件类型为主题
exports.pluginType = 'storage';
//返回包信息
exports.package = {
version: _package.version,
name: _package.name,
description: _package.description
};
exports.register = function(purelog, options){
_purelog = purelog;
_options = options || {};
//引入并注册local插件
_localStorage = require('purelog-storage-local');
_localStorage.register(_purelog, _options);
}
/*
@summary 获取所有的文章
@param {Object} options - 配置参数
@param {Function} callback - 回调函数,callback(article);
*/
exports.fetch = function(callback, done){
var isPull = false;
var localPath = _path.join(_purelog.root, _options.content);
//检查git文件夹是否存在,如果存在,则检查是否包含有.git
if(_fs.existsSync(localPath)){
var gitPath = _path.join(localPath, '.git');
isPull = _fs.existsSync(localPath);
//相同文件夹已经存在,不处理。要不要删除?
if(!isPull){
console.log('文件夹%s已经存在,且不是合法的git仓库', localPath);
return done();
}
}
console.log('准备获取git数据,远程仓库:%s,本地存放至:%s', _options.url, localPath);
var cp = require('child_process');
var command;
if(isPull){
console.log('本地存在git仓库,执行pull');
command = _strformat('cd {0} && git pull', _options.content);
}else{
console.log('clone远程仓库至本地');
command = _strformat('git clone {0} {1}', _options.url, _options.content);
}
//执行命令
cp.exec(command, function(err, stdout, stderr){
if(err){
console.log(stderr);
return done();
}
//输出
console.log(stdout);
if(err){
console.log('获取git出现错误:%s', err);
}else{
console.log('分析markdown文件');
//扫描所有的md,重建索引
_localStorage.fetch(callback, done);
}
});
}
/*
保存一篇文章
@param {Object} article - 要保存的文章,应该是Article的实例
@returns {Boolean} 保存是否成功
*/
exports.save = function(article){
}
/*
@summary 基于key/value的数据存储,用于保存文章以外的数据
@param {String} key - 要读取数据的key
@param {* | null | undefined} value - 任意要存储的数据类型,如果没有提供或者为undefined,则返回数据;如果为null,则删除键,其它值则为设置数据
*/
exports.data = function(key, value){
}