in internal/mode/webserver/webserver.go [119:199]
func ParseFlags() (*Options, error) {
logDir := flag.String("log_dir", "", "log to this directory rather than stderr.")
logRefresh := flag.Duration("log_refresh", 24*time.Hour, "if using --log_dir, start writing a new file this often.")
listen := flag.String("listen", ":6070", "listen on this address.")
indexDirFlag := flag.String("index", "", "set index directory to use (DEPRECATED: use -index_dir instead)")
indexDirAliasFlag := flag.String("index_dir", "", "set index directory to use")
html := flag.Bool("html", true, "enable HTML interface")
enableRPC := flag.Bool("rpc", true, "enable go/net RPC")
enableIndexserverProxy := flag.Bool("indexserver_proxy", false, "proxy requests with URLs matching the path /indexserver/ to <index>/indexserver.sock")
enableLocalURLs := flag.Bool("print", false, "enable local result URLs")
enablePprof := flag.Bool("pprof", false, "set to enable remote profiling.")
hostCustomization := flag.String(
"host_customization", "",
"specify host customization, as HOST1=QUERY,HOST2=QUERY")
templateDir := flag.String("template_dir", "", "set directory from which to load custom .html.tpl template files")
dumpTemplates := flag.Bool("dump_templates", false, "dump templates into --template_dir and exit.")
versionFlag := flag.Bool("version", false, "Print the version and exit")
secretFilePath := flag.String("secret_path", "", "gitlab shared secret file path")
flag.Parse()
if *versionFlag {
// Version flag will be handled by the Run function
return &Options{
PrintVersion: true,
}, nil
}
if flag.NArg() == 0 && flag.NFlag() == 0 && len(os.Args) <= 2 {
// If no arguments are provided, just return the help text
flag.Usage()
return nil, fmt.Errorf("help requested")
}
if *dumpTemplates {
if *templateDir == "" {
return nil, fmt.Errorf("must set --template_dir")
}
if err := writeTemplates(*templateDir); err != nil {
return nil, err
}
// This is a special case where we want to exit early
return nil, fmt.Errorf("dump_templates completed, exiting")
}
if *logDir != "" {
if fi, err := os.Lstat(*logDir); err != nil || !fi.IsDir() {
return nil, fmt.Errorf("%s is not a directory", *logDir)
}
}
indexDir := *indexDirFlag
if *indexDirAliasFlag != "" {
indexDir = *indexDirAliasFlag
} else if *indexDirFlag != "" {
// Log deprecation warning only if user explicitly used -index
slog.Warn("The -index flag is deprecated, please use -index_dir instead")
}
if err := os.MkdirAll(indexDir, 0o755); err != nil { // nolint:gosec
return nil, err
}
if *secretFilePath != "" {
slog.Info("secret_path provided. Doing nothing with it for now", "secret_path", *secretFilePath)
}
return &Options{
LogDir: *logDir,
LogRefresh: *logRefresh,
Listen: *listen,
IndexDir: indexDir,
HTML: *html,
EnableRPC: *enableRPC,
EnableIndexserverProxy: *enableIndexserverProxy,
EnableLocalURLs: *enableLocalURLs,
EnablePprof: *enablePprof,
HostCustomization: *hostCustomization,
TemplateDir: *templateDir,
}, nil
}