diff --git a/index.js b/index.js index e13a009f578cdc66de89fae01c18ca0e8c3b5666..8d611ecaf3d7fc43edba41db4e1ded40d0deb24f 100755 --- a/index.js +++ b/index.js @@ -7,8 +7,21 @@ require('./sitegin/sitegin')({ var sass = require('node-sass'); var fs = require('fs'); + var isRunning = false; + var runAgain = false; + function run() { - jobs.runSequence('config','readFiles','parseHugo','print') + runAgain = false; + if(isRunning) { + runAgain = true; + return; + } + isRunning = true; + jobs.run('pipeline',jobs) + .then(function() { + isRunning = false; + if(runAgain) run(); + }) .catch(e => console.log(e.stack)); } diff --git a/sitegin/gitInfo.js b/sitegin/gitInfo.js index bb0dc377cde042a26bb8fe8754956016518e21f2..076fce51bd1856db1d422c97d85eafef7b0d4fa6 100644 --- a/sitegin/gitInfo.js +++ b/sitegin/gitInfo.js @@ -1,4 +1,8 @@ -// Add git commit author and date to metadata +/* + * Add date: {creation, modification, modified} and author: {name, email} + * to metadata if not already present + */ + var nodegit = require('nodegit'); var git = require('nodegit-kit'); var path = require('path'); @@ -73,51 +77,38 @@ var getFilesHistory = function() { }); } -module.exports = function() { - var tr = this; - tr.fancyname = "transformer git"; - - tr.pre = function(cb, articleList) { - getFilesHistory() - .then((filesHistory) => { - var todo = articleList.length; - articleList.forEach(function(article) { - var file = path.relative(pathToRepo, article.origFile); - var commits = filesHistory[file]; - if(commits !== undefined) { - commits.sort(function(a,b){ - return b.date - a.date; - }); - var newestCommit = commits[0]; - var oldestCommit = commits[commits.length-1]; +module.exports = function(obj) { + return getFilesHistory() + .then((filesHistory) => { + obj.pages.forEach(function(article) { + var file = path.relative(pathToRepo, article.filename); + var commits = filesHistory[file]; + if(commits !== undefined) { + commits.sort(function(a,b){ + return b.date - a.date; + }); + var newestCommit = commits[0]; + var oldestCommit = commits[commits.length-1]; - if(article.metadata.date == undefined) - article.metadata.date = {}; + if(article.metadata.date == undefined) + article.metadata.date = {}; - if(article.metadata.date.creation == undefined) - article.metadata.date.creation = oldestCommit.date; + if(article.metadata.date.creation == undefined) + article.metadata.date.creation = oldestCommit.date; - article.metadata.date.modification = newestCommit.date; - article.metadata.date.modified = (newestCommit !== oldestCommit); + article.metadata.date.modification = newestCommit.date; + article.metadata.date.modified = (newestCommit !== oldestCommit); - if(article.metadata.author === undefined) - article.metadata.author = {} - if(article.metadata.author.name == undefined) - article.metadata.author.name = oldestCommit.author.name - if(article.metadata.author.email == undefined) - article.metadata.author.email = oldestCommit.author.email + if(article.metadata.author === undefined) + article.metadata.author = {} + if(article.metadata.author.name == undefined) + article.metadata.author.name = oldestCommit.author.name + if(article.metadata.author.email == undefined) + article.metadata.author.email = oldestCommit.author.email - article.commits = commits; - } - - todo--; - if(todo == 0) cb(); - }); - }) - .catch(function(err) {console.log(err.stack);}); - } - - tr.forEachPage = function(article, cb) { - cb(); - } + article.commits = commits; + } + }); + return obj; + }) } diff --git a/sitegin/parseHugo.js b/sitegin/parseHugo.js index e0cd9a94443c7772624c2f62a2ce1045af7c9993..7b53e1e7dd93e606494fea11c7624b87039a77fc 100644 --- a/sitegin/parseHugo.js +++ b/sitegin/parseHugo.js @@ -18,6 +18,7 @@ var readPageWorker = function(content, articleName) { } var obj = {}; obj.content = content.substring(fm_end+4); + obj.filename = articleName; try { obj.metadata = toml.parse(content.substring(0,fm_end-1)+"\n"); } catch(e) { diff --git a/sitegin/pipeline.js b/sitegin/pipeline.js new file mode 100644 index 0000000000000000000000000000000000000000..0137a6f39a405cfdd79c0c7d57f8924ed3a88deb --- /dev/null +++ b/sitegin/pipeline.js @@ -0,0 +1,7 @@ +/* + * This jobs just runs all job in the right order + */ + +module.exports = function(jobs) { + return jobs.runSequence('config','readFiles','parseHugo','gitInfo','print'); +} diff --git a/sitegin/sitegin.js b/sitegin/sitegin.js index 0991f4c0cc07f3611f65148d9e7eb3452dabd1e6..eb24ec66dea60c050e0324bf181001de28cfc41b 100644 --- a/sitegin/sitegin.js +++ b/sitegin/sitegin.js @@ -4,19 +4,12 @@ module.exports = function(config) { return jobs.registerMultiple( config, ['config', './config'], - ['readFiles', './readFiles'], + ['gitInfo', './gitInfo'], ['parseHugo', './parseHugo'], ['print', './print'], + ['readFiles', './readFiles'], - ['transformer-git', './transformer-git'], - ['output-console', './output-console'], - ['output-filesystem', './output-filesystem'], - ['transformer-basichtml', './transformer-basichtml'], - - ['transformer-markdown', './transformer-markdown'], - ['transformer-nunjucks', './transformer-nunjucks'], - ['transformer-urlizetags', './transformer-urlizetags'], - ['transformer-other', './transformer-other'] + ['pipeline','./pipeline'] ) .then(function() { return jobs;