diff options
| author | Shulhan <ms@kilabit.info> | 2023-11-06 21:33:45 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2023-11-09 20:25:15 +0700 |
| commit | bad30877282ff2e584c49ea1a656bf0fa0f3b1fa (patch) | |
| tree | 3750564f74822352e20d80acebbe5f2460d7df72 | |
| parent | 3ca487dff9ea91ef6d60e4a9e7a78ea8e177bff1 (diff) | |
| download | ciigo-bad30877282ff2e584c49ea1a656bf0fa0f3b1fa.tar.xz | |
all: use modification time when deciding when to convert to HTML
Previously, in changes 46bd8b68dc8c we pass the force=true to Convert
function.
In this changes, we derive the decision based on modification time
of HTML template and markup file.
If the HTML template or markup file is newer that HTML file then the
new HTML file will be generated.
| -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: |
