ftp: convert the old config style to the new config style

This commit is contained in:
Nick Craig-Wood 2017-05-25 10:16:51 +01:00
parent 88ef475629
commit 0f07b63fd1

View file

@ -7,6 +7,7 @@ import (
"net/url" "net/url"
"os" "os"
"path" "path"
"strings"
"sync" "sync"
"time" "time"
@ -53,7 +54,7 @@ type Fs struct {
name string // name of this remote name string // name of this remote
root string // the path we are working on if any root string // the path we are working on if any
features *fs.Features // optional features features *fs.Features // optional features
url *url.URL url string
user string user string
pass string pass string
dialAddr string dialAddr string
@ -90,7 +91,7 @@ func (f *Fs) Root() string {
// String returns a description of the FS // String returns a description of the FS
func (f *Fs) String() string { func (f *Fs) String() string {
return f.url.String() return f.url
} }
// Features returns the optional features of this Fs // Features returns the optional features of this Fs
@ -158,6 +159,29 @@ func (f *Fs) putFtpConnection(pc **ftp.ServerConn, err error) {
// NewFs contstructs an Fs from the path, container:path // NewFs contstructs an Fs from the path, container:path
func NewFs(name, root string) (ff fs.Fs, err error) { func NewFs(name, root string) (ff fs.Fs, err error) {
// defer fs.Trace(nil, "name=%q, root=%q", name, root)("fs=%v, err=%v", &ff, &err) // defer fs.Trace(nil, "name=%q, root=%q", name, root)("fs=%v, err=%v", &ff, &err)
// FIXME Convert the old scheme used for the first beta - remove after release
if ftpURL := fs.ConfigFileGet(name, "url"); ftpURL != "" {
fs.Infof(name, "Converting old configuration")
u, err := url.Parse(ftpURL)
if err != nil {
return nil, errors.Wrapf(err, "Failed to parse old url %q", ftpURL)
}
parts := strings.Split(u.Host, ":")
fs.ConfigFileSet(name, "host", parts[0])
if len(parts) > 1 {
fs.ConfigFileSet(name, "port", parts[1])
}
fs.ConfigFileSet(name, "host", u.Host)
fs.ConfigFileSet(name, "user", fs.ConfigFileGet(name, "username"))
fs.ConfigFileSet(name, "pass", fs.ConfigFileGet(name, "password"))
fs.ConfigFileDeleteKey(name, "username")
fs.ConfigFileDeleteKey(name, "password")
fs.ConfigFileDeleteKey(name, "url")
fs.SaveConfig()
if u.Path != "" && u.Path != "/" {
fs.Errorf(name, "Path %q in FTP URL no longer supported - put it on the end of the remote %s:%s", u.Path, name, u.Path)
}
}
host := fs.ConfigFileGet(name, "host") host := fs.ConfigFileGet(name, "host")
user := fs.ConfigFileGet(name, "user") user := fs.ConfigFileGet(name, "user")
pass := fs.ConfigFileGet(name, "pass") pass := fs.ConfigFileGet(name, "pass")
@ -174,11 +198,7 @@ func NewFs(name, root string) (ff fs.Fs, err error) {
} }
dialAddr := host + ":" + port dialAddr := host + ":" + port
u, err := url.Parse("ftp://" + dialAddr) u := "ftp://" + path.Join(dialAddr+"/", root)
if err != nil {
return nil, errors.Wrap(err, "NewFS URL parse")
}
f := &Fs{ f := &Fs{
name: name, name: name,
root: root, root: root,