Browse Source

update build to handle new articles

Gregg Tavares 6 years ago
parent
commit
8b01462c99
1 changed files with 19 additions and 16 deletions
  1. 19 16
      build/js/build.js

+ 19 - 16
build/js/build.js

@@ -1,12 +1,10 @@
-/*eslint-env node*/
-/*eslint no-console: 0*/
-
+/* global module require */
 'use strict';
 
 module.exports = function() { // wrapper in case we're in module_context mode
 
 const cache      = new (require('inmemfilecache'))();
-const Feed       = require('feed');
+const Feed       = require('feed').Feed;
 const fs         = require('fs');
 const glob       = require('glob');
 const Handlebars = require('handlebars');
@@ -55,7 +53,7 @@ function writeFileIfChanged(fileName, content) {
     }
   }
   fs.writeFileSync(fileName, content);
-  console.log('Wrote: ' + fileName);
+  console.log("Wrote: " + fileName);  // eslint-disable-line
 }
 
 function copyFile(src, dst) {
@@ -318,7 +316,7 @@ const Builder = function(outBaseDir, options) {
   };
 
   const applyTemplateToFile = function(templatePath, contentFileName, outFileName, opt_extra) {
-    console.log('processing: ', contentFileName);
+    console.log('processing: ', contentFileName);  // eslint-disable-line
     opt_extra = opt_extra || {};
     const data = loadMD(contentFileName);
     const metaData = applyTemplateToContent(templatePath, contentFileName, outFileName, opt_extra, data);
@@ -372,7 +370,7 @@ const Builder = function(outBaseDir, options) {
   };
 
   this.process = function(options) {
-    console.log('Processing Lang: ' + options.lang);
+    console.log('Processing Lang: ' + options.lang);  // eslint-disable-line
     options.lessons     = options.lessons     || ('threejs/lessons/' + options.lang);
     options.toc         = options.toc         || ('threejs/lessons/' + options.lang + '/toc.html');
     options.template    = options.template    || 'build/templates/lesson.template';
@@ -396,7 +394,7 @@ const Builder = function(outBaseDir, options) {
         origLink: '/' + slashify(path.join(g_origPath, baseName + '.html')),
         toc: options.toc,
       };
-      console.log('  generating missing:', outFileName);
+      console.log('  generating missing:', outFileName);  // eslint-disable-line
       applyTemplateToContent(
           'build/templates/missing.template',
           path.join(options.lessons, 'langinfo.hanson'),
@@ -405,14 +403,19 @@ const Builder = function(outBaseDir, options) {
           data);
     });
 
-    function utcMomentFromGitLog(result) {
+    function utcMomentFromGitLog(result, filename, timeType) {
       const dateStr = result.stdout.split('\n')[0].trim();
       const utcDateStr = dateStr
         .replace(/"/g, '')   // WTF to these quotes come from!??!
         .replace(' ', 'T')
         .replace(' ', '')
         .replace(/(\d\d)$/, ':$1');
-      return moment.utc(utcDateStr);
+      const m = moment.utc(utcDateStr);
+      if (m.isValid()) {
+        return m;
+      }
+      const stat = fs.statSync(filename);
+      return moment(stat[timeType]);
     }
 
     const tasks = g_articles.map((article) => {
@@ -424,7 +427,7 @@ const Builder = function(outBaseDir, options) {
           '--diff-filter=A',
           article.src_file_name,
         ]).then((result) => {
-          article.dateAdded = utcMomentFromGitLog(result);
+          article.dateAdded = utcMomentFromGitLog(result, article.src_file_name, 'ctime');
         });
       };
     }).concat(g_articles.map((article) => {
@@ -436,7 +439,7 @@ const Builder = function(outBaseDir, options) {
            '--max-count=1',
            article.src_file_name,
          ]).then((result) => {
-           article.dateModified = utcMomentFromGitLog(result);
+           article.dateModified = utcMomentFromGitLog(result, article.src_file_name, 'mtime');
          });
        };
     }));
@@ -488,7 +491,7 @@ const Builder = function(outBaseDir, options) {
 
       try {
         const outPath = path.join(g_outBaseDir, options.lessons, 'atom.xml');
-        console.log('write:', outPath);
+        console.log('write:', outPath);  // eslint-disable-line
         writeFileIfChanged(outPath, feed.atom1());
       } catch (err) {
         return Promise.reject(err);
@@ -503,10 +506,10 @@ const Builder = function(outBaseDir, options) {
       });
       return Promise.resolve();
     }, function(err) {
-      console.error('ERROR!:');
-      console.error(err);
+      console.error('ERROR!:');  // eslint-disable-line
+      console.error(err);  // eslint-disable-line
       if (err.stack) {
-        console.error(err.stack);
+        console.error(err.stack);  // eslint-disable-line
       }
       throw new Error(err.toString());
     });