Skip to content

Commit

Permalink
Merge pull request #143 from x-motemen/coption
Browse files Browse the repository at this point in the history
add C option to change working directory
  • Loading branch information
Songmu authored Nov 11, 2023
2 parents 249511f + cef2b52 commit 0c3772a
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 62 deletions.
63 changes: 63 additions & 0 deletions config.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"fmt"
"io"
"os"
"path/filepath"
Expand All @@ -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 {
Expand Down
75 changes: 13 additions & 62 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,19 @@ 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. ",
EnvVars: []string{"BLOGSYNC_WORKDIR"},
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
}
Expand All @@ -37,68 +50,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",
Expand Down

0 comments on commit 0c3772a

Please sign in to comment.