func parseFlags()

in tools/mc2bq/main.go [39:141]


func parseFlags(params *export.Params, argv []string) (cliAction, error) {
	var schemaPath string
	var fs flag.FlagSet

	params.DatasetID = os.Getenv("MC2BQ_DATASET")
	params.TablePrefix = os.Getenv("MC2BQ_TABLE_PREFIX")

	// set default region
	defaultRegion := "us-central1"
	if gcloudRegion := os.Getenv("REGION"); gcloudRegion != "" {
		defaultRegion = gcloudRegion
	}
	if gcloudRegion := os.Getenv("MC2BQ_REGION"); gcloudRegion != "" {
		defaultRegion = gcloudRegion
	}

	// set default project from env
	params.ProjectID = os.Getenv("PROJECT")
	if projectFromEnv := os.Getenv("MC2BQ_PROJECT"); projectFromEnv != "" {
		params.ProjectID = projectFromEnv
	}

	fs.Usage = func() {
		fmt.Fprintf(os.Stderr, "Usage: %s [FLAGS...] <PROJECT> <DATASET> [TABLE-PREFIX]\n", os.Args[0])
		fmt.Fprintln(os.Stderr, messages.ExportCmdDescription.String())
		fmt.Fprintln(os.Stderr, "")
		fs.PrintDefaults()
	}
	fs.StringVar(
		&params.TargetProjectID,
		"target-project",
		"",
		messages.ParamDescriptionTargetProject.String())
	fs.StringVar(
		&params.Region,
		"region",
		defaultRegion,
		messages.ParamDescriptionRegion.String())
	fs.BoolVar(
		&params.Force,
		"force",
		false,
		messages.ParamDescriptionForce.String(),
	)
	fs.StringVar(
		&schemaPath,
		"schema-path",
		"",
		messages.ParamDescriptionSchemaPath.String(),
	)
	var versionFlag bool
	fs.BoolVar(&versionFlag, "version", false, messages.ParamDescriptionVersion.String())
	var dumpEmbeddedSchemaFlag bool
	fs.BoolVar(&dumpEmbeddedSchemaFlag, "dump-embedded-schema", false, messages.ParamDescriptionDumpSchema.String())
	err := fs.Parse(argv)
	if err != nil {
		return actionInvalid, err
	}
	// Keep right after parse so we ignore all other validations
	if versionFlag {
		return actionVersion, nil
	}

	// Keep right after version flag check so we ignore all other validations
	if dumpEmbeddedSchemaFlag {
		return actionDumpSchema, nil
	}

	args := fs.Args()
	if len(args) > 0 {
		params.ProjectID = fs.Arg(0)
	}
	if len(args) > 1 {
		params.DatasetID = fs.Arg(1)
	}
	if len(args) > 2 {
		params.TablePrefix = fs.Arg(2)
	}

	params.Force = params.Force || os.Getenv("MC2BQ_FORCE") != ""

	if params.ProjectID == "" || params.DatasetID == "" {
		fs.Usage()
		return actionExitFailure, nil
	}

	if params.TargetProjectID == "" {
		params.TargetProjectID = os.Getenv("MC2BQ_TARGET_PROJECT")
	}
	if params.TargetProjectID == "" {
		params.TargetProjectID = params.ProjectID
	}

	if schemaPath == "" {
		schemaPath = os.Getenv("MC2BQ_SCHEMA_PATH")
	}
	params.Schema, err = loadSchemas(schemaPath)
	if err != nil {
		return actionInvalid, err
	}

	return actionExport, nil
}