From 84ce937cfca88900e086f81e766c9519c21cb63a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isabella=20Sko=C5=99epov=C3=A1?= <isabella@skorepova.info>
Date: Wed, 6 Nov 2019 18:50:49 +0100
Subject: [PATCH] Feature parity

---
 content/README.md                             |   6 +-
 .../2008/pracujeme-v-eagle-1cast-zaciname.md  |   2 +-
 .../articles/2008/provozni-aktiv-3-2008.md    |   2 +-
 .../2008/radiovy-orientacni-beh-liboc-2008.md |   2 +-
 ...vy-orientacni-beh-materske-centrum-2008.md |   2 +-
 .../articles/2008/svetelny-had-s-10-led.md    |   2 +-
 content/articles/2010/q-kody.md               |  10 +-
 .../radioklub-v-mlade-fronte-rijen-2013.md    |   2 +-
 .../2015/radioklub-ok1kvk-v-poradu-vikend.md  |   2 +-
 .../articles/2015/sk-petr-pohanka-ok1fkv.md   |   2 +-
 content/config.toml                           |   2 -
 index.js                                      |  13 +-
 reexport.js                                   |  45 ++++
 sitegin/gitInfo.js                            | 215 ------------------
 sitegin/parseHugo.js                          |   4 +-
 sitegin/pipeline.js                           |   1 -
 sitegin/sitegin.js                            |   1 -
 sitegin/tags.js                               |  10 +-
 theme/templates/article.html.nunj             |  13 +-
 theme/templates/partials/list.html.nunj       |   2 +-
 20 files changed, 82 insertions(+), 256 deletions(-)
 delete mode 100644 content/config.toml
 create mode 100644 reexport.js
 delete mode 100644 sitegin/gitInfo.js

diff --git a/content/README.md b/content/README.md
index 7cdd67ab..819f3f67 100644
--- a/content/README.md
+++ b/content/README.md
@@ -40,10 +40,8 @@ To je to mezi ```` ``` ```` a ```` ``` ```` ;)
  * image - titulní obrázek článku. Tento by měl být umístěn v static/images/leads/OBRAZEK.png,
     nebo ve složce článku. Preferujte png
  * tags - Seznam tagĹŻ
- * [author] - Počátek sekce pojednávající o autorovi, pokud chybí je vytvořena z git historie
-    * name - jméno autora
- * [date]
-     * creation - datum vytvoření
+ * author - jméno autora
+ * published - datum publikace, pokud chybí článek nebude vyvěšen
  * nodate=true - indikuje, že by se nemělo zobrazovat datum vytvoření
 
 ## StandartnĂ­ kategorie:
diff --git a/content/articles/2008/pracujeme-v-eagle-1cast-zaciname.md b/content/articles/2008/pracujeme-v-eagle-1cast-zaciname.md
index 385ea77e..57a3ea19 100644
--- a/content/articles/2008/pracujeme-v-eagle-1cast-zaciname.md
+++ b/content/articles/2008/pracujeme-v-eagle-1cast-zaciname.md
@@ -7,7 +7,7 @@ perex_e = "
 
 
 
-Každý správný radioamatér zajisté vyrábí plošné spoje častěji, než zalévá květiny na zahradě, a právě pro něj je určený program EAGLE z dílny CADsoft, pro tvorbu plošných spojů. Proč se v dnešní době "zdržovat" návrhem plošným spojů na papír a pracným ručním překreslováním, když je k dispozici software, který veškerou práci udělá za Vás a to velmi rychle a jednoduše. Do karet nám, radioamatérům, hraje i licence - freeware, který je ve verzi Light pro amatérské použití zdarma a může tak být volně používán!
+Každý správný radioamatér zajisté vyrábí plošné spoje častěji, než zalévá květiny na zahradě, a právě pro něj je určený program EAGLE z dílny CADsoft, pro tvorbu plošných spojů. Proč se v dnešní době \"zdržovat\" návrhem plošným spojů na papír a pracným ručním překreslováním, když je k dispozici software, který veškerou práci udělá za Vás a to velmi rychle a jednoduše. Do karet nám, radioamatérům, hraje i licence - freeware, který je ve verzi Light pro amatérské použití zdarma a může tak být volně používán!
  .
 "
 +++
diff --git a/content/articles/2008/provozni-aktiv-3-2008.md b/content/articles/2008/provozni-aktiv-3-2008.md
index 25b5110c..aa4dd6a0 100644
--- a/content/articles/2008/provozni-aktiv-3-2008.md
+++ b/content/articles/2008/provozni-aktiv-3-2008.md
@@ -3,7 +3,7 @@ title = "ProvoznĂ­ aktiv 3/2008"
 tags = ["Aktuality", "Stalo se", "Závody", "Rozbité články"]
 published = "2008-03-16T15:14:16.000Z"
 author = "Michal, OK1WMR"
-perex_e = " Po dobrodružném I. Subregionálu jsme se těšili "klidný" provozní aktiv na VKV. Počasí bylo, alespoň v sobotu, nádherné. Postavili jsme náš 14m vysoký stožár s 17el. M2. Během závodu jsme navázali 112 spojení a nejdelší bylo se stanicí G0KPW na vzdálenost 813 km a dosáhli tedy celkového počtu 32 471 bodů... . ."
+perex_e = " Po dobrodružném I. Subregionálu jsme se těšili \"klidný\" provozní aktiv na VKV. Počasí bylo, alespoň v sobotu, nádherné. Postavili jsme náš 14m vysoký stožár s 17el. M2. Během závodu jsme navázali 112 spojení a nejdelší bylo se stanicí G0KPW na vzdálenost 813 km a dosáhli tedy celkového počtu 32 471 bodů... . ."
 +++
 
 
diff --git a/content/articles/2008/radiovy-orientacni-beh-liboc-2008.md b/content/articles/2008/radiovy-orientacni-beh-liboc-2008.md
index 343b6609..45af1bbb 100644
--- a/content/articles/2008/radiovy-orientacni-beh-liboc-2008.md
+++ b/content/articles/2008/radiovy-orientacni-beh-liboc-2008.md
@@ -11,7 +11,7 @@ perex_e = "
 
 
 
-Náš radioklub uspořádal 9. 7. 2008 "hon na lišku" pro účastníky  letního tábora nedaleko obce Liboc.
+Náš radioklub uspořádal 9. 7. 2008 \"hon na lišku\" pro účastníky  letního tábora nedaleko obce Liboc.
 .
 
 .
diff --git a/content/articles/2008/radiovy-orientacni-beh-materske-centrum-2008.md b/content/articles/2008/radiovy-orientacni-beh-materske-centrum-2008.md
index 889a36bb..2bf5ec71 100644
--- a/content/articles/2008/radiovy-orientacni-beh-materske-centrum-2008.md
+++ b/content/articles/2008/radiovy-orientacni-beh-materske-centrum-2008.md
@@ -4,7 +4,7 @@ tags = ["Aktuality", "Stalo se", "Akce pro veřejnost", "Rozbité články"]
 published = "2008-08-14T05:32:13.000Z"
 author = "Michal, OK1WMR"
 perex_e = "
-Náš radioklub uspořádal 21. 7. 2008 "hon na lišku" pro účastníky  příměstského tábora pořádaného Mateřským centrem v Karlových Varech
+Náš radioklub uspořádal 21. 7. 2008 \"hon na lišku\" pro účastníky  příměstského tábora pořádaného Mateřským centrem v Karlových Varech
 .
 
 .
diff --git a/content/articles/2008/svetelny-had-s-10-led.md b/content/articles/2008/svetelny-had-s-10-led.md
index b2b292a5..5897be71 100644
--- a/content/articles/2008/svetelny-had-s-10-led.md
+++ b/content/articles/2008/svetelny-had-s-10-led.md
@@ -4,7 +4,7 @@ tags = ["Články", "Konstrukce", "Konstrukce pro začátečníky", "Rozbité č
 published = "2008-11-27T17:27:50.000Z"
 author = "Michal, OK1WMR"
 image = "02.jpg"
-perex_e = "Jednoduchý světelný had s možností regulace rychlosti "běhu"
+perex_e = "Jednoduchý světelný had s možností regulace rychlosti \"běhu\"
 světla. Kde rychlost udává známý časovač 555, který je napojen do obvodu 4017,
 známého také jako Johnsonův čítač/dělič. Na jeho výstupy jsou napojeny LED.
 Hodnota C1 je 1uF. Na plošném spoji jsou LED v jednoduché řadě, ale diody by
diff --git a/content/articles/2010/q-kody.md b/content/articles/2010/q-kody.md
index 3967bcad..a0f7fb02 100644
--- a/content/articles/2010/q-kody.md
+++ b/content/articles/2010/q-kody.md
@@ -7,7 +7,7 @@ perex_e = "Od počátků radiového provozu, který tehdy využíval výhradně
 telegrafní signály, měli operátoři snahu zrychlit vysílání použitím
 zkratek pro některé často se opakující ustálené fráze. Tak vzniklo
 několik soustav kódů, nejznámější je tzv. Q-kód charakterisovaný
-skupinou tří písmen, z nichž první je "Q".
+skupinou tří písmen, z nichž první je \"Q\".
 Q-kód je univerzální a používá ho většina služeb. Některé služby si
 vyvinuly vlastní kódy, např. N-kód, Z-kód, které lépe odpovídají jejich
 potřebám.
@@ -177,8 +177,8 @@ Zpráva všem radioamatérům.
 
 
 QSV
-Vyšlete sérii "VVV"(na kmitočtu ...... kHz).
-Mám vyslat sérii "VVV"(na kmitočtu ...... kHz)?
+Vyšlete sérii \"VVV\"(na kmitočtu ...... kHz).
+Mám vyslat sérii \"VVV\"(na kmitočtu ...... kHz)?
 
 
 QSX
@@ -218,8 +218,8 @@ Mám se naladit přesně na váš kmitočet?
 
 
 Otázku vytváříme doplněním otazníku za kód, např. QTH?.
-V radioamatérské praxi se vžilo i používání přeneseného (zobecněného) výzanamu Q-kódů, např. QSO znamená obecněji "radioamatérské spojení", QTH ""umístění stanice", QRO "velký výkon", a řekne-li někdo ve fonickém spojení, že jde "do
-kvéerelu", nejde o nic hrozného (krom jazykové stránky), mluvčí tak chce
+V radioamatérské praxi se vžilo i používání přeneseného (zobecněného) výzanamu Q-kódů, např. QSO znamená obecněji \"radioamatérské spojení\", QTH \"\"umístění stanice\", QRO \"velký výkon\", a řekne-li někdo ve fonickém spojení, že jde \"do
+kvéerelu\", nejde o nic hrozného (krom jazykové stránky), mluvčí tak chce
  vyjádřit, že jde do zaměstnání.
 Zdroj - ÄŚRK
 VĂ­ce zde"
diff --git a/content/articles/2013/radioklub-v-mlade-fronte-rijen-2013.md b/content/articles/2013/radioklub-v-mlade-fronte-rijen-2013.md
index 873cdcfe..dc98e302 100644
--- a/content/articles/2013/radioklub-v-mlade-fronte-rijen-2013.md
+++ b/content/articles/2013/radioklub-v-mlade-fronte-rijen-2013.md
@@ -3,7 +3,7 @@ title = "Radioklub v Mladé Frontě - říjen 2013"
 tags = ["Aktuality", "Stalo se", "Napsali o nás", "Rozbité články"]
 published = "2013-11-15T19:23:09.000Z"
 author = "MĂ­ra, OK7KM"
-perex_e = "V deníku Mladá Fronta vyšel dne 21. 10. 2013 článek s názvem Mladý modelář nebo mechanik, to jsou v kraji "ohrožené druhy". Autor článku  udělal rozhovor také s vedoucím našeho kroužku. Celý článek si můžete přečíst uvnitř naší krátké zprávy.. A Celuto
+perex_e = "V deníku Mladá Fronta vyšel dne 21. 10. 2013 článek s názvem Mladý modelář nebo mechanik, to jsou v kraji \"ohrožené druhy\". Autor článku  udělal rozhovor také s vedoucím našeho kroužku. Celý článek si můžete přečíst uvnitř naší krátké zprávy.. A Celuto
 
 
 
diff --git a/content/articles/2015/radioklub-ok1kvk-v-poradu-vikend.md b/content/articles/2015/radioklub-ok1kvk-v-poradu-vikend.md
index 2a360f38..4141bd34 100644
--- a/content/articles/2015/radioklub-ok1kvk-v-poradu-vikend.md
+++ b/content/articles/2015/radioklub-ok1kvk-v-poradu-vikend.md
@@ -4,7 +4,7 @@ tags = ["Aktuality", "Stalo se", "Napsali o nás"]
 published = "2015-12-10T19:44:10.000Z"
 author = "MĂ­ra, OK7KM"
 image = "vikend.png"
-perex_e = "V úterý, 8. prosince 2015 byl odvysílán další díl pořadu Víkend na TV Nova, na téma "S hlavou v oblacích". Radioklub a jeho pracoviště na Blatenském vrchu jste mohli vidět během jedné z reportáží. Záznam najdete v našem článku."
+perex_e = "V úterý, 8. prosince 2015 byl odvysílán další díl pořadu Víkend na TV Nova, na téma \"S hlavou v oblacích\". Radioklub a jeho pracoviště na Blatenském vrchu jste mohli vidět během jedné z reportáží. Záznam najdete v našem článku."
 +++
 
 
diff --git a/content/articles/2015/sk-petr-pohanka-ok1fkv.md b/content/articles/2015/sk-petr-pohanka-ok1fkv.md
index abe6b7a6..d5a4f759 100644
--- a/content/articles/2015/sk-petr-pohanka-ok1fkv.md
+++ b/content/articles/2015/sk-petr-pohanka-ok1fkv.md
@@ -5,7 +5,7 @@ published = "2015-05-20T15:51:21.000Z"
 author = "Jirka, OK1UBO"
 perex_e = "
 Krátce po svých osmdesátinách, dne 20. 4. 2015, zemřel dlouholetý člen našeho radioklubu Petr Pohanka, narozen 11. 3. 1935, ex OK1FKV, ex DIG 4865, člen Veterán Rádio Klubu a klubu přátel telegrafie, držitel DIG Trophy a CW Plakette. Petr se od mládí věnoval fotografii, ke které přičichl už během studia na Vyšší zdravotní škole, kde v roce 1953 absolvoval obor rentgenový laborant, jehož součástí byl i kurs lékařské fotografie. Současně jej ale zajímala i výtvarná fotografie.
-Ve druhé polovině 50. let založil a vedl fotokroužek při domě kultury v Chomutově, v roce 1957 se stal členem krajského fotoklubu v Teplicích a absolvoval dvouletý kurs výtvarné fotografie u prof. Jána Šmoka. V roce 1960 se stal členem Svazu českých fotografů a v následujícím desetiletí se podílel na řadě výstav doma i v zahraničí. Konec slibně se rozvíjející fotografické kariéry nastal v roce 1972, kdy Petr Pohanka neprozřetelně vystavil "nevhodnou" fotografii z oslav 1. máje a byl "odměněn" zákazem publikování, a když pak při stěhování do Říčan nešťastně přišel o stovky negativů, na fotografování zanevřel a začal se věnovat radioamatérství.
+Ve druhé polovině 50. let založil a vedl fotokroužek při domě kultury v Chomutově, v roce 1957 se stal členem krajského fotoklubu v Teplicích a absolvoval dvouletý kurs výtvarné fotografie u prof. Jána Šmoka. V roce 1960 se stal členem Svazu českých fotografů a v následujícím desetiletí se podílel na řadě výstav doma i v zahraničí. Konec slibně se rozvíjející fotografické kariéry nastal v roce 1972, kdy Petr Pohanka neprozřetelně vystavil \"nevhodnou\" fotografii z oslav 1. máje a byl \"odměněn\" zákazem publikování, a když pak při stěhování do Říčan nešťastně přišel o stovky negativů, na fotografování zanevřel a začal se věnovat radioamatérství.
 
 "
 +++
diff --git a/content/config.toml b/content/config.toml
deleted file mode 100644
index 6c11e204..00000000
--- a/content/config.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-[git]
-mergeMessage=["See merge request ","(Autoexportováno z Joomly)","(Autoexportován z Joomly)","[publish]"]
diff --git a/index.js b/index.js
index 732d8be9..4affb442 100755
--- a/index.js
+++ b/index.js
@@ -16,7 +16,7 @@ cli.main(function(args, options) {
     })
 })
 
-var sitegin = function(config) {
+function sitegin(config) {
   const options = config.options
   require('./sitegin/sitegin')({
     watch: !options.noserver && !options.nowatch,
@@ -131,7 +131,7 @@ var sitegin = function(config) {
     })
 }
 
-var copyStaticFiles = function(builddir, staticdir, themedir) {
+function copyStaticFiles(builddir, staticdir, themedir) {
   // STATIC FILES
   const fsextra = require('node-fs-extra')
   fsextra.copy(
@@ -159,15 +159,18 @@ var copyStaticFiles = function(builddir, staticdir, themedir) {
   )
 }
 
-var rendersass = function(builddir, themedir) {
+function rendersass(builddir, themedir) {
   // SASS
   const sass = require('node-sass')
-  const fs = require('filendir')
+  const fs = require('fs')
+  const mkdirp = require('mkdirp')
 
   sass.render({ file: `${themedir}/sass/style.scss` }, function(err, result) {
     if (err === null) {
       console.log('compiled sass')
-      fs.writeFile(`${builddir}/theme/style.css`, result.css)
+      mkdirp(`${builddir}/theme`, () => {
+        fs.writeFile(`${builddir}/theme/style.css`, result.css, () => {})
+      })
     } else console.log('error ', err)
   })
 }
diff --git a/reexport.js b/reexport.js
new file mode 100644
index 00000000..83e26c4e
--- /dev/null
+++ b/reexport.js
@@ -0,0 +1,45 @@
+const fs = require('fs')
+const data = require('../ok1kvk.cz/data.json')
+
+function tomlPrimitive(obj) {
+  if (Array.isArray(obj)) return `[${obj.map(tomlPrimitive).join(', ')}]`
+  if (typeof obj === 'string') {
+    return `"${obj.replace(/"/g, '\\"')}"`
+  }
+  if (typeof obj === 'boolean') return `${obj}`
+  throw new Error(`Unknown ${JSON.stringify(obj)}`)
+}
+
+function tomlObject(obj) {
+  let ret = ''
+  for (const [key, value] of Object.entries(obj)) {
+    if (value === null || value === undefined) continue
+    ret += `${key} = ${tomlPrimitive(value)}\n`
+  }
+  return ret
+}
+
+function authorRewrite(author) {
+  if (author === 'Jakub Skořepa') return 'Isabella Skořepová'
+  if (author === 'Michal Rybka') return 'Michal, OK1WMR'
+  if (author === 'Mira, OK7KM') return 'MĂ­ra, OK7KM'
+  return author
+}
+
+for (const page of data.pages) {
+  const tags = page.metadata.tags.filter(
+    t => t.text !== 'Všechny články a aktuality',
+  )
+  const text = `+++\n${tomlObject({
+    title: page.metadata.title,
+    tags: tags.length > 0 ? tags.map(t => t.text) : null,
+    nodate: page.metadata.nodate,
+    notarticle: page.metadata.notarticle,
+    published: page.metadata.date.creation,
+    author: authorRewrite(page.metadata.author.name),
+    image: page.metadata.image,
+    perex: page.metadata.perex,
+    perex_e: page.metadata.perex_e,
+  })}+++\n\n${page.content}`
+  fs.writeFileSync(page.filename, text, 'utf-8')
+}
diff --git a/sitegin/gitInfo.js b/sitegin/gitInfo.js
deleted file mode 100644
index 2a448fa0..00000000
--- a/sitegin/gitInfo.js
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Add date: {creation, modification, modified} and author: {name, email}
- * to metadata if not already present
- */
-
-const nodegit = require('nodegit')
-const path = require('path')
-const moment = require('moment')
-
-// Returns promise for patch of single commit
-const gitShow = (repo, commitData) => {
-  let commit
-  let tree
-  let parentTree
-  return nodegit.Revparse.single(repo, commitData.commit)
-    .then(obj => nodegit.Commit.lookup(repo, obj.id()))
-    .then(_commit => {
-      commit = _commit
-      if (commit.parentcount() < 1) return null
-      return commit.getParents(1)
-    })
-    .then(parents => {
-      if (parents === null) return null
-      return parents[0].getTree()
-    })
-    .then(_parentTree => {
-      parentTree = _parentTree
-      return commit.getTree()
-    })
-    .then(_tree => {
-      tree = _tree
-      return nodegit.Diff.treeToTree(repo, parentTree, tree, null)
-    })
-    .then(diff => diff.patches())
-    .then(patches => [patches, commitData])
-}
-
-const gitlog = repo => {
-  const map = () =>
-    Promise.resolve().then(() => commit => {
-      const author = commit.author()
-      const sha = commit.sha()
-
-      return {
-        commit: sha,
-        author: {
-          name: author.name(),
-          email: author.email(),
-        },
-        date: commit.date(),
-        message: commit.message(),
-      }
-    })
-
-  return repo.getHeadCommit().then(commit =>
-    new Promise((resolve, reject) => {
-      commit
-        .history()
-        .on('end', resolve)
-        .on('error', reject)
-        .start()
-    }).then(commits => map().then(log => commits.map(log))),
-  )
-}
-
-const getFilesHistory = (repo, _startCommitMessage) => {
-  let startCommitMessage = _startCommitMessage
-  if (!Array.isArray(startCommitMessage) && startCommitMessage !== undefined) {
-    startCommitMessage = [startCommitMessage]
-  }
-  return Promise.resolve()
-    .then(() => gitlog(repo))
-    .then(log => {
-      const promises = []
-      for (let i = 0; i < log.length; i += 1) {
-        promises.push(gitShow(repo, log[i]))
-      }
-      return Promise.all(promises)
-    })
-    .then(diffs => {
-      const filehistory = {}
-      diffs.forEach(data => {
-        const commit = data[1]
-        const diff = data[0]
-
-        diff.forEach(entry => {
-          const p = path.normalize(entry.newFile().path())
-          if (filehistory[p] === undefined) {
-            filehistory[p] = []
-          }
-          filehistory[p].push(commit)
-        })
-      })
-      return filehistory
-    })
-    .then(log => {
-      const sorter = (a, b) => {
-        const rhs = a.date
-        const lhs = b.date
-        return lhs > rhs ? 1 : lhs < rhs ? -1 : 0
-      }
-      for (const file of Object.keys(log)) {
-        log[file].sort(sorter)
-      }
-      return log
-    })
-    .then(log => {
-      if (startCommitMessage === undefined) return log
-      function mergeCommit(commits) {
-        let r
-        commits.reverse()
-        commits.forEach(commit => {
-          if (r === undefined)
-            startCommitMessage.forEach(matcher => {
-              if (commit.message.indexOf(matcher) > -1) r = commit
-            })
-        })
-        commits.reverse()
-        return r
-      }
-      for (const file of Object.keys(log)) {
-        // eslint-disable-next-line no-param-reassign
-        log[file].mergeCommit = mergeCommit(log[file])
-      }
-      return log
-    })
-}
-
-module.exports = obj => {
-  console.log('Build step: GitInfo')
-  const pathToRepo = path.resolve(obj.config.sourceDir)
-  return new Promise((resolve, reject) =>
-    nodegit.Repository.open(pathToRepo)
-      .catch(() => {
-        resolve(obj)
-      })
-      .then(repo => getFilesHistory(repo, obj.config.git.mergeMessage))
-      .then(hist => {
-        if (obj.config.options.debugarticle !== null) {
-          const log = hist[obj.config.options.debugarticle]
-          log.forEach(commit => {
-            console.log(
-              `   ${commit.date} ${
-                commit.author.email
-              }\t${commit.message.replace(/\n([^]*)$/, '')}`,
-            )
-          })
-          console.log()
-          console.log(
-            `   Starting commit: ${log.mergeCommit.message.replace(
-              /\n([^]*)$/,
-              '',
-            )}`,
-          )
-        }
-        return hist
-      })
-      .then(filesHistory => {
-        obj.pages.forEach(article => {
-          const file = path.relative(pathToRepo, article.filename)
-          const commits = filesHistory[file]
-          if (commits !== undefined) {
-            commits.sort((a, b) => b.date - a.date)
-            const newestCommit = commits[0]
-            const oldestCommit = commits[commits.length - 1]
-            const { mergeCommit } = commits
-
-            // eslint-disable-next-line no-param-reassign
-            if (article.metadata.date === undefined) article.metadata.date = {}
-
-            if (article.metadata.date.creation === undefined) {
-              if (mergeCommit === undefined) {
-                console.log(
-                  `[Warning] Article ${file} does not have merge commit.`,
-                )
-                // eslint-disable-next-line no-param-reassign
-                article.metadata.date.creation = moment()
-              } else {
-                // eslint-disable-next-line no-param-reassign
-                article.metadata.date.creation = mergeCommit.date
-              }
-            }
-
-            // eslint-disable-next-line no-param-reassign
-            article.metadata.date.modification = newestCommit.date
-
-            if (article.metadata.author === undefined) {
-              // eslint-disable-next-line no-param-reassign
-              article.metadata.author = {}
-            }
-            if (article.metadata.author.name === undefined) {
-              // eslint-disable-next-line no-param-reassign
-              article.metadata.author.name = oldestCommit.author.name
-            }
-            if (article.metadata.author.email === undefined) {
-              // eslint-disable-next-line no-param-reassign
-              article.metadata.author.email = oldestCommit.author.email
-            }
-
-            // eslint-disable-next-line no-param-reassign
-            article.commits = commits
-          } else {
-            console.log(`[Warning] Article ${file} is not in git repository.`)
-          }
-        })
-        return obj
-      })
-      .then(o => {
-        resolve(o)
-      })
-      .catch(e => {
-        reject(e)
-      }),
-  )
-}
diff --git a/sitegin/parseHugo.js b/sitegin/parseHugo.js
index 7daaf1ac..a7163744 100644
--- a/sitegin/parseHugo.js
+++ b/sitegin/parseHugo.js
@@ -26,9 +26,9 @@ const readPageWorker = (content_, obj) => {
     console.log(`${obj.filename}: Failed to parse metadata`)
     throw e
   }
-  if (obj.metadata.date && obj.metadata.date.creation) {
+  if (obj.metadata.published && obj.metadata.published) {
     // eslint-disable-next-line no-param-reassign
-    obj.metadata.date.creation = moment(obj.metadata.date.creation)
+    obj.metadata.published = moment(obj.metadata.published)
   }
   return obj
 }
diff --git a/sitegin/pipeline.js b/sitegin/pipeline.js
index bba73752..c2aee352 100644
--- a/sitegin/pipeline.js
+++ b/sitegin/pipeline.js
@@ -9,7 +9,6 @@ module.exports = jobs =>
     'readFiles',
     'parseHugo',
     'parseRedirects',
-    'gitInfo',
     'markdown',
     'urls',
     'sitemap',
diff --git a/sitegin/sitegin.js b/sitegin/sitegin.js
index 0b894de3..9da4666c 100644
--- a/sitegin/sitegin.js
+++ b/sitegin/sitegin.js
@@ -5,7 +5,6 @@ module.exports = config =>
     .registerMultiple(
       config,
       ['config', './config'],
-      ['gitInfo', './gitInfo'],
       ['markdown', './markdown'],
       ['parseHugo', './parseHugo'],
       ['print', './print'],
diff --git a/sitegin/tags.js b/sitegin/tags.js
index 91ca9274..d8bcc089 100644
--- a/sitegin/tags.js
+++ b/sitegin/tags.js
@@ -54,10 +54,12 @@ module.exports = function tagsJob(obj) {
       obj.redirects.push(pg)
 
       pageList.sort((a, b) => {
-        if (a.metadata.date === undefined) return -1
-        if (b.metadata.date === undefined) return 1
-        const rhs = a.metadata.date.creation
-        const lhs = b.metadata.date.creation
+        if (a.metadata.published === b.metadata.published) return 0
+        if (a.metadata.published === undefined) return -1
+        if (b.metadata.published === undefined) return 1
+        const rhs = a.metadata.published
+        const lhs = b.metadata.published
+
         return lhs > rhs ? 1 : lhs < rhs ? -1 : 0
       })
       let c = 0
diff --git a/theme/templates/article.html.nunj b/theme/templates/article.html.nunj
index 50967b8f..3a330ea7 100644
--- a/theme/templates/article.html.nunj
+++ b/theme/templates/article.html.nunj
@@ -3,7 +3,7 @@
 {% block head %}
 
   <meta property="og:type" content="article" />
-  <meta property="article:published_time" content="{{ metadata.date.creation | date }}" />
+  <meta property="article:published_time" content="{{ metadata.published | date }}" />
   {% if metadata.image %} <meta property="og:image" content="{{ metadata.image | absURL( canonicalURL ) }}" /> {% endif %}
   <meta property="og:description" content="{% if metadata.perex %}{{metadata.perex}}{% else %}{% if metadata.perex_e %}{{metadata.perex_e | truncate}}{% else %}{% if content %}{{ content | striptags | truncate }}{% endif %}{% endif %}{% endif %}" />
 
@@ -43,15 +43,12 @@
       <h2 id="title">{{ metadata.title }}</h2>
       {% if not metadata.nodate %}
         <a class="author" style="color: #a2a2a2; display: block" class="black-text" target="_blank" href="https://git.ok1kvk.cz/ok1kvk.cz/content/tree/master/articles/{{file | replace("clanek/","") | replace(r/\/$/, "")}}.md">
-          {% if metadata.date %}
-            <span style="color: #626262">{{ metadata.date.creation | date("D. M. YYYY") }}</span>
+          {% if metadata.published %}
+            <span style="color: #626262">{{ metadata.published | date("D. M. YYYY") }}</span>
             napsal
-            <span style="color: #626262">{{ metadata.author.name }}</span>
-            {% if (metadata.date.modification | date("D. M. YYYY")) != (metadata.date.creation | date("D. M. YYYY")) %}
-              naposledy upraveno <span style="color: #626262">{{ metadata.date.modification | date("D. M. YYYY") }}</span>
-            {% endif %}
+            <span style="color: #626262">{{ metadata.author }}</span>
           {% else %}
-            Článek není v gitu
+            Článek nebyl publikován
           {% endif %}
         </a>
       {% endif %}
diff --git a/theme/templates/partials/list.html.nunj b/theme/templates/partials/list.html.nunj
index 8832bad3..7d6248a8 100644
--- a/theme/templates/partials/list.html.nunj
+++ b/theme/templates/partials/list.html.nunj
@@ -39,7 +39,7 @@
               </div>
               <div class="clear"></div>
               <div style="padding: 10px;" class="head-info">
-                <span style="color: #a2a2a2; text-align: left;display: inline-block;width: 75%;">{{ page.metadata.date.creation | date("D. M. YYYY") }} napsal {{ page.metadata.author.name }}</span><!--
+                <span style="color: #a2a2a2; text-align: left;display: inline-block;width: 75%;">{{ page.metadata.published | date("D. M. YYYY") }} napsal {{ page.metadata.author.name }}</span><!--
                 --><a style="text-align: right;display: inline-block;width: 25%;" href="{{ config.baseurl }}/{{ page.file }}">Číst&nbsp;dál</a>
               </div>
             </div>
-- 
GitLab