mirror of
https://github.com/rclone/rclone.git
synced 2024-12-01 04:45:03 +01:00
windows: Stop drive letters (eg C:) getting mixed up with remotes (eg drive:)
This was done by stopping the user configuring single letter remotes and making sure we don't treat single letter remotes as a remote name, but as a drive letter.
This commit is contained in:
parent
d64a37772f
commit
20ad96f3cd
10
fs/config.go
10
fs/config.go
@ -330,9 +330,19 @@ func EditConfig() {
|
|||||||
name := ChooseRemote()
|
name := ChooseRemote()
|
||||||
EditRemote(name)
|
EditRemote(name)
|
||||||
case 'n':
|
case 'n':
|
||||||
|
for {
|
||||||
fmt.Printf("name> ")
|
fmt.Printf("name> ")
|
||||||
name := ReadLine()
|
name := ReadLine()
|
||||||
|
switch {
|
||||||
|
case name == "":
|
||||||
|
fmt.Printf("Can't use empty name\n")
|
||||||
|
case isDriveLetter(name):
|
||||||
|
fmt.Printf("Can't use %q as it can be confused a drive letter\n", name)
|
||||||
|
default:
|
||||||
NewRemote(name)
|
NewRemote(name)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
case 'd':
|
case 'd':
|
||||||
name := ChooseRemote()
|
name := ChooseRemote()
|
||||||
DeleteRemote(name)
|
DeleteRemote(name)
|
||||||
|
12
fs/driveletter.go
Normal file
12
fs/driveletter.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// +build !windows
|
||||||
|
|
||||||
|
package fs
|
||||||
|
|
||||||
|
// isDriveLetter returns a bool indicating whether name is a valid
|
||||||
|
// Windows drive letter
|
||||||
|
//
|
||||||
|
// On non windows platforms we don't have drive letters so we always
|
||||||
|
// return false
|
||||||
|
func isDriveLetter(name string) bool {
|
||||||
|
return false
|
||||||
|
}
|
13
fs/driveletter_windows.go
Normal file
13
fs/driveletter_windows.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// +build windows
|
||||||
|
|
||||||
|
package fs
|
||||||
|
|
||||||
|
// isDriveLetter returns a bool indicating whether name is a valid
|
||||||
|
// Windows drive letter
|
||||||
|
func isDriveLetter(name string) bool {
|
||||||
|
if len(name) != 1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
c := name[0]
|
||||||
|
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
|
||||||
|
}
|
11
fs/fs.go
11
fs/fs.go
@ -196,9 +196,6 @@ type Dir struct {
|
|||||||
// A channel of Dir objects
|
// A channel of Dir objects
|
||||||
type DirChan chan *Dir
|
type DirChan chan *Dir
|
||||||
|
|
||||||
// Pattern to match a url
|
|
||||||
var matcher = regexp.MustCompile(`^([\w_-]+):(.*)$`)
|
|
||||||
|
|
||||||
// Finds a FsInfo object for the name passed in
|
// Finds a FsInfo object for the name passed in
|
||||||
//
|
//
|
||||||
// Services are looked up in the config file
|
// Services are looked up in the config file
|
||||||
@ -211,16 +208,22 @@ func Find(name string) (*FsInfo, error) {
|
|||||||
return nil, fmt.Errorf("Didn't find filing system for %q", name)
|
return nil, fmt.Errorf("Didn't find filing system for %q", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pattern to match an rclone url
|
||||||
|
var matcher = regexp.MustCompile(`^([\w_-]+):(.*)$`)
|
||||||
|
|
||||||
// NewFs makes a new Fs object from the path
|
// NewFs makes a new Fs object from the path
|
||||||
//
|
//
|
||||||
// The path is of the form remote:path
|
// The path is of the form remote:path
|
||||||
//
|
//
|
||||||
// Remotes are looked up in the config file. If the remote isn't
|
// Remotes are looked up in the config file. If the remote isn't
|
||||||
// found then NotFoundInConfigFile will be returned.
|
// found then NotFoundInConfigFile will be returned.
|
||||||
|
//
|
||||||
|
// On Windows avoid single character remote names as they can be mixed
|
||||||
|
// up with drive letters.
|
||||||
func NewFs(path string) (Fs, error) {
|
func NewFs(path string) (Fs, error) {
|
||||||
parts := matcher.FindStringSubmatch(path)
|
parts := matcher.FindStringSubmatch(path)
|
||||||
fsName, configName, fsPath := "local", "local", path
|
fsName, configName, fsPath := "local", "local", path
|
||||||
if parts != nil {
|
if parts != nil && !isDriveLetter(parts[1]) {
|
||||||
configName, fsPath = parts[1], parts[2]
|
configName, fsPath = parts[1], parts[2]
|
||||||
var err error
|
var err error
|
||||||
fsName, err = ConfigFile.GetValue(configName, "type")
|
fsName, err = ConfigFile.GetValue(configName, "type")
|
||||||
|
Loading…
Reference in New Issue
Block a user