diff options
| author | JP Appel <jeanpierre.appel01@gmail.com> | 2025-06-30 17:18:45 -0400 |
|---|---|---|
| committer | JP Appel <jeanpierre.appel01@gmail.com> | 2025-06-30 18:54:51 -0400 |
| commit | a4d86693394ba9b181b5928c1c6e8c31c9bb2b64 (patch) | |
| tree | 8088d8d7c8c835b3e4c3590f1e3875d8e732d8cb /cmd/index.go | |
| parent | 3168673bc2b57909213287a99b6151b4f1e0c439 (diff) | |
Implement compiled query execution
Diffstat (limited to 'cmd/index.go')
| -rw-r--r-- | cmd/index.go | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/cmd/index.go b/cmd/index.go new file mode 100644 index 0000000..2f45f78 --- /dev/null +++ b/cmd/index.go @@ -0,0 +1,75 @@ +package main + +import ( + "context" + "flag" + "fmt" + "log/slog" + "os" + "strings" + + "github.com/jpappel/atlas/pkg/data" + "github.com/jpappel/atlas/pkg/index" +) + +type IndexFlags struct { + Filters []index.DocFilter + index.ParseOpts +} + +func setupIndexFlags(args []string, fs *flag.FlagSet, flags *IndexFlags) { + fs.BoolVar(&flags.IgnoreDateError, "ignoreBadDates", false, "ignore malformed dates while indexing") + fs.BoolVar(&flags.IgnoreMetaError, "ignoreMetaError", false, "ignore errors while parsing general YAML header info") + fs.BoolVar(&flags.ParseMeta, "parseMeta", true, "parse YAML header values other title, authors, date, tags") + + customFilters := false + flags.Filters = index.DefaultFilters() + fs.Func("filter", + "accept or reject files from indexing, applied in supplied order"+ + "\n(default Ext_.md, MaxSize_204800, YAMLHeader, ExcludeParent_templates)\n"+ + index.FilterHelp, + func(s string) error { + if !customFilters { + flags.Filters = flags.Filters[:0] + } + + filter, err := index.ParseFilter(s) + if err != nil { + return err + } + flags.Filters = append(flags.Filters, filter) + + return nil + }) + + fs.Parse(args[1:]) +} + +func runIndex(gFlags GlobalFlags, iFlags IndexFlags, db *data.Query) byte { + idx := index.Index{Root: gFlags.IndexRoot, Filters: iFlags.Filters} + if slog.Default().Enabled(context.Background(), slog.LevelDebug) { + filterNames := make([]string, 0, len(iFlags.Filters)) + for _, filter := range iFlags.Filters { + filterNames = append(filterNames, filter.Name) + } + slog.Default().Debug("index", + slog.String("indexRoot", gFlags.IndexRoot), + slog.String("filters", strings.Join(filterNames, ", ")), + ) + } + + traversedFiles := idx.Traverse(gFlags.NumWorkers) + fmt.Print("Crawled ", len(traversedFiles)) + + filteredFiles := idx.Filter(traversedFiles, gFlags.NumWorkers) + fmt.Print(", Filtered ", len(filteredFiles)) + + idx.Documents = index.ParseDocs(filteredFiles, gFlags.NumWorkers, iFlags.ParseOpts) + fmt.Print(", Parsed ", len(idx.Documents), "\n") + + if err := db.Put(idx); err != nil { + fmt.Fprintln(os.Stderr, err) + return 1 + } + return 0 +} |
