From e3bdeb4b1c65235eaa910e991ddf3e57ed7715f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Sko=C5=99epa?= <jakub@skorepa.info>
Date: Mon, 7 Mar 2016 22:46:19 +0100
Subject: [PATCH] Promisify tags

---
 index.js                     |  7 ++++--
 package.json                 | 12 +++++------
 sitegin/config.js            |  1 +
 sitegin/pipeline.js          |  2 +-
 sitegin/print.js             | 25 +++++++++++++++------
 sitegin/sitegin.js           |  1 +
 sitegin/{legacy => }/tags.js | 42 ++++++++++++++++++++----------------
 7 files changed, 57 insertions(+), 33 deletions(-)
 rename sitegin/{legacy => }/tags.js (78%)

diff --git a/index.js b/index.js
index b9c8a80e..0aebd5bd 100755
--- a/index.js
+++ b/index.js
@@ -1,7 +1,8 @@
 #!/usr/bin/env node
+var moment = require('moment');
 
 require('./sitegin/sitegin')({
-  watch: true
+  watch: false
 })
 .then(function onLoad(jobs) {
   var sass = require('node-sass');
@@ -11,6 +12,7 @@ require('./sitegin/sitegin')({
   var runAgain = false;
 
   function run() {
+    var startTime = moment();
     runAgain = false;
     if(isRunning) {
       console.log("Generator is still running. Queing another run after it finishes.")
@@ -23,11 +25,12 @@ require('./sitegin/sitegin')({
     jobs.run('pipeline',jobs)
     .then(function() {
       isRunning = false;
-      console.log("Generator finished")
+      console.log("Generator finished in",moment().diff(startTime,'seconds'),'seconds')
       if(runAgain) run();
     })
     .catch(function(e) {
       isRunning = false;
+      console.log("Generator crashed in",moment().diff(startTime,'seconds'),'seconds')
       if(runAgain) run();
       console.log(e.stack)
     });
diff --git a/package.json b/package.json
index fbfc3ce8..46762494 100644
--- a/package.json
+++ b/package.json
@@ -7,23 +7,23 @@
     "test": "./node_modules/istanbul/lib/cli.js cover ./node_modules/mocha/bin/_mocha -- sitegin/test/ --recursive -R spec -u exports -t 60000"
   },
   "author": "",
-  "license": "BSD",
+  "license": "UNSPECIFIED",
   "dependencies": {
     "browser-sync": "^2.11.1",
-    "chokidar": "^1.4.2",
+    "chokidar": "^1.4.3",
     "highlight.js": "^9.2.0",
     "jsesc": "^1.0.0",
     "marked": "^0.3.5",
     "mkdirp": "^0.5.1",
-    "moment": "^2.11.2",
+    "moment": "^2.12.0",
     "node-fs-extra": "^0.8.1",
     "node-sass": "^3.4.2",
-    "nodegit": "^0.11.1",
-    "nodegit-kit": "^0.8.0",
+    "nodegit": "^0.11.7",
+    "nodegit-kit": "^0.8.1",
     "nunjucks": "^2.3.0",
     "nunjucks-date-filter": "^0.1.1",
     "syntax-error": "^1.1.5",
-    "toml": "~2.3.0",
+    "toml": "^2.3.0",
     "toml-js": "0.0.8",
     "walk": "^2.3.9"
   },
diff --git a/sitegin/config.js b/sitegin/config.js
index 375432a5..613aede7 100644
--- a/sitegin/config.js
+++ b/sitegin/config.js
@@ -17,6 +17,7 @@ module.exports = function() {
       builddir: builddir,
       watch: watch,
       articlesLocation: 'content/articles',
+      linksPerPage: 6
     }
   })
 }
diff --git a/sitegin/pipeline.js b/sitegin/pipeline.js
index 02fd54ad..0f56cccd 100644
--- a/sitegin/pipeline.js
+++ b/sitegin/pipeline.js
@@ -3,5 +3,5 @@
  */
 
 module.exports = function(jobs) {
-  return jobs.runSequence('config','readFiles','parseHugo','gitInfo','markdown','print');
+  return jobs.runSequence('config','readFiles','parseHugo','gitInfo','markdown','tags','print');
 }
diff --git a/sitegin/print.js b/sitegin/print.js
index c7c44608..064cdb7e 100644
--- a/sitegin/print.js
+++ b/sitegin/print.js
@@ -1,11 +1,24 @@
 var util = require('util')
 
 module.exports = function(a) {
-  var pages = a.pages
-  var page0 = pages[0]
-  //page0.content = '...'
-  a.pages = [page0]
-  console.log(JSON.stringify(a,null,2))
-  a.pages = pages
+  var save = {};
+  var props = [];
+  var shortenProp = function(prop) {
+    if(a[prop]) {
+      save[prop] = a[prop]; a[prop] = [a[prop][0]];
+      props.push(prop);
+    }
+  }
+
+  shortenProp('pages')
+  shortenProp('tags')
+  shortenProp('redirects')
+
+  console.log(util.inspect(a,null,2))
+
+  props.forEach(function(prop){
+    a[prop] = save[prop];
+  });
+
   return Promise.resolve(a)
 }
diff --git a/sitegin/sitegin.js b/sitegin/sitegin.js
index 504a8b7b..c5680543 100644
--- a/sitegin/sitegin.js
+++ b/sitegin/sitegin.js
@@ -10,6 +10,7 @@ module.exports = function(config) {
     ['print', './print'],
     ['readFiles', './readFiles'],
     ['toURL', './toURL'],
+    ['tags', './tags'],
 
     ['pipeline','./pipeline']
   )
diff --git a/sitegin/legacy/tags.js b/sitegin/tags.js
similarity index 78%
rename from sitegin/legacy/tags.js
rename to sitegin/tags.js
index 22faaff2..2e6d6215 100644
--- a/sitegin/legacy/tags.js
+++ b/sitegin/tags.js
@@ -1,16 +1,21 @@
-var Page = require("./Page.js").Page;
 var moment = require('moment');
+var jobs = require('./jobs');
 
-module.exports = function() {
-  var tr = this;
-  tr.fancyname = "transformer tags";
-  tr.linksPerPage = 6;
-  tr.pre = function(cb, list) {
+var toURL = function(url) {
+  return jobs.run('toURL', url);
+}
+
+module.exports = function(obj) {
+  return new Promise(function(resolve, reject) {
     var tags = new Array();
     var tagPages = {};
-    list.forEach(function(article) {
+    obj.pages.forEach(function(article) {
       if(article.metadata.tags)
       article.metadata.tags.forEach(function(tag) {
+        tag = {
+          text: tag,
+          url: toURL(tag)
+        }
         if(tags.map(function(e) { return e.url; }).indexOf(tag.url) < 0)
           tags.push(tag)
         if(tagPages[tag.url] == undefined) tagPages[tag.url] = new Array();
@@ -18,12 +23,15 @@ module.exports = function() {
       })
     });
 
+    obj.tags = [];
+    obj.redirects = [];
+
     var generateTagPages = function(file, pageList) {
-      var p = new Page();
+      var p = {};
       p.type = "redirect";
       p.file = file;
       p.content = file+"/1";
-      list.addPage(p);
+      obj.redirects.push(p);
 
       pageList.sort(function (a, b) {
         var rhs = a.metadata.date.creation;
@@ -43,10 +51,10 @@ module.exports = function() {
           p++;
           if(tagPage !== undefined) {
             tagPage.metadata.nexturl = file+"/"+p;
-            list.addPage(tagPage);
+            obj.tags.push(tagPage);
             tagPageList.push(tagPage);
           }
-          tagPage = new Page();
+          tagPage = {metadata: {}};
           if(firstpage === undefined) firstpage = tagPage;
           lastpage = tagPage;
 
@@ -57,7 +65,7 @@ module.exports = function() {
           tagPage.metadata.prevurl = prevurl;
           tagPage.metadata.thispage = tagPage;
           tagPage.metadata.pagenumber = p;
-          
+
           tagPage.content = new Array();
           if(prevpage !== undefined)
             prevpage.metadata.nextpage = tagPage;
@@ -67,20 +75,18 @@ module.exports = function() {
         tagPage.content.push(page);
 
         c++;
-        c %= tr.linksPerPage;
+        c %= obj.config.linksPerPage;
       });
-      list.addPage(tagPage);
+      obj.tags.push(tagPage);
       tagPageList.push(tagPage);
       tagPageList.forEach(function(tagPage) {
         tagPage.metadata.lastpage = lastpage;
       });
     }
-    
 
     tags.forEach(function(tag) {
       generateTagPages("tag/"+tag.url, tagPages[tag.url])
     })
-    cb();
-  }
+    resolve(obj);
+  })
 }
-
-- 
GitLab