From 73615a877b406849f9a9db961ae73483f98bccef Mon Sep 17 00:00:00 2001 From: Dominic Della Valle Date: Wed, 10 Jul 2019 10:26:39 -0400 Subject: [PATCH] use profile transforms on init config-file --- cmd/ipfs/daemon.go | 8 ++------ cmd/ipfs/init.go | 50 +++++++++++++++++++--------------------------- 2 files changed, 22 insertions(+), 36 deletions(-) diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index 6270a6997ee4..c545999513fc 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -237,23 +237,19 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment profiles, _ := req.Options[initProfileOptionKwd].(string) if cfgLocation != "" { - if profiles != "" { - return errInitConfigArgs - } - conf, err := cserial.Load(cfgLocation) if err != nil { return err } - if err = doInit(os.Stdout, cctx.ConfigRoot, false, nBitsForKeypairDefault, nil, conf); err != nil { + if err = doInit(os.Stdout, cctx.ConfigRoot, false, nBitsForKeypairDefault, profiles, conf); err != nil { return err } } else { cfgLocation = cctx.ConfigRoot if !fsrepo.IsInitialized(cfgLocation) { - err := initWithDefaults(os.Stdout, cfgLocation, profiles) + err := doInit(os.Stdout, cfgLocation, false, nBitsForKeypairDefault, profiles, nil) if err != nil { return err } diff --git a/cmd/ipfs/init.go b/cmd/ipfs/init.go index 686ea6fd4da2..5fa6cd66db37 100644 --- a/cmd/ipfs/init.go +++ b/cmd/ipfs/init.go @@ -30,12 +30,9 @@ const ( configOptionName = "config-file" ) -var ( - errRepoExists = errors.New(`ipfs configuration file already exists! +var errRepoExists = errors.New(`ipfs configuration file already exists! Reinitializing would overwrite your keys. `) - errInitConfigArgs = errors.New("Config file <-> Profile merging not implemented") -) var initCmd = &cmds.Command{ Helptext: cmds.HelpText{ @@ -113,40 +110,40 @@ environment variable: } cfgLocation, _ := req.Options[configOptionName].(string) - profile, _ := req.Options[profileOptionName].(string) + profiles, _ := req.Options[profileOptionName].(string) if cfgLocation != "" { - if profile != "" { - return errInitConfigArgs - } - conf, err := cserial.Load(cfgLocation) if err != nil { return err } - return doInit(os.Stdout, cctx.ConfigRoot, false, nBitsForKeypairDefault, nil, conf) - } - - var profiles []string - if profile != "" { - profiles = strings.Split(profile, ",") + return doInit(os.Stdout, cctx.ConfigRoot, false, nBitsForKeypairDefault, profiles, conf) } return doInit(os.Stdout, cctx.ConfigRoot, empty, nBitsForKeypair, profiles, conf) }, } -func initWithDefaults(out io.Writer, repoRoot string, profile string) error { - var profiles []string - if profile != "" { - profiles = strings.Split(profile, ",") +func applyProfiles(conf *config.Config, profiles string) error { + if profiles == "" { + return nil } - return doInit(out, repoRoot, false, nBitsForKeypairDefault, profiles, nil) + for _, profile := range strings.Split(profiles, ",") { + transformer, ok := config.Profiles[profile] + if !ok { + return fmt.Errorf("invalid configuration profile: %s", profile) + } + + if err := transformer.Transform(conf); err != nil { + return err + } + } + return nil } -func doInit(out io.Writer, repoRoot string, empty bool, nBitsForKeypair int, confProfiles []string, conf *config.Config) error { +func doInit(out io.Writer, repoRoot string, empty bool, nBitsForKeypair int, confProfiles string, conf *config.Config) error { if _, err := fmt.Fprintf(out, "initializing IPFS node at %s\n", repoRoot); err != nil { return err } @@ -167,15 +164,8 @@ func doInit(out io.Writer, repoRoot string, empty bool, nBitsForKeypair int, con } } - for _, profile := range confProfiles { - transformer, ok := config.Profiles[profile] - if !ok { - return fmt.Errorf("invalid configuration profile: %s", profile) - } - - if err := transformer.Transform(conf); err != nil { - return err - } + if err := applyProfiles(conf, confProfiles); err != nil { + return err } if err := fsrepo.Init(repoRoot, conf); err != nil {