From 09cd2f2f80920830cc3fd3636a6b9fc93b10f743 Mon Sep 17 00:00:00 2001 From: JP Appel Date: Fri, 18 Jul 2025 15:28:13 -0400 Subject: Add methods for updating existing document entries Additionally optimize various database queries --- cmd/index.go | 83 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 20 deletions(-) (limited to 'cmd') 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] \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 } -- cgit v1.2.3