From 20abb57191999cfd62703f1b5752ff9cb0641ea1 Mon Sep 17 00:00:00 2001 From: Songmu Date: Sat, 11 Nov 2023 22:36:38 +0900 Subject: [PATCH 1/2] add C option to change working directory --- config.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++ main.go | 74 +++++++++---------------------------------------------- 2 files changed, 75 insertions(+), 62 deletions(-) diff --git a/config.go b/config.go index b248406..3c5d67d 100644 --- a/config.go +++ b/config.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "io" "os" "path/filepath" @@ -14,6 +15,68 @@ type config struct { Blogs map[string]*blogConfig } +func loadSingleConfigFile(fname string) (*config, error) { + if _, err := os.Stat(fname); err != nil { + return nil, nil + } + f, err := os.Open(fname) + if err != nil { + return nil, err + } + defer f.Close() + return loadConfig(f, fname) +} + +func loadConfiguration() (*config, error) { + pwd, err := os.Getwd() + if err != nil { + return nil, err + } + + var conf *config + conf, err = loadConfigFiles(pwd) + if err != nil { + return nil, err + } + + var confEnv *config + confEnv, err = loadConfigFromEnv() + if err != nil { + return nil, err + } + if conf.Default == nil { + conf.Default = &blogConfig{} + } + if confEnv.Default.Username != "" { + conf.Default.Username = confEnv.Default.Username + } + if confEnv.Default.Password != "" { + conf.Default.Password = confEnv.Default.Password + } + + return conf, nil +} + +func loadConfigFiles(pwd string) (*config, error) { + confs := []string{filepath.Join(pwd, "blogsync.yaml")} + home, err := os.UserHomeDir() + if err == nil { + confs = append(confs, filepath.Join(home, ".config", "blogsync", "config.yaml")) + } + var conf *config + for _, confFile := range confs { + tmpConf, err := loadSingleConfigFile(confFile) + if err != nil { + return nil, err + } + conf = mergeConfig(conf, tmpConf) + } + if conf == nil { + return nil, fmt.Errorf("no config files found") + } + return conf, nil +} + func (c *config) detectBlogConfig(fpath string) *blogConfig { var retBc *blogConfig for blogID := range c.Blogs { diff --git a/main.go b/main.go index 43900f6..e57aa00 100644 --- a/main.go +++ b/main.go @@ -24,6 +24,18 @@ func newApp() *cli.App { commandList, commandRemove, } + app.Flags = []cli.Flag{ + &cli.StringFlag{ + Name: "C", + Usage: "Run as if blogsync was started in `PATH` instead of the current working directory. ", + Action: func(ctx *cli.Context, wdir string) error { + if wdir == "" { + return nil + } + return os.Chdir(wdir) + }, + }, + } app.Version = fmt.Sprintf("%s (%s)", version, revision) return app } @@ -37,68 +49,6 @@ func main() { } } -func loadSingleConfigFile(fname string) (*config, error) { - if _, err := os.Stat(fname); err != nil { - return nil, nil - } - f, err := os.Open(fname) - if err != nil { - return nil, err - } - defer f.Close() - return loadConfig(f, fname) -} - -func loadConfiguration() (*config, error) { - pwd, err := os.Getwd() - if err != nil { - return nil, err - } - - var conf *config - conf, err = loadConfigFiles(pwd) - if err != nil { - return nil, err - } - - var confEnv *config - confEnv, err = loadConfigFromEnv() - if err != nil { - return nil, err - } - if conf.Default == nil { - conf.Default = &blogConfig{} - } - if confEnv.Default.Username != "" { - conf.Default.Username = confEnv.Default.Username - } - if confEnv.Default.Password != "" { - conf.Default.Password = confEnv.Default.Password - } - - return conf, nil -} - -func loadConfigFiles(pwd string) (*config, error) { - confs := []string{filepath.Join(pwd, "blogsync.yaml")} - home, err := os.UserHomeDir() - if err == nil { - confs = append(confs, filepath.Join(home, ".config", "blogsync", "config.yaml")) - } - var conf *config - for _, confFile := range confs { - tmpConf, err := loadSingleConfigFile(confFile) - if err != nil { - return nil, err - } - conf = mergeConfig(conf, tmpConf) - } - if conf == nil { - return nil, fmt.Errorf("no config files found") - } - return conf, nil -} - var commandPull = &cli.Command{ Name: "pull", Usage: "Pull entries from remote", From cef2b521ae8c667f94692b92c11e9c2aef22510e Mon Sep 17 00:00:00 2001 From: Songmu Date: Sat, 11 Nov 2023 22:44:11 +0900 Subject: [PATCH 2/2] BLOGSYNC_WORKDIR --- main.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index e57aa00..764a6ef 100644 --- a/main.go +++ b/main.go @@ -26,8 +26,9 @@ func newApp() *cli.App { } app.Flags = []cli.Flag{ &cli.StringFlag{ - Name: "C", - Usage: "Run as if blogsync was started in `PATH` instead of the current working directory. ", + Name: "C", + Usage: "Run as if blogsync was started in `PATH` instead of the current working directory. ", + EnvVars: []string{"BLOGSYNC_WORKDIR"}, Action: func(ctx *cli.Context, wdir string) error { if wdir == "" { return nil