From fa4cfe8da28776dd2d5c89cc0d8d070cea3a78f4 Mon Sep 17 00:00:00 2001 From: Brian Tiger Chow Date: Mon, 12 Jan 2015 11:33:14 -0800 Subject: [PATCH] refactor(init, fsrepo): go through repo to write to config --- cmd/ipfs/init.go | 14 ++++++++------ repo/fsrepo/fsrepo.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/cmd/ipfs/init.go b/cmd/ipfs/init.go index f3a5fb466..535eafad5 100644 --- a/cmd/ipfs/init.go +++ b/cmd/ipfs/init.go @@ -95,11 +95,6 @@ func doInit(configRoot string, dspathOverride string, force bool, nBitsForKeypai u.POut("initializing ipfs node at %s\n", configRoot) - configFilename, err := config.Filename(configRoot) - if err != nil { - return nil, debugerror.New("Couldn't get home directory path") - } - if fsrepo.ConfigIsInitialized(configRoot) && !force { return nil, errCannotInitConfigExists } @@ -109,7 +104,14 @@ func doInit(configRoot string, dspathOverride string, force bool, nBitsForKeypai return nil, err } - if err := config.WriteConfigFile(configFilename, conf); err != nil { + repo := fsrepo.At(configRoot) + if err := repo.Open(); err != nil { + return nil, err + } + if err := repo.SetConfig(conf); err != nil { + return nil, err + } + if err := repo.Close(); err != nil { return nil, err } diff --git a/repo/fsrepo/fsrepo.go b/repo/fsrepo/fsrepo.go index 1a6f51f37..1eca18978 100644 --- a/repo/fsrepo/fsrepo.go +++ b/repo/fsrepo/fsrepo.go @@ -1,10 +1,47 @@ package fsrepo import ( + "io" + config "github.com/jbenet/go-ipfs/repo/config" util "github.com/jbenet/go-ipfs/util" ) +type FSRepo struct { + path string + config config.Config +} + +func At(path string) *FSRepo { + return &FSRepo{ + path: path, + } +} + +func (r *FSRepo) Open() error { + // TODO may need to check that directory is writeable + // TODO acquire repo lock + return nil +} + +func (r *FSRepo) SetConfig(conf *config.Config) error { + configFilename, err := config.Filename(r.path) + if err != nil { + return err + } + if err := config.WriteConfigFile(configFilename, conf); err != nil { + return err + } + r.config = *conf // copy so caller cannot modify the private config + return nil +} + +func (r *FSRepo) Close() error { + return nil // TODO release repo lock +} + +var _ io.Closer = &FSRepo{} + // ConfigIsInitialized returns true if the config exists in provided |path|. func ConfigIsInitialized(path string) bool { configFilename, err := config.Filename(path)