]> Nishi Git Mirror - aya.git/commitdiff
Add support for rebuilding if .zsignore or .zs/* files change
authorJames Mills <prologic@shortcircuit.net.au>
Sat, 18 Mar 2023 01:59:16 +0000 (11:59 +1000)
committerJames Mills <prologic@shortcircuit.net.au>
Sat, 18 Mar 2023 01:59:16 +0000 (11:59 +1000)
main.go

diff --git a/main.go b/main.go
index 86df72121970114e3b220199a7d27c6393d02872..a6cd21fb5569224b362c12e15becc48809397682 100644 (file)
--- a/main.go
+++ b/main.go
@@ -37,6 +37,16 @@ const (
 
        // PUBDIR is the default directory for publishing final built content
        PUBDIR = ".pub"
+
+       // DefaultIgnore is the default set of ignore patterns if no .zsignore
+       DefaultIgnore = `*~
+*.bak
+
+COPYING
+Dockerfile
+LICENSE
+Makefile
+README.md`
 )
 
 // Ignore holds a set of patterns to ignore from parsing a .zsignore file
@@ -483,6 +493,14 @@ func buildAll(ctx context.Context, watch bool) error {
                case <-ticker.C:
                        os.Mkdir(PUBDIR, 0755)
                        filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
+                               // rebuild if changes to .zs/ or .zsignore
+                               if (filepath.Base(path) == ZSIGNORE || filepath.Dir(path) == ZSDIR) && info.ModTime().After(lastModified) {
+                                       Ignore = ParseIgnoreFile(path)
+                                       // reset lastModified to 0 so everything rebuidls
+                                       lastModified = time.Unix(0, 0)
+                                       return nil
+                               }
+
                                // ignore hidden files and directories and ignored patterns
                                if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") || Ignore.MatchesPath(path) {
                                        return nil
@@ -578,17 +596,23 @@ func init() {
        ensureFirstPath(filepath.Join(w, ZSDIR))
 }
 
+func ParseIgnoreFile(fn string) *ignore.GitIgnore {
+       obj, err := ignore.CompileIgnoreFile(ZSIGNORE)
+       if err != nil {
+               log.WithError(err).Warnf("error parsing .zsignore: % (using defaults)s", fn)
+               return ignore.CompileIgnoreLines(DefaultIgnore)
+       }
+
+       return obj
+}
+
 func main() {
        // prepend .zs to $PATH, so plugins will be found before OS commands
        w, _ := os.Getwd()
        ensureFirstPath(filepath.Join(w, ZSDIR))
 
        // initialise Ignore (.zsignore) patterns
-       if ignoreObject, err := ignore.CompileIgnoreFile(ZSIGNORE); err == nil {
-               Ignore = ignoreObject
-       } else {
-               Ignore = ignore.CompileIgnoreLines("")
-       }
+       Ignore = ParseIgnoreFile(ZSIGNORE)
 
        if err := RootCmd.Execute(); err != nil {
                log.WithError(err).Error("error executing command")