cmd/sgblog/main.go | 43 ++++++++++++++++--------------------------- common.go | 2 +- go.mod | 1 + go.sum | 2 ++ diff --git a/cmd/sgblog/main.go b/cmd/sgblog/main.go index a47bf32e034a6865849544045af05d41598bcfe86ae15e75b7c907db93145bba..60fdb6498ff5399db507c4aa3a447810ebf94058677b5a40ff62b90571f495da 100644 --- a/cmd/sgblog/main.go +++ b/cmd/sgblog/main.go @@ -32,6 +32,7 @@ "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/object" + "go.cypherpunks.ru/recfile" ) const ( @@ -118,36 +119,24 @@ } func parseComments(data []byte) []string { comments := []string{} - isBody := false - comment := make([]string, 0, 4) - lines := strings.Split(strings.TrimSuffix(string(data), "\n"), "\n") - if len(lines) == 1 { - return comments - } - for _, s := range lines { - if s == "" { - comments = append(comments, strings.Join(comment, "\n")) - comment = make([]string, 0, 4) - isBody = false - continue - } - if s == "Body:" { - isBody = true - comment = append(comment, "") - continue + r := recfile.NewReader(bytes.NewReader(data)) + for { + fields, err := r.Next() + if err != nil { + break } - if isBody { - if s == "+" { - comment = append(comment, "") - } else { - comment = append(comment, strings.TrimPrefix(s, "+ ")) - } + if len(fields) != 3 || + fields[0].Name != "From" || + fields[1].Name != "Date" || + fields[2].Name != "Body" { continue } - comment = append(comment, s) - } - if len(comment) > 1 { - comments = append(comments, strings.Join(comment, "\n")) + comments = append(comments, fmt.Sprintf( + "%s: %s\n%s: %s\n%s", + fields[0].Name, fields[0].Value, + fields[1].Name, fields[1].Value, + fields[2].Value, + )) } return comments } diff --git a/common.go b/common.go index 4e9677ab6169d83e0c333cf6196d637c47a9992ce961197a512bb71bbabe42aa..050954438d8dcb5869788894ddcb0d650cf726a9a2db69f1c4949889da3f9234 100644 --- a/common.go +++ b/common.go @@ -2,6 +2,6 @@ // SGBlog -- Git-backed CGI/inetd blogging/phlogging engine package sgblog const ( - Version = "0.9.0" + Version = "0.9.1" WhenFmt = "2006-01-02 15:04:05Z07:00" ) diff --git a/go.mod b/go.mod index ce85c7581ff0291c303f4ed69b35522f704a44bc5daa3277966159e0a29a10ff..11d81b5d26c38c32f556e342c20d7a9a0f61f76b9e61403871195db99b9de81f 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/go-git/go-git/v5 v5.1.0 github.com/hjson/hjson-go v3.0.1+incompatible github.com/imdario/mergo v0.3.11 // indirect + go.cypherpunks.ru/recfile v0.1.0 golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a golang.org/x/net v0.0.0-20200925080053-05aa5d4ee321 // indirect golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d // indirect diff --git a/go.sum b/go.sum index 500157200da52f742a68cd1c0019503857cb45efb763033eaef10d1f5a469750..39ea9f9d5a1b68f8b2fadf25318138bfb6784ce804b085f136668060920cf097 100644 --- a/go.sum +++ b/go.sum @@ -57,6 +57,8 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +go.cypherpunks.ru/recfile v0.1.0 h1:JNtRwUpA6zXl/mJTBY3zK0ynmh3Dbp4dZb2zN+HUmnk= +go.cypherpunks.ru/recfile v0.1.0/go.mod h1:p1ZUMeyQQbQg+ICtKH3+Zt59QLI0tCZYZj/75Vp1buk= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=