all repos — homestead @ 4c07535d9120fb999b0c008f1866972865f424f7

Code for my website

replace tozd/errors with Southclaws/fault

Alan Pearce
commit

4c07535d9120fb999b0c008f1866972865f424f7

parent

90a4ac43b915abb7a2949f4b5313b40d705b6071

1 file changed, 35 insertions(+), 34 deletions(-)

changed files
M internal/storage/sqlite/writer.gointernal/storage/sqlite/writer.go
@@ -18,7 +18,8 @@ "go.alanpearce.eu/homestead/internal/content"
"go.alanpearce.eu/homestead/internal/storage" "go.alanpearce.eu/x/log" - "gitlab.com/tozd/go/errors" + "github.com/Southclaws/fault" + "github.com/Southclaws/fault/fmsg" _ "modernc.org/sqlite" // import registers db/SQL driver )
@@ -40,7 +41,7 @@ type Options struct {
Compress bool } -func OpenDB(dbPath string) (*sql.DB, errors.E) { +func OpenDB(dbPath string) (*sql.DB, error) { db, err := sql.Open( "sqlite", fmt.Sprintf(
@@ -51,13 +52,13 @@ 16*1024*1024,
), ) if err != nil { - return nil, errors.WithStack(err) + return nil, fault.Wrap(err) } return db, nil } -func NewWriter(db *sql.DB, logger *log.Logger, opts *Options) (*Writer, errors.E) { +func NewWriter(db *sql.DB, logger *log.Logger, opts *Options) (*Writer, error) { _, err := db.Exec(` CREATE TABLE IF NOT EXISTS url ( url_id INTEGER PRIMARY KEY,
@@ -90,7 +91,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS file_content
ON content (file_id, encoding); `) if err != nil { - return nil, errors.WithMessage(err, "creating tables") + return nil, fault.Wrap(err, fmsg.With("creating tables")) } w := &Writer{
@@ -101,7 +102,7 @@ }
w.queries.insertURL, err = db.Prepare(`INSERT INTO url (path) VALUES (?)`) if err != nil { - return nil, errors.WithMessage(err, "preparing insert URL statement") + return nil, fault.Wrap(err, fmsg.With("preparing insert URL statement")) } w.queries.insertFile, err = db.Prepare(`
@@ -109,7 +110,7 @@ INSERT INTO file (url_id, content_type, last_modified, etag, style_hash, title)
VALUES (:url_id, :content_type, :last_modified, :etag, :style_hash, :title) `) if err != nil { - return nil, errors.WithMessage(err, "preparing insert file statement") + return nil, fault.Wrap(err, fmsg.With("preparing insert file statement")) } w.queries.insertContent, err = db.Prepare(`
@@ -117,31 +118,31 @@ INSERT INTO content (file_id, encoding, body)
VALUES (:file_id, :encoding, :body) `) if err != nil { - return nil, errors.WithMessage(err, "preparing insert content statement") + return nil, fault.Wrap(err, fmsg.With("preparing insert content statement")) } return w, nil } -func (s *Writer) Mkdirp(string) errors.E { +func (s *Writer) Mkdirp(string) error { return nil } -func (s *Writer) storeURL(path string) (int64, errors.E) { +func (s *Writer) storeURL(path string) (int64, error) { r, err := s.queries.insertURL.Exec(path) if err != nil { - return 0, errors.WithMessagef(err, "inserting URL %s into database", path) + return 0, fault.Wrap(err, fmsg.With(fmt.Sprintf("inserting URL %s into database", path))) } id, err := r.LastInsertId() if err != nil { - return 0, errors.WithStack(err) + return 0, fault.Wrap(err) } return id, nil } -func (s *Writer) storeFile(urlID int64, file *storage.File) (int64, errors.E) { +func (s *Writer) storeFile(urlID int64, file *storage.File) (int64, error) { if file.ContentType == "" { file.ContentType = http.DetectContentType(file.Encodings["identity"].Bytes()) s.log.Warn(
@@ -161,40 +162,40 @@ sql.Named("style_hash", file.StyleHash),
sql.Named("title", file.Title), ) if err != nil { - return 0, errors.WithMessage(err, "inserting file into database") + return 0, fault.Wrap(err, fmsg.With("inserting file into database")) } id, err := r.LastInsertId() if err != nil { - return 0, errors.WithStack(err) + return 0, fault.Wrap(err) } return id, nil } -func (s *Writer) storeEncoding(fileID int64, encoding string, data []byte) errors.E { +func (s *Writer) storeEncoding(fileID int64, encoding string, data []byte) error { _, err := s.queries.insertContent.Exec( sql.Named("file_id", fileID), sql.Named("encoding", encoding), sql.Named("body", data), ) if err != nil { - return errors.WithMessagef( + return fault.Wrap( err, - "inserting encoding into database file_id: %d encoding: %s", - fileID, - encoding, + fmsg.With(fmt.Sprintf("inserting encoding into database file_id: %d encoding: %s", + fileID, + encoding)), ) } return nil } -func etag(content []byte) (string, errors.E) { +func etag(content []byte) (string, error) { hash := fnv.New64a() _, err := hash.Write(content) if err != nil { - return "", errors.WithStack(err) + return "", fault.Wrap(err) } return fmt.Sprintf(`W/"%x"`, hash.Sum(nil)), nil
@@ -215,13 +216,13 @@
return file } -func (s *Writer) WritePost(post *content.Post, content *buffer.Buffer) errors.E { +func (s *Writer) WritePost(post *content.Post, content *buffer.Buffer) error { s.log.Debug("storing post", "title", post.Title) return s.WriteFile(s.NewFileFromPost(post), content) } -func (s *Writer) Write(pathname string, title string, content *buffer.Buffer) errors.E { +func (s *Writer) Write(pathname string, title string, content *buffer.Buffer) error { file := &storage.File{ Title: title, Path: pathname,
@@ -232,12 +233,12 @@
return s.WriteFile(file, content) } -func (s *Writer) WriteFile(file *storage.File, content *buffer.Buffer) errors.E { +func (s *Writer) WriteFile(file *storage.File, content *buffer.Buffer) error { s.log.Debug("storing content", "pathname", file.Path) urlID, err := s.storeURL(file.Path) if err != nil { - return errors.WithMessage(err, "storing URL") + return fault.Wrap(err, fmsg.With("storing URL")) } if file.Encodings == nil {
@@ -252,18 +253,18 @@
if file.Etag == "" { file.Etag, err = etag(content.Bytes()) if err != nil { - return errors.WithMessage(err, "could not calculate file etag") + return fault.Wrap(err, fmsg.With("could not calculate file etag")) } } err = file.CalculateStyleHash() if err != nil { - return errors.WithMessage(err, "calculating file hash") + return fault.Wrap(err, fmsg.With("calculating file hash")) } fileID, err := s.storeFile(urlID, file) if err != nil { - return errors.WithMessage(err, "storing file") + return fault.Wrap(err, fmsg.With("storing file")) } err = s.storeEncoding(fileID, "identity", content.Bytes())
@@ -275,7 +276,7 @@ if s.options.Compress {
for _, enc := range encodings { compressed, err := compress(enc, content) if err != nil { - return errors.WithMessage(err, "compressing file") + return fault.Wrap(err, fmsg.With("compressing file")) } err = s.storeEncoding(fileID, enc, compressed.Bytes())
@@ -289,7 +290,7 @@
return nil } -func compress(encoding string, content *buffer.Buffer) (*buffer.Buffer, errors.E) { +func compress(encoding string, content *buffer.Buffer) (*buffer.Buffer, error) { var w io.WriteCloser compressed := new(buffer.Buffer) switch encoding {
@@ -301,16 +302,16 @@ case "zstd":
var err error w, err = zstd.NewWriter(compressed) if err != nil { - return nil, errors.WithMessage(err, "could not create zstd writer") + return nil, fault.Wrap(err, fmsg.With("could not create zstd writer")) } } defer w.Close() if err := content.SeekStart(); err != nil { - return nil, errors.WithMessage(err, "seeking to start of content buffer") + return nil, fault.Wrap(err, fmsg.With("seeking to start of content buffer")) } if _, err := io.Copy(w, content); err != nil { - return nil, errors.WithMessage(err, "compressing file") + return nil, fault.Wrap(err, fmsg.With("compressing file")) } return compressed, nil