// Open the backend specified by URI. // Valid formats are: // * /foo/bar -> local repository at /foo/bar // * s3://region/bucket -> amazon s3 bucket // * sftp://user@host/foo/bar -> remote sftp repository on host for user at path foo/bar // * sftp://host//tmp/backup -> remote sftp repository on host at path /tmp/backup // * c:\temp -> local repository at c:\temp - the path must exist func open(u string) (backend.Backend, error) { // check if the url is a directory that exists fi, err := os.Stat(u) if err == nil && fi.IsDir() { return local.Open(u) } url, err := url.Parse(u) if err != nil { return nil, err } if url.Scheme == "" { return local.Open(url.Path) } if len(url.Path) < 1 { return nil, fmt.Errorf("unable to parse url %v", url) } if url.Scheme == "s3" { return s3.Open(url.Host, url.Path[1:]) } args := []string{url.Host} if url.User != nil && url.User.Username() != "" { args = append(args, "-l") args = append(args, url.User.Username()) } args = append(args, "-s") args = append(args, "sftp") return sftp.Open(url.Path[1:], "ssh", args...) }
func init() { sftpserver := "" for _, dir := range strings.Split(TestSFTPPath, ":") { testpath := filepath.Join(dir, "sftp-server") _, err := os.Stat(testpath) if !os.IsNotExist(err) { sftpserver = testpath break } } if sftpserver == "" { SkipMessage = "sftp server binary not found, skipping tests" return } test.CreateFn = func() (backend.Backend, error) { err := createTempdir() if err != nil { return nil, err } return sftp.Create(tempBackendDir, sftpserver) } test.OpenFn = func() (backend.Backend, error) { err := createTempdir() if err != nil { return nil, err } return sftp.Open(tempBackendDir, sftpserver) } test.CleanupFn = func() error { if tempBackendDir == "" { return nil } fmt.Printf("removing test backend at %v\n", tempBackendDir) err := os.RemoveAll(tempBackendDir) tempBackendDir = "" return err } }
// Open the backend specified by URI. // Valid formats are: // * /foo/bar -> local repository at /foo/bar // * s3://region/bucket -> amazon s3 bucket // * sftp://user@host/foo/bar -> remote sftp repository on host for user at path foo/bar // * sftp://host//tmp/backup -> remote sftp repository on host at path /tmp/backup func open(u string) (backend.Backend, error) { url, err := url.Parse(u) if err != nil { return nil, err } if url.Scheme == "" { return local.Open(url.Path) } else if url.Scheme == "s3" { return s3.Open(url.Host, url.Path[1:]) } args := []string{url.Host} if url.User != nil && url.User.Username() != "" { args = append(args, "-l") args = append(args, url.User.Username()) } args = append(args, "-s") args = append(args, "sftp") return sftp.Open(url.Path[1:], "ssh", args...) }