blob: d98415193f0981888b9c29919b1b7b5c65a79941 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package profilesreader
import (
"flag"
"path/filepath"
"strings"
"v.io/jiri/jiri"
)
// RegisterReaderFlags registers the flags commonly used with a profiles.Reader.
// --profiles-manifest, --skip-profiles, --profiles and --merge-policies.
func RegisterReaderFlags(flags *flag.FlagSet, profilesMode *ProfilesMode, manifest, profiles *string, defaultManifest string, policies *MergePolicies) {
flags.Var(profilesMode, "skip-profiles", "if set, no profiles will be used")
registerProfilesFlag(flags, profiles)
registerMergePoliciesFlag(flags, policies)
registerManifestFlag(flags, manifest, defaultManifest)
}
// RegisterProfilesFlag registers the --profiles flag
func registerProfilesFlag(flags *flag.FlagSet, profiles *string) {
flags.StringVar(profiles, "profiles", "base,jiri", "a comma separated list of profiles to use")
}
// RegisterMergePoliciesFlag registers the --merge-policies flag
func registerMergePoliciesFlag(flags *flag.FlagSet, policies *MergePolicies) {
flags.Var(policies, "merge-policies", "specify policies for merging environment variables")
}
// RegisterManifestFlag registers the commonly used --profiles-manifest
// flag with the supplied FlagSet.
func registerManifestFlag(flags *flag.FlagSet, manifest *string, defaultManifest string) {
root := jiri.FindRoot()
flags.StringVar(manifest, "profiles-manifest", filepath.Join(root, defaultManifest), "specify the profiles XML manifest filename.")
flags.Lookup("profiles-manifest").DefValue = filepath.Join("$JIRI_ROOT", defaultManifest)
}
type AppendJiriProfileMode bool
const (
AppendJiriProfile AppendJiriProfileMode = true
DoNotAppendJiriProfile = false
)
// InitProfilesFromFlag splits a comma separated list of profile names into
// a slice and optionally appends the 'jiri' profile if it's not already
// present.
func InitProfilesFromFlag(flag string, appendJiriProfile AppendJiriProfileMode) []string {
n := strings.Split(flag, ",")
if appendJiriProfile == AppendJiriProfile && !strings.Contains(flag, "jiri") {
n = append(n, "jiri")
}
return n
}