v.io/jiri: rename profiles subpackages

Rename profiles/{reader,commandline,manager} to profiles{reader,cmdline,manager}

MultiPart: 1/3
Change-Id: I1db4c36ea8646cd7973c72e2f8281aa04c00599e
diff --git a/profiles/commandline/.api b/profiles/commandline/.api
deleted file mode 100644
index 5782e39..0000000
--- a/profiles/commandline/.api
+++ /dev/null
@@ -1,17 +0,0 @@
-pkg commandline, const DefaultProfiles ideal-string
-pkg commandline, func IsFlagSet(*flag.FlagSet, string) bool
-pkg commandline, func RegisterDBFilenameFlag(*flag.FlagSet, *string, string)
-pkg commandline, func RegisterManagementCommands(*cmdline.Command, string)
-pkg commandline, func RegisterMergePoliciesFlag(*flag.FlagSet, *reader.MergePolicies)
-pkg commandline, func RegisterProfilesFlag(*flag.FlagSet, *string)
-pkg commandline, func RegisterReaderCommands(*cmdline.Command, string)
-pkg commandline, func RegisterReaderCommandsUsingParent(*cmdline.Command, *ReaderFlagValues, string)
-pkg commandline, func RegisterReaderFlags(*flag.FlagSet, *ReaderFlagValues, string)
-pkg commandline, type ReaderFlagValues struct
-pkg commandline, type ReaderFlagValues struct, DBFilename string
-pkg commandline, type ReaderFlagValues struct, MergePolicies reader.MergePolicies
-pkg commandline, type ReaderFlagValues struct, Profiles string
-pkg commandline, type ReaderFlagValues struct, ProfilesMode reader.ProfilesMode
-pkg commandline, type ReaderFlagValues struct, Target profiles.Target
-pkg commandline, type ReaderFlagValues struct, Verbose bool
-pkg commandline, var HelpMsg string
diff --git a/profiles/manager/.api b/profiles/manager/.api
deleted file mode 100644
index f183504..0000000
--- a/profiles/manager/.api
+++ /dev/null
@@ -1,5 +0,0 @@
-pkg manager, func EnsureProfileTargetIsInstalled(*jiri.X, *profiles.DB, string, jiri.RelPath, profiles.Target) error
-pkg manager, func EnsureProfileTargetIsUninstalled(*jiri.X, *profiles.DB, string, jiri.RelPath, profiles.Target) error
-pkg manager, func LookupManager(string) profiles.Manager
-pkg manager, func Managers() []string
-pkg manager, func Register(string, profiles.Manager)
diff --git a/profiles/manager/commandline/.api b/profiles/manager/commandline/.api
deleted file mode 100644
index 50d42b1..0000000
--- a/profiles/manager/commandline/.api
+++ /dev/null
@@ -1,3 +0,0 @@
-pkg commandline, func Init(string)
-pkg commandline, func Main(string)
-pkg commandline, var CommandLineDriver *cmdline.Command
diff --git a/profiles/profilescmdline/.api b/profiles/profilescmdline/.api
new file mode 100644
index 0000000..17a05cc
--- /dev/null
+++ b/profiles/profilescmdline/.api
@@ -0,0 +1,17 @@
+pkg profilescmdline, const DefaultProfiles ideal-string
+pkg profilescmdline, func HelpMsg() string
+pkg profilescmdline, func IsFlagSet(*flag.FlagSet, string) bool
+pkg profilescmdline, func RegisterDBFilenameFlag(*flag.FlagSet, *string, string)
+pkg profilescmdline, func RegisterManagementCommands(*cmdline.Command, string)
+pkg profilescmdline, func RegisterMergePoliciesFlag(*flag.FlagSet, *profilesreader.MergePolicies)
+pkg profilescmdline, func RegisterProfilesFlag(*flag.FlagSet, *string)
+pkg profilescmdline, func RegisterReaderCommands(*cmdline.Command, string)
+pkg profilescmdline, func RegisterReaderCommandsUsingParent(*cmdline.Command, *ReaderFlagValues, string)
+pkg profilescmdline, func RegisterReaderFlags(*flag.FlagSet, *ReaderFlagValues, string)
+pkg profilescmdline, type ReaderFlagValues struct
+pkg profilescmdline, type ReaderFlagValues struct, DBFilename string
+pkg profilescmdline, type ReaderFlagValues struct, MergePolicies profilesreader.MergePolicies
+pkg profilescmdline, type ReaderFlagValues struct, Profiles string
+pkg profilescmdline, type ReaderFlagValues struct, ProfilesMode profilesreader.ProfilesMode
+pkg profilescmdline, type ReaderFlagValues struct, Target profiles.Target
+pkg profilescmdline, type ReaderFlagValues struct, Verbose bool
diff --git a/profiles/commandline/cmd_test.go b/profiles/profilescmdline/cmd_test.go
similarity index 93%
rename from profiles/commandline/cmd_test.go
rename to profiles/profilescmdline/cmd_test.go
index 6a02359..8937d2f 100644
--- a/profiles/commandline/cmd_test.go
+++ b/profiles/profilescmdline/cmd_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package commandline
+package profilescmdline
 
 import (
 	"v.io/jiri/jiri"
diff --git a/profiles/commandline/commandline_test.go b/profiles/profilescmdline/commandline_test.go
similarity index 77%
rename from profiles/commandline/commandline_test.go
rename to profiles/profilescmdline/commandline_test.go
index af8bd37..272273e 100644
--- a/profiles/commandline/commandline_test.go
+++ b/profiles/profilescmdline/commandline_test.go
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package commandline_test
+package profilescmdline_test
 
 import (
 	"fmt"
 	"testing"
 
-	"v.io/jiri/profiles/commandline"
-	"v.io/jiri/profiles/reader"
+	"v.io/jiri/profiles/profilescmdline"
+	"v.io/jiri/profiles/profilesreader"
 	"v.io/x/lib/cmdline"
 )
 
@@ -22,13 +22,13 @@
 }
 
 func TestReaderParent(t *testing.T) {
-	commandline.Reset()
+	profilescmdline.Reset()
 	p := parent
 	args := []string{"--profiles-db=foo", "--skip-profiles"}
-	var rf commandline.ReaderFlagValues
+	var rf profilescmdline.ReaderFlagValues
 	// If RegisterReaderCommandsUsingParent is called, the common reader
 	// flags are hosted by the parent command.
-	commandline.RegisterReaderCommandsUsingParent(&p, &rf, "")
+	profilescmdline.RegisterReaderCommandsUsingParent(&p, &rf, "")
 	if got, want := len(p.Children), 2; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
@@ -41,13 +41,13 @@
 	if got, want := rf.DBFilename, "foo"; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
-	if got, want := rf.ProfilesMode, reader.SkipProfiles; got != want {
+	if got, want := rf.ProfilesMode, profilesreader.SkipProfiles; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
 
-	commandline.Reset()
+	profilescmdline.Reset()
 	p = parent
-	commandline.RegisterReaderFlags(&p.Flags, &rf, "")
+	profilescmdline.RegisterReaderFlags(&p.Flags, &rf, "")
 	if got, want := len(p.Children), 0; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
@@ -58,11 +58,11 @@
 		t.Errorf("got %v, want %v", got, want)
 	}
 
-	commandline.Reset()
+	profilescmdline.Reset()
 	p = parent
 	// If RegisterReaderCommands is not called, the common reader
 	// flags are hosted by the subcommands.
-	commandline.RegisterReaderCommands(&p, "")
+	profilescmdline.RegisterReaderCommands(&p, "")
 	if err := p.Flags.Parse(args); err == nil {
 		t.Fatal(fmt.Errorf("this should have failed"))
 	}
@@ -74,10 +74,10 @@
 }
 
 func TestSubcommandFlags(t *testing.T) {
-	commandline.Reset()
+	profilescmdline.Reset()
 	p := parent
-	var rf commandline.ReaderFlagValues
-	commandline.RegisterReaderCommandsUsingParent(&p, &rf, "")
+	var rf profilescmdline.ReaderFlagValues
+	profilescmdline.RegisterReaderCommandsUsingParent(&p, &rf, "")
 	if got, want := len(p.Children), 2; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
@@ -89,9 +89,9 @@
 		t.Error(err)
 	}
 
-	commandline.Reset()
+	profilescmdline.Reset()
 	p = parent
-	commandline.RegisterReaderCommands(&p, "")
+	profilescmdline.RegisterReaderCommands(&p, "")
 	if got, want := len(p.Children), 2; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
diff --git a/profiles/commandline/help.go b/profiles/profilescmdline/help.go
similarity index 96%
rename from profiles/commandline/help.go
rename to profiles/profilescmdline/help.go
index e4023ea..0dd1c99 100644
--- a/profiles/commandline/help.go
+++ b/profiles/profilescmdline/help.go
@@ -2,9 +2,11 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package commandline
+package profilescmdline
 
-var HelpMsg = `
+// HelpMsg returns a detailed help message for the profiles packages.
+func HelpMsg() string {
+	return `
 Profiles are used to manage external sofware dependencies and offer a balance
 between providing no support at all and a full blown package manager.
 Profiles can be built natively as well as being cross compiled.
@@ -71,3 +73,4 @@
 They must implement the interfaces defined by that package and be imported
 (e.g. import _ "myprofile") by the command line tools that are to use them.
 `
+}
diff --git a/profiles/commandline/manager_cmdline.go b/profiles/profilescmdline/manager_cmdline.go
similarity index 96%
rename from profiles/commandline/manager_cmdline.go
rename to profiles/profilescmdline/manager_cmdline.go
index bdc7f4a..44bdafb 100644
--- a/profiles/commandline/manager_cmdline.go
+++ b/profiles/profilescmdline/manager_cmdline.go
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package commandline provides a command line driver (for v.io/x/lib/cmdline)
+// Package profilescmdline provides a command line driver (for v.io/x/lib/cmdline)
 // for implementing jiri 'profile' subcommands. The intent is to support
 // project specific instances of such profiles for managing software
 // dependencies.
-package commandline
+package profilescmdline
 
 import (
 	"flag"
@@ -15,7 +15,7 @@
 
 	"v.io/jiri/jiri"
 	"v.io/jiri/profiles"
-	"v.io/jiri/profiles/manager"
+	"v.io/jiri/profiles/profilesmanager"
 	"v.io/x/lib/cmdline"
 )
 
@@ -174,11 +174,11 @@
 // init a command that takes a list of profile managers as its arguments.
 func initProfileManagersCommand(jirix *jiri.X, dbfile string, args []string) ([]string, *profiles.DB, error) {
 	if len(args) == 0 {
-		args = manager.Managers()
+		args = profilesmanager.Managers()
 	} else {
 		for _, n := range args {
-			if mgr := manager.LookupManager(n); mgr == nil {
-				avail := manager.Managers()
+			if mgr := profilesmanager.LookupManager(n); mgr == nil {
+				avail := profilesmanager.Managers()
 				return nil, nil, fmt.Errorf("profile %v is not one of the available ones: %s", n, strings.Join(avail, ", "))
 			}
 		}
@@ -219,7 +219,7 @@
 		return err
 	}
 	for _, n := range args {
-		mgr := manager.LookupManager(n)
+		mgr := profilesmanager.LookupManager(n)
 		profile := db.LookupProfile(n)
 		if profile == nil {
 			continue
@@ -248,7 +248,7 @@
 
 func cleanupGC(jirix *jiri.X, db *profiles.DB, root jiri.RelPath, verbose bool, args []string) error {
 	for _, name := range args {
-		mgr := manager.LookupManager(name)
+		mgr := profilesmanager.LookupManager(name)
 		if mgr == nil {
 			fmt.Fprintf(jirix.Stderr(), "%s is not linked into this binary", name)
 			continue
@@ -270,7 +270,7 @@
 
 func cleanupEnsureVersionsAreSet(jirix *jiri.X, db *profiles.DB, root jiri.RelPath, verbose bool, args []string) error {
 	for _, name := range args {
-		mgr := manager.LookupManager(name)
+		mgr := profilesmanager.LookupManager(name)
 		if mgr == nil {
 			fmt.Fprintf(jirix.Stderr(), "%s is not linked into this binary", name)
 			continue
@@ -393,7 +393,7 @@
 		}
 	}
 	for _, name := range names {
-		mgr := manager.LookupManager(name)
+		mgr := profilesmanager.LookupManager(name)
 		def, err := targetAtDefaultVersion(mgr, cl.target)
 		if err != nil {
 			return err
@@ -421,7 +421,7 @@
 		if profile == nil {
 			continue
 		}
-		mgr := manager.LookupManager(name)
+		mgr := profilesmanager.LookupManager(name)
 		var targets []*profiles.Target
 		if cl.allTargets {
 			targets = profile.Targets()
diff --git a/profiles/commandline/reader_cmdline.go b/profiles/profilescmdline/reader_cmdline.go
similarity index 92%
rename from profiles/commandline/reader_cmdline.go
rename to profiles/profilescmdline/reader_cmdline.go
index 6c482bb..1573684 100644
--- a/profiles/commandline/reader_cmdline.go
+++ b/profiles/profilescmdline/reader_cmdline.go
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package commandline provides a command line driver (for v.io/x/lib/cmdline)
+// Package profilescmdline provides a command line driver (for v.io/x/lib/cmdline)
 // for implementing jiri 'profile' subcommands. The intent is to support
 // project specific instances of such profiles for managing software
 // dependencies.
-package commandline
+package profilescmdline
 
 import (
 	"bytes"
@@ -18,8 +18,8 @@
 
 	"v.io/jiri/jiri"
 	"v.io/jiri/profiles"
-	"v.io/jiri/profiles/manager"
-	"v.io/jiri/profiles/reader"
+	"v.io/jiri/profiles/profilesmanager"
+	"v.io/jiri/profiles/profilesreader"
 	"v.io/x/lib/cmdline"
 	"v.io/x/lib/textutil"
 )
@@ -90,7 +90,7 @@
 // required to configure and use the profiles/Reader package.
 type ReaderFlagValues struct {
 	// The value of --skip-profiles
-	ProfilesMode reader.ProfilesMode
+	ProfilesMode profilesreader.ProfilesMode
 	// The value of --profiles-db
 	DBFilename string
 	// The value of --profiles
@@ -98,7 +98,7 @@
 	// The value of --target and --env
 	Target profiles.Target
 	// The value of --merge-policies
-	MergePolicies reader.MergePolicies
+	MergePolicies profilesreader.MergePolicies
 	// The value of -v
 	Verbose bool
 }
@@ -138,7 +138,7 @@
 }
 
 // RegisterMergePoliciesFlag registers the --merge-policies flag
-func RegisterMergePoliciesFlag(flags *flag.FlagSet, policies *reader.MergePolicies) {
+func RegisterMergePoliciesFlag(flags *flag.FlagSet, policies *profilesreader.MergePolicies) {
 	flags.Var(policies, "merge-policies", "specify policies for merging environment variables")
 }
 
@@ -155,7 +155,7 @@
 	flags.Var(&fv.ProfilesMode, "skip-profiles", "if set, no profiles will be used")
 	RegisterDBFilenameFlag(flags, &fv.DBFilename, defaultDBFilename)
 	RegisterProfilesFlag(flags, &fv.Profiles)
-	fv.MergePolicies = reader.JiriMergePolicies()
+	fv.MergePolicies = profilesreader.JiriMergePolicies()
 	RegisterMergePoliciesFlag(flags, &fv.MergePolicies)
 	profiles.RegisterTargetAndEnvFlags(flags, &fv.Target)
 }
@@ -187,7 +187,7 @@
 }
 
 func newReaderFlags() *ReaderFlagValues {
-	return &ReaderFlagValues{MergePolicies: reader.JiriMergePolicies()}
+	return &ReaderFlagValues{MergePolicies: profilesreader.JiriMergePolicies()}
 }
 
 // registerListCommand the profiles list subcommand and returns it
@@ -230,16 +230,16 @@
 	if listFlags.available {
 		if listFlags.Verbose {
 			fmt.Fprintf(jirix.Stdout(), "Available Profiles:\n")
-			for _, name := range manager.Managers() {
-				mgr := manager.LookupManager(name)
+			for _, name := range profilesmanager.Managers() {
+				mgr := profilesmanager.LookupManager(name)
 				vi := mgr.VersionInfo()
 				fmt.Fprintf(jirix.Stdout(), "%s: versions: %s\n", name, vi)
 			}
 		} else {
-			fmt.Fprintf(jirix.Stdout(), "%s\n", strings.Join(manager.Managers(), ", "))
+			fmt.Fprintf(jirix.Stdout(), "%s\n", strings.Join(profilesmanager.Managers(), ", "))
 		}
 	}
-	rd, err := reader.NewReader(jirix, listFlags.ProfilesMode, listFlags.DBFilename)
+	rd, err := profilesreader.NewReader(jirix, listFlags.ProfilesMode, listFlags.DBFilename)
 	if err != nil {
 		return err
 	}
@@ -270,7 +270,7 @@
 	} else {
 		for _, name := range availableNames {
 			profile := rd.LookupProfile(name)
-			mgr := manager.LookupManager(name)
+			mgr := profilesmanager.LookupManager(name)
 			out := &bytes.Buffer{}
 			var targets profiles.Targets
 			if listFlags.Target.IsSet() {
@@ -354,7 +354,7 @@
 	return out.String()
 }
 
-func fmtInfo(jirix *jiri.X, infoFmt string, rd *reader.Reader, mgr profiles.Manager, profile *profiles.Profile, target *profiles.Target) (string, error) {
+func fmtInfo(jirix *jiri.X, infoFmt string, rd *profilesreader.Reader, mgr profiles.Manager, profile *profiles.Profile, target *profiles.Target) (string, error) {
 	if len(infoFmt) > 0 {
 		// Populate an instance listInfo
 		info := &listInfo{}
@@ -405,7 +405,7 @@
 	if len(envFlags.Profiles) == 0 {
 		return fmt.Errorf("no profiles were specified using --profiles")
 	}
-	rd, err := reader.NewReader(jirix, envFlags.ProfilesMode, envFlags.DBFilename)
+	rd, err := profilesreader.NewReader(jirix, envFlags.ProfilesMode, envFlags.DBFilename)
 	if err != nil {
 		return err
 	}
diff --git a/profiles/profilesmanager/.api b/profiles/profilesmanager/.api
new file mode 100644
index 0000000..4b8a6db
--- /dev/null
+++ b/profiles/profilesmanager/.api
@@ -0,0 +1,5 @@
+pkg profilesmanager, func EnsureProfileTargetIsInstalled(*jiri.X, *profiles.DB, string, jiri.RelPath, profiles.Target) error
+pkg profilesmanager, func EnsureProfileTargetIsUninstalled(*jiri.X, *profiles.DB, string, jiri.RelPath, profiles.Target) error
+pkg profilesmanager, func LookupManager(string) profiles.Manager
+pkg profilesmanager, func Managers() []string
+pkg profilesmanager, func Register(string, profiles.Manager)
diff --git a/profiles/manager/manager.go b/profiles/profilesmanager/manager.go
similarity index 94%
rename from profiles/manager/manager.go
rename to profiles/profilesmanager/manager.go
index 1c407ff..98bbf2b 100644
--- a/profiles/manager/manager.go
+++ b/profiles/profilesmanager/manager.go
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package manager provides support for managing jiri profiles.
+// Package profilesmanager provides support for managing jiri profiles.
 // In particular for installing and uninstalling them. It provides a
 // registration mechanism for profile implementations to call from an init
 // function to add themselves to the suite profiles available within this
 // application.
-package manager
+package profilesmanager
 
 import (
 	"sort"
diff --git a/profiles/manager/manager_test.go b/profiles/profilesmanager/manager_test.go
similarity index 93%
rename from profiles/manager/manager_test.go
rename to profiles/profilesmanager/manager_test.go
index 7b382e3..7a10c41 100644
--- a/profiles/manager/manager_test.go
+++ b/profiles/profilesmanager/manager_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package manager_test
+package profilesmanager_test
 
 import (
 	"flag"
@@ -13,7 +13,7 @@
 
 	"v.io/jiri/jiri"
 	"v.io/jiri/profiles"
-	"v.io/jiri/profiles/manager"
+	"v.io/jiri/profiles/profilesmanager"
 	"v.io/jiri/tool"
 )
 
@@ -83,7 +83,7 @@
 
 	init := func() {
 		mgr := newProfileMgr(myProfile)
-		manager.Register(myProfile, mgr)
+		profilesmanager.Register(myProfile, mgr)
 		flags := flag.NewFlagSet("example", flag.ContinueOnError)
 		profiles.RegisterTargetAndEnvFlags(flags, &target)
 		flags.Parse([]string{"--target=arm-linux@1", "--env=A=B,C=D", "--env=E=F"})
@@ -91,7 +91,7 @@
 	init()
 
 	profileRoot := jiri.NewRelPath("profiles")
-	mgr := manager.LookupManager(myProfile)
+	mgr := profilesmanager.LookupManager(myProfile)
 	if mgr == nil {
 		panic("manager not found for: " + myProfile)
 	}
@@ -116,7 +116,7 @@
 	// Read the profile database.
 	pdb.Read(jirix, filename)
 
-	mgr = manager.LookupManager(myProfile)
+	mgr = profilesmanager.LookupManager(myProfile)
 	if mgr == nil {
 		panic("manager not found for: " + myProfile)
 	}
diff --git a/profiles/manager/util.go b/profiles/profilesmanager/util.go
similarity index 98%
rename from profiles/manager/util.go
rename to profiles/profilesmanager/util.go
index eba260c..b1eaaa9 100644
--- a/profiles/manager/util.go
+++ b/profiles/profilesmanager/util.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package manager
+package profilesmanager
 
 import (
 	"fmt"
diff --git a/profiles/profilesreader/.api b/profiles/profilesreader/.api
new file mode 100644
index 0000000..b7c4f84
--- /dev/null
+++ b/profiles/profilesreader/.api
@@ -0,0 +1,72 @@
+pkg profilesreader, const Append MergeAction
+pkg profilesreader, const AppendJiriProfile AppendJiriProfileMode
+pkg profilesreader, const DoNotAppendJiriProfile bool
+pkg profilesreader, const First MergeAction
+pkg profilesreader, const Ignore MergeAction
+pkg profilesreader, const IgnoreBaseAndAppend MergeAction
+pkg profilesreader, const IgnoreBaseAndPrepend MergeAction
+pkg profilesreader, const IgnoreBaseAndUseFirst MergeAction
+pkg profilesreader, const IgnoreBaseAndUseLast MergeAction
+pkg profilesreader, const IgnoreProfiles MergeAction
+pkg profilesreader, const Last MergeAction
+pkg profilesreader, const Prepend MergeAction
+pkg profilesreader, const SkipProfiles ProfilesMode
+pkg profilesreader, const UseProfiles ProfilesMode
+pkg profilesreader, func GoEnvironmentFromOS() []string
+pkg profilesreader, func InitProfilesFromFlag(string, AppendJiriProfileMode) []string
+pkg profilesreader, func JiriMergePolicies() MergePolicies
+pkg profilesreader, func MergeEnv(map[string]MergePolicy, *envvar.Vars, ...[]string)
+pkg profilesreader, func NewReader(*jiri.X, ProfilesMode, string) (*Reader, error)
+pkg profilesreader, func ProfileMergePolicies() MergePolicies
+pkg profilesreader, func RegisterReaderFlags(*flag.FlagSet, *ProfilesMode, *string, *string, string, *MergePolicies)
+pkg profilesreader, func UnsetGoEnvMap(map[string]string)
+pkg profilesreader, func UnsetGoEnvVars(*envvar.Vars)
+pkg profilesreader, func WithDefaultVersion(profiles.Target) profiles.Target
+pkg profilesreader, method (*MergePolicy) String() string
+pkg profilesreader, method (*ProfilesMode) Get() interface{}
+pkg profilesreader, method (*ProfilesMode) IsBoolFlag() bool
+pkg profilesreader, method (*ProfilesMode) Set(string) error
+pkg profilesreader, method (*ProfilesMode) String() string
+pkg profilesreader, method (*Reader) EnvFromProfile(string, profiles.Target) []string
+pkg profilesreader, method (*Reader) GoPath() string
+pkg profilesreader, method (*Reader) JiriProfile() []string
+pkg profilesreader, method (*Reader) LookupProfile(string) *profiles.Profile
+pkg profilesreader, method (*Reader) LookupProfileTarget(string, profiles.Target) *profiles.Target
+pkg profilesreader, method (*Reader) MergeEnv(map[string]MergePolicy, ...[]string)
+pkg profilesreader, method (*Reader) MergeEnvFromProfiles(map[string]MergePolicy, profiles.Target, ...string)
+pkg profilesreader, method (*Reader) PrependToPATH(string)
+pkg profilesreader, method (*Reader) ProfileNames() []string
+pkg profilesreader, method (*Reader) Profiles() []*profiles.Profile
+pkg profilesreader, method (*Reader) SchemaVersion() profiles.Version
+pkg profilesreader, method (*Reader) SkippingProfiles() bool
+pkg profilesreader, method (*Reader) VDLPath() string
+pkg profilesreader, method (*Reader) ValidateRequestedProfilesAndTarget([]string, profiles.Target) error
+pkg profilesreader, method (MergePolicies) DebugString() string
+pkg profilesreader, method (MergePolicies) Get() interface{}
+pkg profilesreader, method (MergePolicies) Set(string) error
+pkg profilesreader, method (MergePolicies) String() string
+pkg profilesreader, method (MergePolicies) Usage() string
+pkg profilesreader, type AppendJiriProfileMode bool
+pkg profilesreader, type MergeAction int
+pkg profilesreader, type MergePolicies map[string]MergePolicy
+pkg profilesreader, type MergePolicy struct
+pkg profilesreader, type MergePolicy struct, Action MergeAction
+pkg profilesreader, type MergePolicy struct, Separator string
+pkg profilesreader, type ProfilesMode bool
+pkg profilesreader, type Reader struct
+pkg profilesreader, type Reader struct, embedded *envvar.Vars
+pkg profilesreader, var AppendFlag MergePolicy
+pkg profilesreader, var AppendPath MergePolicy
+pkg profilesreader, var GoFlags []string
+pkg profilesreader, var IgnoreBaseAppendFlag MergePolicy
+pkg profilesreader, var IgnoreBaseAppendPath MergePolicy
+pkg profilesreader, var IgnoreBasePrependFlag MergePolicy
+pkg profilesreader, var IgnoreBasePrependPath MergePolicy
+pkg profilesreader, var IgnoreBaseUseFirst MergePolicy
+pkg profilesreader, var IgnoreBaseUseLast MergePolicy
+pkg profilesreader, var IgnoreVariable MergePolicy
+pkg profilesreader, var PrependFlag MergePolicy
+pkg profilesreader, var PrependPath MergePolicy
+pkg profilesreader, var UseBaseIgnoreProfiles MergePolicy
+pkg profilesreader, var UseFirst MergePolicy
+pkg profilesreader, var UseLast MergePolicy
diff --git a/profiles/reader/flags.go b/profiles/profilesreader/flags.go
similarity index 98%
rename from profiles/reader/flags.go
rename to profiles/profilesreader/flags.go
index d7fa0f4..d984151 100644
--- a/profiles/reader/flags.go
+++ b/profiles/profilesreader/flags.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package reader
+package profilesreader
 
 import (
 	"flag"
diff --git a/profiles/reader/flags_test.go b/profiles/profilesreader/flags_test.go
similarity index 95%
rename from profiles/reader/flags_test.go
rename to profiles/profilesreader/flags_test.go
index 40130a7..946bf34 100644
--- a/profiles/reader/flags_test.go
+++ b/profiles/profilesreader/flags_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package reader
+package profilesreader
 
 import "testing"
 
diff --git a/profiles/reader/reader.go b/profiles/profilesreader/reader.go
similarity index 99%
rename from profiles/reader/reader.go
rename to profiles/profilesreader/reader.go
index 605f33f..a2355e7 100644
--- a/profiles/reader/reader.go
+++ b/profiles/profilesreader/reader.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package reader provides support for reading and processing jiri profiles.
-package reader
+// Package profilesreader provides support for reading and processing jiri profiles.
+package profilesreader
 
 import (
 	"bytes"
diff --git a/profiles/reader/reader_test.go b/profiles/profilesreader/reader_test.go
similarity index 72%
rename from profiles/reader/reader_test.go
rename to profiles/profilesreader/reader_test.go
index f56a55e..c7e4e2e 100644
--- a/profiles/reader/reader_test.go
+++ b/profiles/profilesreader/reader_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package reader_test
+package profilesreader_test
 
 import (
 	"flag"
@@ -13,7 +13,7 @@
 
 	"v.io/jiri/jiritest"
 	"v.io/jiri/profiles"
-	"v.io/jiri/profiles/reader"
+	"v.io/jiri/profiles/profilesreader"
 	"v.io/jiri/project"
 	"v.io/jiri/util"
 	"v.io/x/lib/envvar"
@@ -22,7 +22,7 @@
 func TestReader(t *testing.T) {
 	fake, cleanup := jiritest.NewFakeJiriRoot(t)
 	defer cleanup()
-	rd, err := reader.NewReader(fake.X, reader.UseProfiles, filepath.Join("testdata", "m2.xml"))
+	rd, err := profilesreader.NewReader(fake.X, profilesreader.UseProfiles, filepath.Join("testdata", "m2.xml"))
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -32,7 +32,7 @@
 	if err != nil {
 		t.Fatal(err)
 	}
-	rd.MergeEnvFromProfiles(reader.JiriMergePolicies(), native, "go", "syncbase")
+	rd.MergeEnvFromProfiles(profilesreader.JiriMergePolicies(), native, "go", "syncbase")
 	if got, want := rd.Get("CGO_CFLAGS"), "-IX -IY -IA -IB"; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
@@ -57,7 +57,7 @@
 	if err := pdb.Write(fake.X, filename); err != nil {
 		t.Fatal(err)
 	}
-	rd, err := reader.NewReader(fake.X, reader.UseProfiles, filename)
+	rd, err := profilesreader.NewReader(fake.X, profilesreader.UseProfiles, filename)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -66,10 +66,10 @@
 	if err != nil {
 		t.Fatal(err)
 	}
-	rd.MergeEnvFromProfiles(map[string]reader.MergePolicy{
-		"A": reader.AppendFlag,
-		"B": reader.UseLast,
-		"Z": reader.IgnoreBaseUseLast},
+	rd.MergeEnvFromProfiles(map[string]profilesreader.MergePolicy{
+		"A": profilesreader.AppendFlag,
+		"B": profilesreader.UseLast,
+		"Z": profilesreader.IgnoreBaseUseLast},
 		t1Target, "a", "b")
 	vars := rd.ToMap()
 	if got, want := len(vars), 3; got != want {
@@ -89,27 +89,27 @@
 	c := []string{"FS1=C", "FS2=C", "FS3=C", "A=BL", "B=C", "C=DL", "P=C", "V=C", "P1=C", "V1=C", "Y=ZL", "GP=XL", "IA=C", "IB=C", "IC=C", "ID=C", "IE=C", "IG3=B"}
 	env := envvar.VarsFromSlice(base)
 
-	policies := map[string]reader.MergePolicy{
-		"GP":  reader.UseLast,
-		"P":   reader.PrependPath,
-		"V":   reader.PrependFlag,
-		"P1":  reader.AppendPath,
-		"V1":  reader.AppendFlag,
-		"A":   reader.IgnoreBaseUseLast,
-		"B":   reader.UseBaseIgnoreProfiles,
-		"IA":  reader.IgnoreBaseAppendPath,
-		"IB":  reader.IgnoreBaseAppendFlag,
-		"IC":  reader.IgnoreBasePrependPath,
-		"ID":  reader.IgnoreBasePrependFlag,
-		"IE":  reader.IgnoreBaseUseLast,
-		"IF":  reader.IgnoreBaseUseFirst,
-		"IG1": reader.IgnoreVariable,
-		"IG2": reader.IgnoreVariable,
-		"IG3": reader.IgnoreVariable,
-		"C":   reader.UseLast,
-		"Y":   reader.UseLast,
+	policies := map[string]profilesreader.MergePolicy{
+		"GP":  profilesreader.UseLast,
+		"P":   profilesreader.PrependPath,
+		"V":   profilesreader.PrependFlag,
+		"P1":  profilesreader.AppendPath,
+		"V1":  profilesreader.AppendFlag,
+		"A":   profilesreader.IgnoreBaseUseLast,
+		"B":   profilesreader.UseBaseIgnoreProfiles,
+		"IA":  profilesreader.IgnoreBaseAppendPath,
+		"IB":  profilesreader.IgnoreBaseAppendFlag,
+		"IC":  profilesreader.IgnoreBasePrependPath,
+		"ID":  profilesreader.IgnoreBasePrependFlag,
+		"IE":  profilesreader.IgnoreBaseUseLast,
+		"IF":  profilesreader.IgnoreBaseUseFirst,
+		"IG1": profilesreader.IgnoreVariable,
+		"IG2": profilesreader.IgnoreVariable,
+		"IG3": profilesreader.IgnoreVariable,
+		"C":   profilesreader.UseLast,
+		"Y":   profilesreader.UseLast,
 	}
-	reader.MergeEnv(policies, env, b, c)
+	profilesreader.MergeEnv(policies, env, b, c)
 
 	expected := []string{"B=A", "A=BL", "C=DL", "GP=XL", "P1=A:B:C", "P=C:B:A",
 		"V1=A B C", "V=C B A", "W=X", "Y=ZL",
@@ -171,7 +171,7 @@
 		t.Fatalf("%v", err)
 	}
 
-	rd, err := reader.NewReader(fake.X, reader.UseProfiles, filepath.Join(fake.X.Root, "profiles-manifest"))
+	rd, err := profilesreader.NewReader(fake.X, profilesreader.UseProfiles, filepath.Join(fake.X.Root, "profiles-manifest"))
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -204,7 +204,7 @@
 }
 
 func TestMergePolicyFlags(t *testing.T) {
-	mp := reader.MergePolicies{}
+	mp := profilesreader.MergePolicies{}
 	fs := flag.NewFlagSet("test", flag.ContinueOnError)
 	fs.Var(mp, "p", mp.Usage())
 	all := []string{"-p=:a", "-p=+b", "-p=^c", "-p=^:d", "-p=^e:", "-p=^+f", "-p=^g+", "-p=last*", "-p=xx:", "-p=yy+", "-p=zz^"}
@@ -213,26 +213,26 @@
 	}
 	for _, c := range []struct {
 		k string
-		p reader.MergePolicy
+		p profilesreader.MergePolicy
 	}{
-		{"a", reader.AppendPath},
-		{"b", reader.AppendFlag},
-		{"c", reader.IgnoreBaseUseFirst},
-		{"d", reader.IgnoreBaseAppendPath},
-		{"e", reader.IgnoreBasePrependPath},
-		{"f", reader.IgnoreBaseAppendFlag},
-		{"g", reader.IgnoreBasePrependFlag},
-		{"last", reader.UseLast},
-		{"xx", reader.PrependPath},
-		{"yy", reader.PrependFlag},
-		{"zz", reader.UseBaseIgnoreProfiles},
+		{"a", profilesreader.AppendPath},
+		{"b", profilesreader.AppendFlag},
+		{"c", profilesreader.IgnoreBaseUseFirst},
+		{"d", profilesreader.IgnoreBaseAppendPath},
+		{"e", profilesreader.IgnoreBasePrependPath},
+		{"f", profilesreader.IgnoreBaseAppendFlag},
+		{"g", profilesreader.IgnoreBasePrependFlag},
+		{"last", profilesreader.UseLast},
+		{"xx", profilesreader.PrependPath},
+		{"yy", profilesreader.PrependFlag},
+		{"zz", profilesreader.UseBaseIgnoreProfiles},
 	} {
 		if got, want := mp[c.k], c.p; got != want {
 			t.Errorf("(%s) got %v, want %v", c.k, got, want)
 		}
 	}
 
-	mp = reader.MergePolicies{}
+	mp = profilesreader.MergePolicies{}
 	fs1 := flag.NewFlagSet("test1", flag.ContinueOnError)
 	fs1.Var(mp, "p", mp.Usage())
 	if err := fs1.Parse([]string{"-p=yy+,zz^"}); err != nil {
@@ -243,7 +243,7 @@
 	}
 
 	for i, cl := range append(all, "-p=+b,^c,zz^") {
-		mp := reader.MergePolicies{}
+		mp := profilesreader.MergePolicies{}
 		fs := flag.NewFlagSet(fmt.Sprintf("t%d", i), flag.ContinueOnError)
 		fs.Var(mp, "p", mp.Usage())
 		err := fs.Parse([]string{cl})
diff --git a/profiles/reader/testdata/m2.xml b/profiles/profilesreader/testdata/m2.xml
similarity index 100%
rename from profiles/reader/testdata/m2.xml
rename to profiles/profilesreader/testdata/m2.xml
diff --git a/profiles/reader/.api b/profiles/reader/.api
deleted file mode 100644
index 25db26c..0000000
--- a/profiles/reader/.api
+++ /dev/null
@@ -1,72 +0,0 @@
-pkg reader, const Append MergeAction
-pkg reader, const AppendJiriProfile AppendJiriProfileMode
-pkg reader, const DoNotAppendJiriProfile bool
-pkg reader, const First MergeAction
-pkg reader, const Ignore MergeAction
-pkg reader, const IgnoreBaseAndAppend MergeAction
-pkg reader, const IgnoreBaseAndPrepend MergeAction
-pkg reader, const IgnoreBaseAndUseFirst MergeAction
-pkg reader, const IgnoreBaseAndUseLast MergeAction
-pkg reader, const IgnoreProfiles MergeAction
-pkg reader, const Last MergeAction
-pkg reader, const Prepend MergeAction
-pkg reader, const SkipProfiles ProfilesMode
-pkg reader, const UseProfiles ProfilesMode
-pkg reader, func GoEnvironmentFromOS() []string
-pkg reader, func InitProfilesFromFlag(string, AppendJiriProfileMode) []string
-pkg reader, func JiriMergePolicies() MergePolicies
-pkg reader, func MergeEnv(map[string]MergePolicy, *envvar.Vars, ...[]string)
-pkg reader, func NewReader(*jiri.X, ProfilesMode, string) (*Reader, error)
-pkg reader, func ProfileMergePolicies() MergePolicies
-pkg reader, func RegisterReaderFlags(*flag.FlagSet, *ProfilesMode, *string, *string, string, *MergePolicies)
-pkg reader, func UnsetGoEnvMap(map[string]string)
-pkg reader, func UnsetGoEnvVars(*envvar.Vars)
-pkg reader, func WithDefaultVersion(profiles.Target) profiles.Target
-pkg reader, method (*MergePolicy) String() string
-pkg reader, method (*ProfilesMode) Get() interface{}
-pkg reader, method (*ProfilesMode) IsBoolFlag() bool
-pkg reader, method (*ProfilesMode) Set(string) error
-pkg reader, method (*ProfilesMode) String() string
-pkg reader, method (*Reader) EnvFromProfile(string, profiles.Target) []string
-pkg reader, method (*Reader) GoPath() string
-pkg reader, method (*Reader) JiriProfile() []string
-pkg reader, method (*Reader) LookupProfile(string) *profiles.Profile
-pkg reader, method (*Reader) LookupProfileTarget(string, profiles.Target) *profiles.Target
-pkg reader, method (*Reader) MergeEnv(map[string]MergePolicy, ...[]string)
-pkg reader, method (*Reader) MergeEnvFromProfiles(map[string]MergePolicy, profiles.Target, ...string)
-pkg reader, method (*Reader) PrependToPATH(string)
-pkg reader, method (*Reader) ProfileNames() []string
-pkg reader, method (*Reader) Profiles() []*profiles.Profile
-pkg reader, method (*Reader) SchemaVersion() profiles.Version
-pkg reader, method (*Reader) SkippingProfiles() bool
-pkg reader, method (*Reader) VDLPath() string
-pkg reader, method (*Reader) ValidateRequestedProfilesAndTarget([]string, profiles.Target) error
-pkg reader, method (MergePolicies) DebugString() string
-pkg reader, method (MergePolicies) Get() interface{}
-pkg reader, method (MergePolicies) Set(string) error
-pkg reader, method (MergePolicies) String() string
-pkg reader, method (MergePolicies) Usage() string
-pkg reader, type AppendJiriProfileMode bool
-pkg reader, type MergeAction int
-pkg reader, type MergePolicies map[string]MergePolicy
-pkg reader, type MergePolicy struct
-pkg reader, type MergePolicy struct, Action MergeAction
-pkg reader, type MergePolicy struct, Separator string
-pkg reader, type ProfilesMode bool
-pkg reader, type Reader struct
-pkg reader, type Reader struct, embedded *envvar.Vars
-pkg reader, var AppendFlag MergePolicy
-pkg reader, var AppendPath MergePolicy
-pkg reader, var GoFlags []string
-pkg reader, var IgnoreBaseAppendFlag MergePolicy
-pkg reader, var IgnoreBaseAppendPath MergePolicy
-pkg reader, var IgnoreBasePrependFlag MergePolicy
-pkg reader, var IgnoreBasePrependPath MergePolicy
-pkg reader, var IgnoreBaseUseFirst MergePolicy
-pkg reader, var IgnoreBaseUseLast MergePolicy
-pkg reader, var IgnoreVariable MergePolicy
-pkg reader, var PrependFlag MergePolicy
-pkg reader, var PrependPath MergePolicy
-pkg reader, var UseBaseIgnoreProfiles MergePolicy
-pkg reader, var UseFirst MergePolicy
-pkg reader, var UseLast MergePolicy