summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ciigo.go2
-rw-r--r--converter.go51
-rw-r--r--file_markup.go12
3 files changed, 42 insertions, 23 deletions
diff --git a/ciigo.go b/ciigo.go
index 033f74f..d9b467e 100644
--- a/ciigo.go
+++ b/ciigo.go
@@ -66,7 +66,7 @@ func Convert(opts *ConvertOptions) (err error) {
return fmt.Errorf(`%s: %w`, logp, err)
}
- converter.convertFileMarkups(fileMarkups, true)
+ converter.convertFileMarkups(fileMarkups, false)
return nil
}
diff --git a/converter.go b/converter.go
index 316bfc5..2350b5d 100644
--- a/converter.go
+++ b/converter.go
@@ -9,6 +9,7 @@ import (
"log"
"os"
"path/filepath"
+ "time"
"git.sr.ht/~shulhan/asciidoctor-go"
"github.com/yuin/goldmark"
@@ -18,8 +19,12 @@ import (
// Converter a single, reusable AsciiDoc converter.
type Converter struct {
- tmpl *template.Template
- tmplSearch *template.Template
+ tmpl *template.Template
+ tmplSearch *template.Template
+
+ // htmlTemplateModtime modification time for HtmlTemplate.
+ htmlTemplateModtime time.Time
+
htmlTemplate string // Path to HTML template in storage.
}
@@ -30,7 +35,6 @@ func NewConverter(htmlTemplate string) (converter *Converter, err error) {
logp = `NewConverter`
tmplContent string
- bhtml []byte
)
converter = &Converter{}
@@ -42,12 +46,23 @@ func NewConverter(htmlTemplate string) (converter *Converter, err error) {
} else {
converter.htmlTemplate = filepath.Clean(htmlTemplate)
+ var fi os.FileInfo
+
+ fi, err = os.Stat(converter.htmlTemplate)
+ if err != nil {
+ return nil, fmt.Errorf(`%s: %w`, logp, err)
+ }
+
+ converter.htmlTemplateModtime = fi.ModTime()
+
+ var bhtml []byte
+
bhtml, err = os.ReadFile(converter.htmlTemplate)
if err != nil {
- tmplContent = templateIndexHTML
- } else {
- tmplContent = string(bhtml)
+ return nil, fmt.Errorf(`%s: %w`, logp, err)
}
+
+ tmplContent = string(bhtml)
}
converter.tmpl, err = converter.tmpl.Parse(tmplContent)
@@ -69,13 +84,29 @@ func (converter *Converter) convertFileMarkups(fileMarkups map[string]*FileMarku
var (
logp = `convertFileMarkups`
- fmarkup *FileMarkup
- err error
+ fmarkup *FileMarkup
+ htmlInfo os.FileInfo
+ htmlModtime time.Time
+ err error
+ skip bool
)
for _, fmarkup = range fileMarkups {
- if !fmarkup.isNewerThanHtml() {
- if !isForce {
+ skip = true
+ if !isForce {
+ htmlInfo, _ = os.Stat(fmarkup.pathHtml)
+ if htmlInfo == nil {
+ // HTML file may not exist.
+ skip = false
+ } else {
+ htmlModtime = htmlInfo.ModTime()
+ if converter.htmlTemplateModtime.After(htmlModtime) {
+ skip = false
+ } else if fmarkup.info.ModTime().After(htmlModtime) {
+ skip = false
+ }
+ }
+ if skip {
continue
}
}
diff --git a/file_markup.go b/file_markup.go
index 131b8f7..bca9be2 100644
--- a/file_markup.go
+++ b/file_markup.go
@@ -60,18 +60,6 @@ func NewFileMarkup(filePath string, fi os.FileInfo) (fmarkup *FileMarkup, err er
return fmarkup, nil
}
-// isNewerThanHtml return true if the markup file is newer than HTML file.
-func (fm *FileMarkup) isNewerThanHtml() bool {
- var (
- fi os.FileInfo
- )
- fi, _ = os.Stat(fm.pathHtml)
- if fi == nil {
- return true
- }
- return fm.info.ModTime().After(fi.ModTime())
-}
-
func markupKind(ext string) int {
switch ext {
case extAsciidoc: