Add an option to set config

This commit is contained in:
Aayush Rajasekaran 2020-09-30 02:56:38 -04:00
parent e250429f56
commit 6abccc4d5e
2 changed files with 28 additions and 14 deletions

View File

@ -127,6 +127,10 @@ var DaemonCmd = &cli.Command{
Usage: "manage open file limit", Usage: "manage open file limit",
Value: true, Value: true,
}, },
&cli.StringFlag{
Name: "config",
Usage: "specify path of config file to use",
},
}, },
Action: func(cctx *cli.Context) error { Action: func(cctx *cli.Context) error {
err := runmetrics.Enable(runmetrics.RunMetricOptions{ err := runmetrics.Enable(runmetrics.RunMetricOptions{
@ -180,6 +184,10 @@ var DaemonCmd = &cli.Command{
return xerrors.Errorf("opening fs repo: %w", err) return xerrors.Errorf("opening fs repo: %w", err)
} }
if cctx.String("config") != "" {
r.SetConfigPath(cctx.String("config"))
}
if err := r.Init(repo.FullNode); err != nil && err != repo.ErrRepoExists { if err := r.Init(repo.FullNode); err != nil && err != repo.ErrRepoExists {
return xerrors.Errorf("repo init error: %w", err) return xerrors.Errorf("repo init error: %w", err)
} }

View File

@ -65,7 +65,8 @@ var ErrRepoExists = xerrors.New("repo exists")
// FsRepo is struct for repo, use NewFS to create // FsRepo is struct for repo, use NewFS to create
type FsRepo struct { type FsRepo struct {
path string path string
configPath string
} }
var _ Repo = &FsRepo{} var _ Repo = &FsRepo{}
@ -78,10 +79,15 @@ func NewFS(path string) (*FsRepo, error) {
} }
return &FsRepo{ return &FsRepo{
path: path, path: path,
configPath: filepath.Join(path, fsConfig),
}, nil }, nil
} }
func (fsr *FsRepo) SetConfigPath(cfgPath string) {
fsr.configPath = cfgPath
}
func (fsr *FsRepo) Exists() (bool, error) { func (fsr *FsRepo) Exists() (bool, error) {
_, err := os.Stat(filepath.Join(fsr.path, fsDatastore)) _, err := os.Stat(filepath.Join(fsr.path, fsDatastore))
notexist := os.IsNotExist(err) notexist := os.IsNotExist(err)
@ -115,9 +121,7 @@ func (fsr *FsRepo) Init(t RepoType) error {
} }
func (fsr *FsRepo) initConfig(t RepoType) error { func (fsr *FsRepo) initConfig(t RepoType) error {
cfgP := filepath.Join(fsr.path, fsConfig) _, err := os.Stat(fsr.configPath)
_, err := os.Stat(cfgP)
if err == nil { if err == nil {
// exists // exists
return nil return nil
@ -125,7 +129,7 @@ func (fsr *FsRepo) initConfig(t RepoType) error {
return err return err
} }
c, err := os.Create(cfgP) c, err := os.Create(fsr.configPath)
if err != nil { if err != nil {
return err return err
} }
@ -215,16 +219,18 @@ func (fsr *FsRepo) Lock(repoType RepoType) (LockedRepo, error) {
return nil, xerrors.Errorf("could not lock the repo: %w", err) return nil, xerrors.Errorf("could not lock the repo: %w", err)
} }
return &fsLockedRepo{ return &fsLockedRepo{
path: fsr.path, path: fsr.path,
repoType: repoType, configPath: fsr.configPath,
closer: closer, repoType: repoType,
closer: closer,
}, nil }, nil
} }
type fsLockedRepo struct { type fsLockedRepo struct {
path string path string
repoType RepoType configPath string
closer io.Closer repoType RepoType
closer io.Closer
ds map[string]datastore.Batching ds map[string]datastore.Batching
dsErr error dsErr error
@ -277,7 +283,7 @@ func (fsr *fsLockedRepo) Config() (interface{}, error) {
} }
func (fsr *fsLockedRepo) loadConfigFromDisk() (interface{}, error) { func (fsr *fsLockedRepo) loadConfigFromDisk() (interface{}, error) {
return config.FromFile(fsr.join(fsConfig), defConfForType(fsr.repoType)) return config.FromFile(fsr.configPath, defConfForType(fsr.repoType))
} }
func (fsr *fsLockedRepo) SetConfig(c func(interface{})) error { func (fsr *fsLockedRepo) SetConfig(c func(interface{})) error {
@ -306,7 +312,7 @@ func (fsr *fsLockedRepo) SetConfig(c func(interface{})) error {
} }
// write buffer of TOML bytes to config file // write buffer of TOML bytes to config file
err = ioutil.WriteFile(fsr.join(fsConfig), buf.Bytes(), 0644) err = ioutil.WriteFile(fsr.configPath, buf.Bytes(), 0644)
if err != nil { if err != nil {
return err return err
} }