| // Copyright 2019 Google Inc. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package cmd |
| |
| import ( |
| "flag" |
| "fmt" |
| "os" |
| "path/filepath" |
| "strings" |
| |
| "github.com/google/zoekt" |
| "github.com/google/zoekt/build" |
| ) |
| |
| type largeFilesFlag []string |
| |
| func (f *largeFilesFlag) String() string { |
| s := append([]string{""}, *f...) |
| return strings.Join(s, "-large_file ") |
| } |
| |
| func (f *largeFilesFlag) Set(value string) error { |
| *f = append(*f, value) |
| return nil |
| } |
| |
| var ( |
| sizeMax = flag.Int("file_limit", 2<<20, "maximum file size") |
| trigramMax = flag.Int("max_trigram_count", 20000, "maximum number of trigrams per document") |
| shardLimit = flag.Int("shard_limit", 100<<20, "maximum corpus size for a shard") |
| parallelism = flag.Int("parallelism", 4, "maximum number of parallel indexing processes.") |
| indexDir = flag.String("index", build.DefaultDir, "directory for search indices") |
| version = flag.Bool("version", false, "Print version number") |
| ctags = flag.Bool("require_ctags", false, "If set, ctags calls must succeed.") |
| largeFiles = largeFilesFlag{} |
| ) |
| |
| func init() { |
| flag.Var(&largeFiles, "large_file", "A glob pattern where matching files are to be index regardless of their size. You can add multiple patterns by setting this more than once.") |
| } |
| |
| func OptionsFromFlags() *build.Options { |
| if *version { |
| name := filepath.Base(os.Args[0]) |
| fmt.Printf("%s version %q\n", name, zoekt.Version) |
| os.Exit(0) |
| } |
| |
| opts := &build.Options{ |
| Parallelism: *parallelism, |
| SizeMax: *sizeMax, |
| ShardMax: *shardLimit, |
| IndexDir: *indexDir, |
| CTagsMustSucceed: *ctags, |
| LargeFiles: largeFiles, |
| TrigramMax: *trigramMax, |
| } |
| opts.SetDefaults() |
| return opts |
| } |