diff options
| -rw-r--r-- | ciigo.go | 2 | ||||
| -rw-r--r-- | converter.go | 51 | ||||
| -rw-r--r-- | file_markup.go | 12 |
3 files changed, 42 insertions, 23 deletions
@@ -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: |
