Skip to content

Commit

Permalink
Merge branch 'sawka/wsl-fix' into evan/connparse
Browse files Browse the repository at this point in the history
  • Loading branch information
esimkowitz committed Jan 24, 2025
2 parents b9f703f + 9d445c3 commit 4feafdb
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 22 deletions.
3 changes: 3 additions & 0 deletions cmd/wsh/cmd/wshcmd-file-util.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"fmt"
"io"
"io/fs"
"log"
"strings"

"github.com/wavetermdev/waveterm/pkg/remote/connparse"
Expand Down Expand Up @@ -210,10 +211,12 @@ func streamFileList(zoneId string, path string, recursive bool, filesOnly bool)
}

func fixRelativePaths(path string) (string, error) {
log.Printf("fixRelativePaths: path=%q", path)
conn, err := connparse.ParseURI(path)
if err != nil {
return "", err
}
log.Printf("fixRelativePaths: conn=%v", conn)
if conn.Scheme == connparse.ConnectionTypeWsh {
if conn.Host == connparse.ConnHostCurrent {
conn.Host = RpcContext.Conn
Expand Down
51 changes: 33 additions & 18 deletions pkg/remote/connparse/connparse.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package connparse
import (
"context"
"fmt"
"log"
"regexp"
"strings"

Expand Down Expand Up @@ -87,49 +88,63 @@ func GetConnNameFromContext(ctx context.Context) (string, error) {

// ParseURI parses a connection URI and returns the connection type, host/path, and parameters.
func ParseURI(uri string) (*Connection, error) {
split := strings.SplitN(uri, "://", 2)
split := strings.SplitN(uri, "//", 2)
var scheme string
var rest string
if len(split) > 1 {
scheme = split[0]
scheme = strings.TrimSuffix(split[0], ":")
rest = split[1]
} else {
rest = split[0]
}

log.Printf("parseURI: scheme=%q, rest=%q", scheme, rest)

var host string
var remotePath string
if scheme == "" {
scheme = ConnectionTypeWsh
if strings.HasPrefix(rest, "//") {
rest = strings.TrimPrefix(rest, "//")

parseGenericPath := func() {
split = strings.SplitN(rest, "/", 2)
host = split[0]
if len(split) > 1 {
remotePath = split[1]
} else {
split = strings.SplitN(rest, "/", 2)
host = split[0]
if len(split) > 1 {
remotePath = split[1]
} else {
remotePath = "/"
}
}
log.Printf("parseGenericPath: host=%q, remotePath=%q", host, remotePath)
}
parseWshPath := func() {
if strings.HasPrefix(rest, "wsl://") {
host = wslConnRegex.FindString(rest)
remotePath = strings.TrimPrefix(rest, host)
log.Printf("parseWshPath: host=%q, remotePath=%q", host, remotePath)
} else {
parseGenericPath()
}
}

if scheme == "" {
scheme = ConnectionTypeWsh
if len(rest) != len(uri) {
// This accounts for when the uri starts with "//", which would get trimmed in the first split.
parseWshPath()
} else if strings.HasPrefix(rest, "/~") {
host = wshrpc.LocalConnName
remotePath = rest
} else {
host = ConnHostCurrent
remotePath = rest
}
} else if scheme == ConnectionTypeWsh {
parseWshPath()
} else {
if strings.HasPrefix(rest, "wsl://") {
host = wslConnRegex.FindString(rest)
remotePath = strings.TrimPrefix(rest, host)
} else {
split = strings.SplitN(rest, "/", 2)
host = split[0]
if len(split) > 1 {
remotePath = split[1]
} else {
remotePath = "/"
}
}
parseGenericPath()
}

if scheme == ConnectionTypeWsh {
Expand Down
6 changes: 2 additions & 4 deletions pkg/util/fileutil/fileutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,16 @@ import (

func FixPath(path string) (string, error) {
if strings.HasPrefix(path, "~") {
return filepath.Join(wavebase.GetHomeDir(), path[1:]), nil
path = filepath.Join(wavebase.GetHomeDir(), path[1:])
} else if !filepath.IsAbs(path) {
log.Printf("FixPath: path is not absolute: %s", path)
path, err := filepath.Abs(path)
if err != nil {
return "", err
}
log.Printf("FixPath: fixed path: %s", path)
return path, nil
} else {
return path, nil
}
return path, nil
}

const (
Expand Down

0 comments on commit 4feafdb

Please sign in to comment.