From 7686dfa4740be9425bc69c2948adfcdcd0173109 Mon Sep 17 00:00:00 2001 From: ston1th Date: Sat, 24 Aug 2019 20:29:43 +0200 Subject: [PATCH] compile tags regex once --- pkg/core/types.go | 10 +++++++++- pkg/db/index.go | 6 +++--- pkg/db/tags.go | 11 +++++++++++ pkg/server/handler.go | 4 ++-- pkg/tags/tags.go | 6 ++---- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/pkg/core/types.go b/pkg/core/types.go index d3ee608..fb10958 100644 --- a/pkg/core/types.go +++ b/pkg/core/types.go @@ -2,7 +2,10 @@ package core -import "html/template" +import ( + "html/template" + "regexp" +) type User struct { Username string @@ -25,6 +28,11 @@ type Tag struct { Regex string } +type RTag struct { + Name string + Regex *regexp.Regexp +} + type Path struct { Name string Abs string diff --git a/pkg/db/index.go b/pkg/db/index.go index 91bc027..3a49e07 100644 --- a/pkg/db/index.go +++ b/pkg/db/index.go @@ -20,9 +20,9 @@ const ( pathPrefix = "path/" ) -func (db *DB) Reindex(path string, match []core.Tag) (err error) { +func (db *DB) Reindex(path string, match []core.RTag) (err error) { if match == nil { - match, err = db.GetAllTags() + match, err = db.GetAllRTags() if err != nil { return } @@ -53,7 +53,7 @@ func (db *DB) ReindexAll() (err error) { if err != nil { return } - match, err := db.GetAllTags() + match, err := db.GetAllRTags() if err != nil { return } diff --git a/pkg/db/tags.go b/pkg/db/tags.go index d887d7c..53a9061 100644 --- a/pkg/db/tags.go +++ b/pkg/db/tags.go @@ -41,6 +41,17 @@ func (db *DB) GetAllTags() (tags []core.Tag, err error) { return } +func (db *DB) GetAllRTags() (rtags []core.RTag, err error) { + tags, err := db.GetAllTags() + if err != nil { + return + } + for _, v := range tags { + rtags = append(rtags, core.RTag{v.Name, regexp.MustCompile(v.Regex)}) + } + return +} + func (db *DB) GetTags(name string) (t core.Tag, err error) { err = db.store.Get(tagsPrefix+name, &t) return diff --git a/pkg/server/handler.go b/pkg/server/handler.go index e1c8763..4f2462a 100644 --- a/pkg/server/handler.go +++ b/pkg/server/handler.go @@ -187,11 +187,11 @@ func scanFile(ctx *Context, path string) (err error) { l.Printf("scanner: %s: %s", path, err) return } - t, err := ctx.Srv.DB.GetAllTags() + rt, err := ctx.Srv.DB.GetAllRTags() if err != nil { l.Printf("getTags: %s: %s", path, err) } - found := tags.Find(txt, t) + found := tags.Find(txt, rt) id, err := ctx.Srv.DB.Index.Add(txt, found) if err != nil { l.Printf("index: %s: %s", path, err) diff --git a/pkg/tags/tags.go b/pkg/tags/tags.go index 160a9bd..e5c9ffa 100644 --- a/pkg/tags/tags.go +++ b/pkg/tags/tags.go @@ -4,13 +4,11 @@ package tags import ( "git.giftfish.de/ston1th/docstore/pkg/core" - "regexp" ) -func Find(text string, tags []core.Tag) (found []string) { +func Find(text string, tags []core.RTag) (found []string) { for _, t := range tags { - re := regexp.MustCompile(t.Regex) - if re.MatchString(text) { + if t.Regex.MatchString(text) { found = append(found, t.Name) } }