func sftpMkdir(path string, client *sftp.Client, fi os.FileInfo) error { log.Printf("[DEBUG] sftp: creating dir %s", path) if err := client.Mkdir(path); err != nil { // Do not consider it an error if the directory existed remoteFi, fiErr := client.Lstat(path) if fiErr != nil || !remoteFi.IsDir() { return err } } mode := fi.Mode().Perm() if err := client.Chmod(path, mode); err != nil { return err } return nil }
func sftpUploadFile(path string, input io.Reader, client *sftp.Client, fi *os.FileInfo) error { log.Printf("[DEBUG] sftp: uploading %s", path) f, err := client.Create(path) if err != nil { return err } defer f.Close() if _, err = io.Copy(f, input); err != nil { return err } if fi != nil && (*fi).Mode().IsRegular() { mode := (*fi).Mode().Perm() err = client.Chmod(path, mode) if err != nil { return err } } return nil }