From 95f3e41f1e3afa1488d1350eaf5068338d3c3c70 Mon Sep 17 00:00:00 2001 From: Stephen Searles Date: Sun, 27 Aug 2017 16:44:00 -0600 Subject: [PATCH] drafts seem to be working again --- caddyhugo.go | 6 ++++++ client.go | 12 +++++++++--- http.go | 11 +++++++---- hugo.go | 14 ++++++++++---- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/caddyhugo.go b/caddyhugo.go index d7bd9ac..91446f7 100644 --- a/caddyhugo.go +++ b/caddyhugo.go @@ -75,6 +75,12 @@ func (ch *CaddyHugo) docFilename(orig string) string { // Publish really renders new content into the public directory func (ch *CaddyHugo) Publish() error { + ch.mtx.Lock() + for _, es := range ch.docs { + ch.persistEdits(es) + } + ch.mtx.Unlock() + cmd := exec.Command("hugo") cmd.Dir = ch.Dir _, err := cmd.CombinedOutput() diff --git a/client.go b/client.go index 8963aa8..f8527ba 100644 --- a/client.go +++ b/client.go @@ -43,11 +43,9 @@ func (ch *CaddyHugo) newEditSession(docName string) (*editSession, error) { filename: filename, doc: acedoc.NewString(string(contents)), // tmpfs: afero.NewCopyOnWriteFs(afero.NewBasePathFs(afero.NewOsFs(), ch.Dir+"/"), afero.NewMemMapFs()), - tmpfs: afero.NewCopyOnWriteFs(afero.NewReadOnlyFs(afero.NewBasePathFs(afero.NewOsFs(), ch.Dir)), afero.NewMemMapFs()), + tmpfs: afero.NewCopyOnWriteFs(afero.NewOsFs(), afero.NewMemMapFs()), } - printTree(es.tmpfs) - err = es.doc.LogToFile(path.Join(ch.Dir, "logs", docName)) if err != nil { fmt.Println(err) @@ -82,6 +80,14 @@ func (ch *CaddyHugo) renderDraft(es *editSession) error { return proc.Start() } +func (ch *CaddyHugo) persistEdits(es *editSession) error { + err := afero.WriteFile(afero.NewOsFs(), es.filename, []byte(es.doc.Contents()), 0644) + if err != nil { + return err + } + return nil +} + func (ch *CaddyHugo) hasEditSession(docName string) (*editSession, bool) { dr, ok := ch.docs[ch.docFilename(docName)] return dr, ok diff --git a/http.go b/http.go index 352c53c..4bb140f 100644 --- a/http.go +++ b/http.go @@ -210,7 +210,7 @@ func (ch *CaddyHugo) serveDraft(w http.ResponseWriter, r *http.Request) (int, er } r.URL.Path = page.RelPermalink() - http.FileServer(aferoHTTP{afero.NewBasePathFs(docref.tmpfs, "public")}).ServeHTTP(w, r) + http.FileServer(aferoHTTP{afero.NewBasePathFs(docref.tmpfs, path.Join(ch.Dir, "public"))}).ServeHTTP(w, r) return 200, nil } @@ -219,9 +219,6 @@ func printTree(fs afero.Fs) { const tab = " " afero.Walk(fs, "/", filepath.WalkFunc(func(path string, info os.FileInfo, err error) error { - if path == "/" { - return nil - } if filepath.Base(path) == ".git" { return filepath.SkipDir } @@ -253,5 +250,11 @@ type aferoHTTP struct { func (a aferoHTTP) Open(name string) (http.File, error) { af, err := a.Fs.Open(name) + if os.IsExist(err) { + err = os.ErrExist + } + if os.IsNotExist(err) { + err = os.ErrNotExist + } return af, err } diff --git a/hugo.go b/hugo.go index 46f253a..980d2cb 100644 --- a/hugo.go +++ b/hugo.go @@ -2,6 +2,7 @@ package caddyhugo import ( "fmt" + "path" "time" "github.com/gohugoio/hugo/deps" @@ -29,15 +30,15 @@ type HugoRenderer interface { func HugoCmdProcessConfig(ch *CaddyHugo, es *editSession, touchFn func()) (idleshut.Config, error) { - printTree(es.tmpfs) var err error hugoCfg := &deps.DepsCfg{Fs: hugofs.NewFrom(es.tmpfs, ch.HugoCfg.Cfg)} - hugoCfg.Cfg, err = hugolib.LoadConfig(es.tmpfs, "/", "config.toml") + fmt.Println(ch.Dir) + hugoCfg.Cfg, err = hugolib.LoadConfig(es.tmpfs, "", path.Join(ch.Dir, "config.toml")) if err != nil { return idleshut.Config{}, fmt.Errorf("caddy-hugo: loading site configuration: %v", err) } - hugoCfg.Cfg.Set("workingdir", "/") + hugoCfg.Cfg.Set("workingDir", ch.Dir) hugoSites, err := hugolib.NewHugoSites(*hugoCfg) if err != nil { return idleshut.Config{}, fmt.Errorf("caddy-hugo: initializing site: %v", err) @@ -53,15 +54,20 @@ func HugoCmdProcessConfig(ch *CaddyHugo, es *editSession, touchFn func()) (idles TickDuration: WebsocketFileTicker, MaxIdleTicks: uint(IdleWebsocketTimeout/WebsocketFileTicker) + 1, Stop: func() error { + ch.persistEdits(es) + es.doc.Close() + + ch.mtx.Lock() + defer ch.mtx.Unlock() delete(ch.docs, es.filename) + return nil }, TickError: func(err error) { fmt.Println("error processing draft:", err) }, Tick: func() error { - fmt.Println("TICK") err := afero.WriteFile(es.tmpfs, es.filename, []byte(es.doc.Contents()), 0644) if err != nil { return err