Markdown: Watch for file changes. Removed sitegen dependency for links.

This commit is contained in:
Abiola Ibrahim
2015-08-04 23:35:09 +01:00
parent 32da2ed706
commit 851026d3fa
8 changed files with 205 additions and 26 deletions

View File

@ -2,7 +2,11 @@ package markdown
import (
"bytes"
"crypto/sha1"
"encoding/hex"
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"sort"
@ -79,6 +83,15 @@ func (l *linkGen) generateLinks(md Markdown, cfg *Config) {
return
}
hash, err := computeDirHash(md, *cfg)
// same hash, return.
if err == nil && hash == cfg.linksHash {
return
} else if err != nil {
log.Println("Error:", err)
}
cfg.Links = []PageLink{}
cfg.Lock()
@ -138,6 +151,8 @@ func (l *linkGen) generateLinks(md Markdown, cfg *Config) {
// sort by newest date
sort.Sort(byDate(cfg.Links))
cfg.linksHash = hash
cfg.Unlock()
l.Lock()
@ -176,3 +191,25 @@ func GenerateLinks(md Markdown, cfg *Config) error {
g.discardWaiters()
return g.lastErr
}
// computeDirHash computes an hash on static directory of c.
func computeDirHash(md Markdown, c Config) (string, error) {
dir := filepath.Join(md.Root, c.PathScope)
if _, err := os.Stat(dir); err != nil {
return "", err
}
hashString := ""
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if !info.IsDir() && c.IsValidExt(filepath.Ext(path)) {
hashString += fmt.Sprintf("%v%v%v%v", info.ModTime(), info.Name(), info.Size(), path)
}
return nil
})
if err != nil {
return "", err
}
sum := sha1.Sum([]byte(hashString))
return hex.EncodeToString(sum[:]), nil
}