|
|
@ -8,41 +8,8 @@ const pipeline = Promise.promisify(stream.pipeline) |
|
|
|
const klaw = require('klaw') |
|
|
|
const pageHelper = require('../../../helpers/page.js') |
|
|
|
|
|
|
|
const localeFolderRegex = /^([a-z]{2}(?:-[a-z]{2})?\/)?(.*)/i |
|
|
|
|
|
|
|
/* global WIKI */ |
|
|
|
|
|
|
|
const getContenType = (filePath) => { |
|
|
|
const ext = _.last(filePath.split('.')) |
|
|
|
switch (ext) { |
|
|
|
case 'md': |
|
|
|
return 'markdown' |
|
|
|
case 'html': |
|
|
|
return 'html' |
|
|
|
default: |
|
|
|
return false |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const getPagePath = (filePath) => { |
|
|
|
let fpath = filePath |
|
|
|
if (process.platform === 'win32') { |
|
|
|
fpath = filePath.replace(/\\/g, '/') |
|
|
|
} |
|
|
|
let meta = { |
|
|
|
locale: 'en', |
|
|
|
path: _.initial(fpath.split('.')).join('') |
|
|
|
} |
|
|
|
const result = localeFolderRegex.exec(meta.path) |
|
|
|
if (result[1]) { |
|
|
|
meta = { |
|
|
|
locale: result[1], |
|
|
|
path: result[2] |
|
|
|
} |
|
|
|
} |
|
|
|
return meta |
|
|
|
} |
|
|
|
|
|
|
|
module.exports = { |
|
|
|
git: null, |
|
|
|
repoPath: path.join(process.cwd(), 'data/repo'), |
|
|
@ -145,6 +112,8 @@ module.exports = { |
|
|
|
async sync() { |
|
|
|
const currentCommitLog = _.get(await this.git.log(['-n', '1', this.config.branch]), 'latest', {}) |
|
|
|
|
|
|
|
const rootUser = await WIKI.models.users.getRootUser() |
|
|
|
|
|
|
|
// Pull rebase
|
|
|
|
if (_.includes(['sync', 'pull'], this.mode)) { |
|
|
|
WIKI.logger.info(`(STORAGE/GIT) Performing pull rebase from origin on branch ${this.config.branch}...`) |
|
|
@ -167,7 +136,7 @@ module.exports = { |
|
|
|
|
|
|
|
const diff = await this.git.diffSummary(['-M', currentCommitLog.hash, latestCommitLog.hash]) |
|
|
|
if (_.get(diff, 'files', []).length > 0) { |
|
|
|
await this.processFiles(diff.files) |
|
|
|
await this.processFiles(diff.files, rootUser) |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
@ -176,13 +145,13 @@ module.exports = { |
|
|
|
* |
|
|
|
* @param {Array<String>} files Array of files to process |
|
|
|
*/ |
|
|
|
async processFiles(files) { |
|
|
|
async processFiles(files, user) { |
|
|
|
for (const item of files) { |
|
|
|
const contentType = getContenType(item.file) |
|
|
|
const contentType = pageHelper.getContentType(item.file) |
|
|
|
if (!contentType) { |
|
|
|
continue |
|
|
|
} |
|
|
|
const contentPath = getPagePath(item.file) |
|
|
|
const contentPath = pageHelper.getPagePath(item.file) |
|
|
|
|
|
|
|
let itemContents = '' |
|
|
|
try { |
|
|
@ -202,7 +171,7 @@ module.exports = { |
|
|
|
isPublished: _.get(pageData, 'isPublished', currentPage.isPublished), |
|
|
|
isPrivate: false, |
|
|
|
content: pageData.content, |
|
|
|
authorId: 1, |
|
|
|
user: user, |
|
|
|
skipStorage: true |
|
|
|
}) |
|
|
|
} else { |
|
|
@ -217,7 +186,7 @@ module.exports = { |
|
|
|
isPublished: _.get(pageData, 'isPublished', true), |
|
|
|
isPrivate: false, |
|
|
|
content: pageData.content, |
|
|
|
authorId: 1, |
|
|
|
user: user, |
|
|
|
editor: pageEditor, |
|
|
|
skipStorage: true |
|
|
|
}) |
|
|
@ -233,8 +202,7 @@ module.exports = { |
|
|
|
skipStorage: true |
|
|
|
}) |
|
|
|
} else { |
|
|
|
WIKI.logger.warn(`(STORAGE/GIT) Failed to open ${item.file}`) |
|
|
|
console.error(err) |
|
|
|
WIKI.logger.warn(`(STORAGE/GIT) Failed to process ${item.file}`) |
|
|
|
WIKI.logger.warn(err) |
|
|
|
} |
|
|
|
} |
|
|
@ -365,6 +333,9 @@ module.exports = { |
|
|
|
*/ |
|
|
|
async importAll() { |
|
|
|
WIKI.logger.info(`(STORAGE/GIT) Importing all content from local Git repo to the DB...`) |
|
|
|
|
|
|
|
const rootUser = await WIKI.models.users.getRootUser() |
|
|
|
|
|
|
|
await pipeline( |
|
|
|
klaw(this.repoPath, { |
|
|
|
filter: (f) => { |
|
|
@ -378,10 +349,11 @@ module.exports = { |
|
|
|
if (relPath && relPath.length > 3) { |
|
|
|
WIKI.logger.info(`(STORAGE/GIT) Processing ${relPath}...`) |
|
|
|
await this.processFiles([{ |
|
|
|
user: rootUser, |
|
|
|
file: relPath, |
|
|
|
deletions: 0, |
|
|
|
insertions: 0 |
|
|
|
}]) |
|
|
|
}], rootUser) |
|
|
|
} |
|
|
|
cb() |
|
|
|
} |
|
|
@ -391,6 +363,7 @@ module.exports = { |
|
|
|
}, |
|
|
|
async syncUntracked() { |
|
|
|
WIKI.logger.info(`(STORAGE/GIT) Adding all untracked content...`) |
|
|
|
|
|
|
|
await pipeline( |
|
|
|
WIKI.models.knex.column('path', 'localeCode', 'title', 'description', 'contentType', 'content', 'isPublished', 'updatedAt').select().from('pages').where({ |
|
|
|
isPrivate: false |
|
|
|