You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'use strict'
/* global wiki */
const Promise = require('bluebird') const fs = Promise.promisifyAll(require('fs-extra')) const klaw = require('klaw') const moment = require('moment') const path = require('path') const entryHelper = require('../helpers/entry')
module.exports = (job) => { return wiki.git.resync().then(() => { // -> Stream all documents
let cacheJobs = [] let jobCbStreamDocsResolve = null let jobCbStreamDocs = new Promise((resolve, reject) => { jobCbStreamDocsResolve = resolve })
klaw(wiki.REPOPATH).on('data', function (item) { if (path.extname(item.path) === '.md' && path.basename(item.path) !== 'README.md') { let entryPath = entryHelper.parsePath(entryHelper.getEntryPathFromFullPath(item.path)) let cachePath = entryHelper.getCachePath(entryPath)
// -> Purge outdated cache
cacheJobs.push( fs.statAsync(cachePath).then((st) => { return moment(st.mtime).isBefore(item.stats.mtime) ? 'expired' : 'active' }).catch((err) => { return (err.code !== 'EEXIST') ? err : 'new' }).then((fileStatus) => { // -> Delete expired cache file
if (fileStatus === 'expired') { return fs.unlinkAsync(cachePath).return(fileStatus) }
return fileStatus }).then((fileStatus) => { // -> Update cache and search index
if (fileStatus !== 'active') { return global.entries.updateCache(entryPath).then(entry => { process.send({ action: 'searchAdd', content: entry }) return true }) }
return true }) ) } }).on('end', () => { jobCbStreamDocsResolve(Promise.all(cacheJobs)) })
return jobCbStreamDocs }).then(() => { wiki.logger.info('Git remote repository sync: DONE') return true }) }
|