aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/spf13
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/spf13')
-rw-r--r--vendor/github.com/spf13/afero/README.md10
-rw-r--r--vendor/github.com/spf13/afero/afero.go2
-rw-r--r--vendor/github.com/spf13/afero/cacheOnReadFs.go3
-rw-r--r--vendor/github.com/spf13/afero/memmap.go38
-rw-r--r--vendor/github.com/spf13/afero/sftp.go128
-rw-r--r--vendor/github.com/spf13/afero/sftp/file.go95
-rw-r--r--vendor/github.com/spf13/afero/sftp_test_go286
-rw-r--r--vendor/github.com/spf13/cast/caste.go13
-rw-r--r--vendor/github.com/spf13/pflag/README.md4
-rw-r--r--vendor/github.com/spf13/viper/viper.go8
10 files changed, 48 insertions, 539 deletions
diff --git a/vendor/github.com/spf13/afero/README.md b/vendor/github.com/spf13/afero/README.md
index db20817..d9e3327 100644
--- a/vendor/github.com/spf13/afero/README.md
+++ b/vendor/github.com/spf13/afero/README.md
@@ -198,17 +198,17 @@ independent, with no test relying on the state left by an earlier test.
Then in my tests I would initialize a new MemMapFs for each test:
```go
func TestExist(t *testing.T) {
- appFS = afero.NewMemMapFs()
+ appFS := afero.NewMemMapFs()
// create test files and directories
- appFS.MkdirAll("src/a", 0755))
+ appFS.MkdirAll("src/a", 0755)
afero.WriteFile(appFS, "src/a/b", []byte("file b"), 0644)
afero.WriteFile(appFS, "src/c", []byte("file c"), 0644)
- _, err := appFS.Stat("src/c")
+ name := "src/c"
+ _, err := appFS.Stat(name)
if os.IsNotExist(err) {
- t.Errorf("file \"%s\" does not exist.\n", name)
+ t.Errorf("file \"%s\" does not exist.\n", name)
}
}
-
```
# Available Backends
diff --git a/vendor/github.com/spf13/afero/afero.go b/vendor/github.com/spf13/afero/afero.go
index e3df3f4..f5b5e12 100644
--- a/vendor/github.com/spf13/afero/afero.go
+++ b/vendor/github.com/spf13/afero/afero.go
@@ -77,7 +77,7 @@ type Fs interface {
// happens.
Remove(name string) error
- // RemoveAll removes a directory path and all any children it contains. It
+ // RemoveAll removes a directory path and any children it contains. It
// does not fail if the path does not exist (return nil).
RemoveAll(path string) error
diff --git a/vendor/github.com/spf13/afero/cacheOnReadFs.go b/vendor/github.com/spf13/afero/cacheOnReadFs.go
index d742425..e54a4f8 100644
--- a/vendor/github.com/spf13/afero/cacheOnReadFs.go
+++ b/vendor/github.com/spf13/afero/cacheOnReadFs.go
@@ -32,9 +32,8 @@ func NewCacheOnReadFs(base Fs, layer Fs, cacheTime time.Duration) Fs {
type cacheState int
const (
- cacheUnknown cacheState = iota
// not present in the overlay, unknown if it exists in the base:
- cacheMiss
+ cacheMiss cacheState = iota
// present in the overlay and in base, base file is newer:
cacheStale
// present in the overlay - with cache time == 0 it may exist in the base,
diff --git a/vendor/github.com/spf13/afero/memmap.go b/vendor/github.com/spf13/afero/memmap.go
index 2e259b8..494ba54 100644
--- a/vendor/github.com/spf13/afero/memmap.go
+++ b/vendor/github.com/spf13/afero/memmap.go
@@ -35,8 +35,6 @@ func NewMemMapFs() Fs {
return &MemMapFs{}
}
-var memfsInit sync.Once
-
func (m *MemMapFs) getData() map[string]*mem.FileData {
m.init.Do(func() {
m.data = make(map[string]*mem.FileData)
@@ -130,13 +128,16 @@ func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
m.mu.RUnlock()
if ok {
return &os.PathError{"mkdir", name, ErrFileExists}
- } else {
- m.mu.Lock()
- item := mem.CreateDir(name)
- m.getData()[name] = item
- m.registerWithParent(item)
- m.mu.Unlock()
}
+
+ m.mu.Lock()
+ item := mem.CreateDir(name)
+ m.getData()[name] = item
+ m.registerWithParent(item)
+ m.mu.Unlock()
+
+ m.Chmod(name, perm)
+
return nil
}
@@ -205,9 +206,11 @@ func (m *MemMapFs) lockfreeOpen(name string) (*mem.FileData, error) {
}
func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
+ chmod := false
file, err := m.openWrite(name)
if os.IsNotExist(err) && (flag&os.O_CREATE > 0) {
file, err = m.Create(name)
+ chmod = true
}
if err != nil {
return nil, err
@@ -229,6 +232,9 @@ func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, erro
return nil, err
}
}
+ if chmod {
+ m.Chmod(name, perm)
+ }
return file, nil
}
@@ -309,7 +315,10 @@ func (m *MemMapFs) Stat(name string) (os.FileInfo, error) {
func (m *MemMapFs) Chmod(name string, mode os.FileMode) error {
name = normalizePath(name)
+
+ m.mu.RLock()
f, ok := m.getData()[name]
+ m.mu.RUnlock()
if !ok {
return &os.PathError{"chmod", name, ErrFileNotFound}
}
@@ -323,7 +332,10 @@ func (m *MemMapFs) Chmod(name string, mode os.FileMode) error {
func (m *MemMapFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
name = normalizePath(name)
+
+ m.mu.RLock()
f, ok := m.getData()[name]
+ m.mu.RUnlock()
if !ok {
return &os.PathError{"chtimes", name, ErrFileNotFound}
}
@@ -342,8 +354,8 @@ func (m *MemMapFs) List() {
}
}
-func debugMemMapList(fs Fs) {
- if x, ok := fs.(*MemMapFs); ok {
- x.List()
- }
-}
+// func debugMemMapList(fs Fs) {
+// if x, ok := fs.(*MemMapFs); ok {
+// x.List()
+// }
+// }
diff --git a/vendor/github.com/spf13/afero/sftp.go b/vendor/github.com/spf13/afero/sftp.go
deleted file mode 100644
index a095a54..0000000
--- a/vendor/github.com/spf13/afero/sftp.go
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright © 2015 Jerry Jacobs <jerry.jacobs@xor-gate.org>.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package afero
-
-import (
- "os"
- "time"
-
- "github.com/spf13/afero/sftp"
-
- "github.com/pkg/sftp"
-)
-
-// SftpFs is a Fs implementation that uses functions provided by the sftp package.
-//
-// For details in any method, check the documentation of the sftp package
-// (github.com/pkg/sftp).
-type SftpFs struct{
- SftpClient *sftp.Client
-}
-
-func (s SftpFs) Name() string { return "SftpFs" }
-
-func (s SftpFs) Create(name string) (File, error) {
- f, err := sftpfs.FileCreate(s.SftpClient, name)
- return f, err
-}
-
-func (s SftpFs) Mkdir(name string, perm os.FileMode) error {
- err := s.SftpClient.Mkdir(name)
- if err != nil {
- return err
- }
- return s.SftpClient.Chmod(name, perm)
-}
-
-func (s SftpFs) MkdirAll(path string, perm os.FileMode) error {
- // Fast path: if we can tell whether path is a directory or file, stop with success or error.
- dir, err := s.Stat(path)
- if err == nil {
- if dir.IsDir() {
- return nil
- }
- return err
- }
-
- // Slow path: make sure parent exists and then call Mkdir for path.
- i := len(path)
- for i > 0 && os.IsPathSeparator(path[i-1]) { // Skip trailing path separator.
- i--
- }
-
- j := i
- for j > 0 && !os.IsPathSeparator(path[j-1]) { // Scan backward over element.
- j--
- }
-
- if j > 1 {
- // Create parent
- err = s.MkdirAll(path[0:j-1], perm)
- if err != nil {
- return err
- }
- }
-
- // Parent now exists; invoke Mkdir and use its result.
- err = s.Mkdir(path, perm)
- if err != nil {
- // Handle arguments like "foo/." by
- // double-checking that directory doesn't exist.
- dir, err1 := s.Lstat(path)
- if err1 == nil && dir.IsDir() {
- return nil
- }
- return err
- }
- return nil
-}
-
-func (s SftpFs) Open(name string) (File, error) {
- f, err := sftpfs.FileOpen(s.SftpClient, name)
- return f, err
-}
-
-func (s SftpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
- return nil,nil
-}
-
-func (s SftpFs) Remove(name string) error {
- return s.SftpClient.Remove(name)
-}
-
-func (s SftpFs) RemoveAll(path string) error {
- // TODO have a look at os.RemoveAll
- // https://github.com/golang/go/blob/master/src/os/path.go#L66
- return nil
-}
-
-func (s SftpFs) Rename(oldname, newname string) error {
- return s.SftpClient.Rename(oldname, newname)
-}
-
-func (s SftpFs) Stat(name string) (os.FileInfo, error) {
- return s.SftpClient.Stat(name)
-}
-
-func (s SftpFs) Lstat(p string) (os.FileInfo, error) {
- return s.SftpClient.Lstat(p)
-}
-
-func (s SftpFs) Chmod(name string, mode os.FileMode) error {
- return s.SftpClient.Chmod(name, mode)
-}
-
-func (s SftpFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
- return s.SftpClient.Chtimes(name, atime, mtime)
-}
diff --git a/vendor/github.com/spf13/afero/sftp/file.go b/vendor/github.com/spf13/afero/sftp/file.go
deleted file mode 100644
index bab4abc..0000000
--- a/vendor/github.com/spf13/afero/sftp/file.go
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright © 2015 Jerry Jacobs <jerry.jacobs@xor-gate.org>.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package sftpfs
-
-import (
- "os"
- "github.com/pkg/sftp"
-)
-
-type File struct {
- fd *sftp.File
-}
-
-func FileOpen(s *sftp.Client, name string) (*File, error) {
- fd, err := s.Open(name)
- if err != nil {
- return &File{}, err
- }
- return &File{fd: fd}, nil
-}
-
-func FileCreate(s *sftp.Client, name string) (*File, error) {
- fd, err := s.Create(name)
- if err != nil {
- return &File{}, err
- }
- return &File{fd: fd}, nil
-}
-
-func (f *File) Close() error {
- return f.fd.Close()
-}
-
-func (f *File) Name() string {
- return f.fd.Name()
-}
-
-func (f *File) Stat() (os.FileInfo, error) {
- return f.fd.Stat()
-}
-
-func (f *File) Sync() error {
- return nil
-}
-
-func (f *File) Truncate(size int64) error {
- return f.fd.Truncate(size)
-}
-
-func (f *File) Read(b []byte) (n int, err error) {
- return f.fd.Read(b)
-}
-
-// TODO
-func (f *File) ReadAt(b []byte, off int64) (n int, err error) {
- return 0,nil
-}
-
-// TODO
-func (f *File) Readdir(count int) (res []os.FileInfo, err error) {
- return nil,nil
-}
-
-// TODO
-func (f *File) Readdirnames(n int) (names []string, err error) {
- return nil,nil
-}
-
-func (f *File) Seek(offset int64, whence int) (int64, error) {
- return f.fd.Seek(offset, whence)
-}
-
-func (f *File) Write(b []byte) (n int, err error) {
- return f.fd.Write(b)
-}
-
-// TODO
-func (f *File) WriteAt(b []byte, off int64) (n int, err error) {
- return 0,nil
-}
-
-func (f *File) WriteString(s string) (ret int, err error) {
- return f.fd.Write([]byte(s))
-}
diff --git a/vendor/github.com/spf13/afero/sftp_test_go b/vendor/github.com/spf13/afero/sftp_test_go
deleted file mode 100644
index bb00535..0000000
--- a/vendor/github.com/spf13/afero/sftp_test_go
+++ /dev/null
@@ -1,286 +0,0 @@
-// Copyright © 2015 Jerry Jacobs <jerry.jacobs@xor-gate.org>.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package afero
-
-import (
- "testing"
- "os"
- "log"
- "fmt"
- "net"
- "flag"
- "time"
- "io/ioutil"
- "crypto/rsa"
- _rand "crypto/rand"
- "encoding/pem"
- "crypto/x509"
-
- "golang.org/x/crypto/ssh"
- "github.com/pkg/sftp"
-)
-
-type SftpFsContext struct {
- sshc *ssh.Client
- sshcfg *ssh.ClientConfig
- sftpc *sftp.Client
-}
-
-// TODO we only connect with hardcoded user+pass for now
-// it should be possible to use $HOME/.ssh/id_rsa to login into the stub sftp server
-func SftpConnect(user, password, host string) (*SftpFsContext, error) {
-/*
- pemBytes, err := ioutil.ReadFile(os.Getenv("HOME") + "/.ssh/id_rsa")
- if err != nil {
- return nil,err
- }
-
- signer, err := ssh.ParsePrivateKey(pemBytes)
- if err != nil {
- return nil,err
- }
-
- sshcfg := &ssh.ClientConfig{
- User: user,
- Auth: []ssh.AuthMethod{
- ssh.Password(password),
- ssh.PublicKeys(signer),
- },
- }
-*/
-
- sshcfg := &ssh.ClientConfig{
- User: user,
- Auth: []ssh.AuthMethod{
- ssh.Password(password),
- },
- }
-
- sshc, err := ssh.Dial("tcp", host, sshcfg)
- if err != nil {
- return nil,err
- }
-
- sftpc, err := sftp.NewClient(sshc)
- if err != nil {
- return nil,err
- }
-
- ctx := &SftpFsContext{
- sshc: sshc,
- sshcfg: sshcfg,
- sftpc: sftpc,
- }
-
- return ctx,nil
-}
-
-func (ctx *SftpFsContext) Disconnect() error {
- ctx.sftpc.Close()
- ctx.sshc.Close()
- return nil
-}
-
-// TODO for such a weird reason rootpath is "." when writing "file1" with afero sftp backend
-func RunSftpServer(rootpath string) {
- var (
- readOnly bool
- debugLevelStr string
- debugLevel int
- debugStderr bool
- rootDir string
- )
-
- flag.BoolVar(&readOnly, "R", false, "read-only server")
- flag.BoolVar(&debugStderr, "e", true, "debug to stderr")
- flag.StringVar(&debugLevelStr, "l", "none", "debug level")
- flag.StringVar(&rootDir, "root", rootpath, "root directory")
- flag.Parse()
-
- debugStream := ioutil.Discard
- if debugStderr {
- debugStream = os.Stderr
- debugLevel = 1
- }
-
- // An SSH server is represented by a ServerConfig, which holds
- // certificate details and handles authentication of ServerConns.
- config := &ssh.ServerConfig{
- PasswordCallback: func(c ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) {
- // Should use constant-time compare (or better, salt+hash) in
- // a production setting.
- fmt.Fprintf(debugStream, "Login: %s\n", c.User())
- if c.User() == "test" && string(pass) == "test" {
- return nil, nil
- }
- return nil, fmt.Errorf("password rejected for %q", c.User())
- },
- }
-
- privateBytes, err := ioutil.ReadFile("./test/id_rsa")
- if err != nil {
- log.Fatal("Failed to load private key", err)
- }
-
- private, err := ssh.ParsePrivateKey(privateBytes)
- if err != nil {
- log.Fatal("Failed to parse private key", err)
- }
-
- config.AddHostKey(private)
-
- // Once a ServerConfig has been configured, connections can be
- // accepted.
- listener, err := net.Listen("tcp", "0.0.0.0:2022")
- if err != nil {
- log.Fatal("failed to listen for connection", err)
- }
- fmt.Printf("Listening on %v\n", listener.Addr())
-
- nConn, err := listener.Accept()
- if err != nil {
- log.Fatal("failed to accept incoming connection", err)
- }
-
- // Before use, a handshake must be performed on the incoming
- // net.Conn.
- _, chans, reqs, err := ssh.NewServerConn(nConn, config)
- if err != nil {
- log.Fatal("failed to handshake", err)
- }
- fmt.Fprintf(debugStream, "SSH server established\n")
-
- // The incoming Request channel must be serviced.
- go ssh.DiscardRequests(reqs)
-
- // Service the incoming Channel channel.
- for newChannel := range chans {
- // Channels have a type, depending on the application level
- // protocol intended. In the case of an SFTP session, this is "subsystem"
- // with a payload string of "<length=4>sftp"
- fmt.Fprintf(debugStream, "Incoming channel: %s\n", newChannel.ChannelType())
- if newChannel.ChannelType() != "session" {
- newChannel.Reject(ssh.UnknownChannelType, "unknown channel type")
- fmt.Fprintf(debugStream, "Unknown channel type: %s\n", newChannel.ChannelType())
- continue
- }
- channel, requests, err := newChannel.Accept()
- if err != nil {
- log.Fatal("could not accept channel.", err)
- }
- fmt.Fprintf(debugStream, "Channel accepted\n")
-
- // Sessions have out-of-band requests such as "shell",
- // "pty-req" and "env". Here we handle only the
- // "subsystem" request.
- go func(in <-chan *ssh.Request) {
- for req := range in {
- fmt.Fprintf(debugStream, "Request: %v\n", req.Type)
- ok := false
- switch req.Type {
- case "subsystem":
- fmt.Fprintf(debugStream, "Subsystem: %s\n", req.Payload[4:])
- if string(req.Payload[4:]) == "sftp" {
- ok = true
- }
- }
- fmt.Fprintf(debugStream, " - accepted: %v\n", ok)
- req.Reply(ok, nil)
- }
- }(requests)
-
- server, err := sftp.NewServer(channel, channel, debugStream, debugLevel, readOnly, rootpath)
- if err != nil {
- log.Fatal(err)
- }
- if err := server.Serve(); err != nil {
- log.Fatal("sftp server completed with error:", err)
- }
- }
-}
-
-// MakeSSHKeyPair make a pair of public and private keys for SSH access.
-// Public key is encoded in the format for inclusion in an OpenSSH authorized_keys file.
-// Private Key generated is PEM encoded
-func MakeSSHKeyPair(bits int, pubKeyPath, privateKeyPath string) error {
- privateKey, err := rsa.GenerateKey(_rand.Reader, bits)
- if err != nil {
- return err
- }
-
- // generate and write private key as PEM
- privateKeyFile, err := os.Create(privateKeyPath)
- defer privateKeyFile.Close()
- if err != nil {
- return err
- }
-
- privateKeyPEM := &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey)}
- if err := pem.Encode(privateKeyFile, privateKeyPEM); err != nil {
- return err
- }
-
- // generate and write public key
- pub, err := ssh.NewPublicKey(&privateKey.PublicKey)
- if err != nil {
- return err
- }
-
- return ioutil.WriteFile(pubKeyPath, ssh.MarshalAuthorizedKey(pub), 0655)
-}
-
-func TestSftpCreate(t *testing.T) {
- os.Mkdir("./test", 0777)
- MakeSSHKeyPair(1024, "./test/id_rsa.pub", "./test/id_rsa")
-
- go RunSftpServer("./test/")
- time.Sleep(5 * time.Second)
-
- ctx, err := SftpConnect("test", "test", "localhost:2022")
- if err != nil {
- t.Fatal(err)
- }
- defer ctx.Disconnect()
-
- var AppFs Fs = SftpFs{
- SftpClient: ctx.sftpc,
- }
-
- AppFs.MkdirAll("test/dir1/dir2/dir3", os.FileMode(0777))
- AppFs.Mkdir("test/foo", os.FileMode(0000))
- AppFs.Chmod("test/foo", os.FileMode(0700))
- AppFs.Mkdir("test/bar", os.FileMode(0777))
-
- file, err := AppFs.Create("file1")
- if err != nil {
- t.Error(err)
- }
- defer file.Close()
-
- file.Write([]byte("hello\t"))
- file.WriteString("world!\n")
-
- f1, err := AppFs.Open("file1")
- if err != nil {
- log.Fatalf("open: %v", err)
- }
- defer f1.Close()
-
- b := make([]byte, 100)
-
- _, err = f1.Read(b)
- fmt.Println(string(b))
-
- // TODO check here if "hello\tworld\n" is in buffer b
-}
diff --git a/vendor/github.com/spf13/cast/caste.go b/vendor/github.com/spf13/cast/caste.go
index 23f59a1..1aaa1ff 100644
--- a/vendor/github.com/spf13/cast/caste.go
+++ b/vendor/github.com/spf13/cast/caste.go
@@ -18,15 +18,21 @@ import (
func ToTimeE(i interface{}) (tim time.Time, err error) {
i = indirect(i)
- switch s := i.(type) {
+ switch v := i.(type) {
case time.Time:
- return s, nil
+ return v, nil
case string:
- d, e := StringToDate(s)
+ d, e := StringToDate(v)
if e == nil {
return d, nil
}
return time.Time{}, fmt.Errorf("Could not parse Date/Time format: %v\n", e)
+ case int:
+ return time.Unix(int64(v), 0), nil
+ case int32:
+ return time.Unix(int64(v), 0), nil
+ case int64:
+ return time.Unix(v, 0), nil
default:
return time.Time{}, fmt.Errorf("Unable to Cast %#v to Time\n", i)
}
@@ -513,6 +519,7 @@ func StringToDate(s string) (time.Time, error) {
"02 Jan 2006",
"2006-01-02 15:04:05 -07:00",
"2006-01-02 15:04:05 -0700",
+ "2006-01-02 15:04:05",
})
}
diff --git a/vendor/github.com/spf13/pflag/README.md b/vendor/github.com/spf13/pflag/README.md
index 08ad945..93d6d77 100644
--- a/vendor/github.com/spf13/pflag/README.md
+++ b/vendor/github.com/spf13/pflag/README.md
@@ -106,9 +106,9 @@ that give one-letter shorthands for flags. You can use these by appending
var ip = flag.IntP("flagname", "f", 1234, "help message")
var flagvar bool
func init() {
- flag.BoolVarP("boolname", "b", true, "help message")
+ flag.BoolVarP(&flagvar, "boolname", "b", true, "help message")
}
-flag.VarP(&flagVar, "varname", "v", 1234, "help message")
+flag.VarP(&flagVal, "varname", "v", "help message")
```
Shorthand letters can be used with single dashes on the command line.
diff --git a/vendor/github.com/spf13/viper/viper.go b/vendor/github.com/spf13/viper/viper.go
index 4ed2d40..2603c78 100644
--- a/vendor/github.com/spf13/viper/viper.go
+++ b/vendor/github.com/spf13/viper/viper.go
@@ -1102,15 +1102,15 @@ func (v *Viper) ReadInConfig() error {
func MergeInConfig() error { return v.MergeInConfig() }
func (v *Viper) MergeInConfig() error {
jww.INFO.Println("Attempting to merge in config file")
- if !stringInSlice(v.getConfigType(), SupportedExts) {
- return UnsupportedConfigError(v.getConfigType())
- }
-
filename, err := v.getConfigFile()
if err != nil {
return err
}
+ if !stringInSlice(v.getConfigType(), SupportedExts) {
+ return UnsupportedConfigError(v.getConfigType())
+ }
+
file, err := afero.ReadFile(v.fs, filename)
if err != nil {
return err