refactor: return errors with stack traces, where appropriate
1 file changed, 30 insertions(+), 31 deletions(-)
changed files
M internal/builder/builder.go → internal/builder/builder.go
@@ -39,20 +39,20 @@ return filepath.Join(src, rel) } } -func copyFile(storage storage.Writer, src string, rel string) error { +func copyFile(storage storage.Writer, src string, rel string) errors.E { buf := new(buffer.Buffer) sf, err := os.Open(src) if err != nil { - return err + return errors.WithStack(err) } defer sf.Close() buf.Reset() if _, err := io.Copy(buf, sf); err != nil { - return err + return errors.WithStack(err) } if err := storage.Write("/"+rel, "", buf); err != nil { - return err + return errors.WithStack(err) } return nil@@ -62,7 +62,7 @@ func build( options *Options, config *config.Config, log *log.Logger, -) error { +) errors.E { ctx := context.TODO() buf := new(buffer.Buffer) joinSource := joinSourcePath(options.Source)@@ -76,7 +76,7 @@ PostDir: postDir, Repo: options.Repo, }, log.Named("content")) if err != nil { - return err + return errors.WithStack(err) } sitemap := sitemap.New(config)@@ -94,17 +94,17 @@ return errors.WithMessage(err, "could not render post") } if err := storage.WritePost(post, buf); err != nil { - return err + return errors.WithStack(err) } } log.Debug("rendering tags list") buf.Reset() if err := templates.TagsPage(config, "tags", mapset.Sorted(cc.Tags), "/tags").Render(ctx, buf); err != nil { - return err + return errors.WithStack(err) } if err := storage.Write("/tags/", "Tags", buf); err != nil { - return err + return errors.WithStack(err) } sitemap.AddPath("/tags/", lastMod)@@ -119,10 +119,10 @@ log.Debug("rendering tags page", "tag", tag) url := path.Join("/tags", tag) + "/" buf.Reset() if err := templates.TagPage(config, tag, matchingPosts, url).Render(ctx, buf); err != nil { - return err + return errors.WithStack(err) } if err = storage.Write(url, tag, buf); err != nil { - return err + return errors.WithStack(err) } sitemap.AddPath(url, matchingPosts[0].Date)@@ -139,20 +139,20 @@ return errors.WithMessage(err, "could not render tag feed page") } buf.Reset() if _, err := feed.WriteTo(buf); err != nil { - return err + return errors.WithStack(err) } if err := storage.Write(path.Join("/tags", tag, "atom.xml"), title, buf); err != nil { - return err + return errors.WithStack(err) } } log.Debug("rendering list page") buf.Reset() if err := templates.ListPage(config, cc.Posts, path.Join("/", postDir)).Render(ctx, buf); err != nil { - return err + return errors.WithStack(err) } if err := storage.Write(path.Join("/", postDir)+"/", "Posts", buf); err != nil { - return err + return errors.WithStack(err) } sitemap.AddPath(path.Join("/", postDir)+"/", lastMod)@@ -163,10 +163,10 @@ return errors.WithMessage(err, "could not render feed") } buf.Reset() if _, err := feed.WriteTo(buf); err != nil { - return err + return errors.WithStack(err) } if err := storage.Write("/atom.xml", config.Title, buf); err != nil { - return err + return errors.WithStack(err) } for _, filename := range []string{"feed-styles.xsl", "style.css"} {@@ -176,7 +176,7 @@ if err := template.CopyFile(filename, buf); err != nil { return errors.WithMessagef(err, "could not render template file %s", filename) } if err := storage.Write("/"+filename, "", buf); err != nil { - return err + return errors.WithStack(err) } }@@ -185,17 +185,17 @@ buf.Reset() log.Debug("rendering page", "source", post.Input, "path", post.URL) if post.URL == "/" { if err := templates.Homepage(config, cc.Posts, post).Render(ctx, buf); err != nil { - return err + return errors.WithStack(err) } } else { if err := templates.Page(config, post).Render(ctx, buf); err != nil { - return err + return errors.WithStack(err) } } file := storage.NewFileFromPost(post) file.ContentType = "text/html; charset=utf-8" if err := storage.WriteFile(file, buf); err != nil { - return err + return errors.WithStack(err) } }@@ -203,31 +203,30 @@ // it would be nice to set LastMod here, but using the latest post // date would be wrong as the homepage has its own content file // without a date, which could be newer sitemap.AddPath("/", time.Time{}) - err = buf.SeekStart() - if err != nil { - return err + if err := buf.SeekStart(); err != nil { + return errors.WithStack(err) } log.Debug("rendering sitemap") buf.Reset() if _, err := sitemap.WriteTo(buf); err != nil { - return err + return errors.WithStack(err) } if err := storage.Write("/sitemap.xml", "sitemap", buf); err != nil { - return err + return errors.WithStack(err) } log.Debug("rendering robots.txt") rob, err := template.RenderRobotsTXT(config) if err != nil { - return err + return errors.WithStack(err) } buf.Reset() if _, err := io.Copy(buf, rob); err != nil { - return err + return errors.WithStack(err) } if err := storage.Write("/robots.txt", "", buf); err != nil { - return err + return errors.WithStack(err) } for _, sf := range cc.StaticFiles {@@ -235,14 +234,14 @@ src := joinSource(sf) log.Debug("copying static file", "sf", sf, "src", src) err = copyFile(storage, src, sf) if err != nil { - return err + return errors.WithStack(err) } } return nil } -func BuildSite(options *Options, cfg *config.Config, log *log.Logger) error { +func BuildSite(options *Options, cfg *config.Config, log *log.Logger) errors.E { if cfg == nil { return errors.New("config is nil") }