aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2025-07-18 15:28:13 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2025-07-18 16:56:41 -0400
commit09cd2f2f80920830cc3fd3636a6b9fc93b10f743 (patch)
tree28095952f3a26d4923db6aac96d7b7fdddc0dc2a /cmd
parent6469090be4935f17d2dfafcee8e41ebff87f2e89 (diff)
Add methods for updating existing document entries
Additionally optimize various database queries
Diffstat (limited to 'cmd')
-rw-r--r--cmd/index.go83
1 files changed, 63 insertions, 20 deletions
diff --git a/cmd/index.go b/cmd/index.go
index 62b9af0..f072599 100644
--- a/cmd/index.go
+++ b/cmd/index.go
@@ -13,7 +13,8 @@ import (
)
type IndexFlags struct {
- Filters []index.DocFilter
+ Filters []index.DocFilter
+ Subcommand string
index.ParseOpts
}
@@ -23,6 +24,20 @@ func setupIndexFlags(args []string, fs *flag.FlagSet, flags *IndexFlags) {
fs.BoolVar(&flags.ParseMeta, "parseMeta", true, "parse YAML header values other title, authors, date, tags")
fs.BoolVar(&flags.ParseLinks, "parseLinks", true, "parse file contents for links")
+ fs.Usage = func() {
+ f := fs.Output()
+ fmt.Fprintf(f, "Usage of %s %s\n", os.Args[0], fs.Name())
+ fmt.Fprintf(f, "\t%s [global-flags] %s [index-flags] <subcommand>\n\n", os.Args[0], fs.Name())
+ fmt.Fprintln(f, "Subcommands:")
+ fmt.Fprintln(f, "build - create a new index")
+ fmt.Fprintln(f, "update - update an existing index")
+ fmt.Fprintln(f, "tidy - cleanup an index")
+ fmt.Fprintln(f, "\nIndex Flags:")
+ fs.PrintDefaults()
+ fmt.Fprintln(f, "\nGlobal Flags:")
+ flag.PrintDefaults()
+ }
+
customFilters := false
flags.Filters = index.DefaultFilters()
fs.Func("filter",
@@ -44,33 +59,61 @@ func setupIndexFlags(args []string, fs *flag.FlagSet, flags *IndexFlags) {
})
fs.Parse(args)
+
+ remainingArgs := fs.Args()
+ if len(remainingArgs) == 0 {
+ flags.Subcommand = "build"
+ } else if len(remainingArgs) == 1 {
+ flags.Subcommand = remainingArgs[0]
+ }
}
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)
+
+ switch iFlags.Subcommand {
+ case "build", "update":
+ 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, ", ")),
+ )
}
- 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))
+ traversedFiles := idx.Traverse(gFlags.NumWorkers)
+ fmt.Print("Crawled ", len(traversedFiles))
- filteredFiles := idx.Filter(traversedFiles, gFlags.NumWorkers)
- fmt.Print(", Filtered ", len(filteredFiles))
+ 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")
+ 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
+ var err error
+ // switch in order to appease gopls...
+ switch iFlags.Subcommand {
+ case "index":
+ err = db.Put(idx)
+ case "update":
+ err = db.Update(idx)
+ }
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ return 1
+ }
+ case "tidy":
+ if err := db.Tidy(); err != nil {
+ fmt.Fprintln(os.Stderr, "Error while tidying:", err)
+ return 1
+ }
+ default:
+ fmt.Fprintln(os.Stderr, "Unrecognised index subcommands: ", iFlags.Subcommand)
+ return 2
}
+
return 0
}