aboutsummaryrefslogtreecommitdiffstats
path: root/internal/wfs/sftpfs
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2025-04-11 11:02:26 -0700
committerRose Hogenson <rosehogenson@posteo.net>2025-04-11 11:02:26 -0700
commitccf7a336ed6c51fb4d79357be6549df13b5f2e2f (patch)
treedceaf9ca8a4c0837f38dfe636ac31785d18d6be9 /internal/wfs/sftpfs
parentaa52e78484b6ce69765f4c4adff27321b99b2251 (diff)
downloadccp-ccf7a336ed6c51fb4d79357be6549df13b5f2e2f.tar.zst
Fix error messages and special case empty path
Diffstat (limited to 'internal/wfs/sftpfs')
-rw-r--r--internal/wfs/sftpfs/sftpfs.go55
1 files changed, 45 insertions, 10 deletions
diff --git a/internal/wfs/sftpfs/sftpfs.go b/internal/wfs/sftpfs/sftpfs.go
index 1457475..d7f0cdc 100644
--- a/internal/wfs/sftpfs/sftpfs.go
+++ b/internal/wfs/sftpfs/sftpfs.go
@@ -180,8 +180,16 @@ func (f *FS) Close() error {
return sftpErr
}
+func (f *FS) err(op, path string, err error) error {
+ return fmt.Errorf("%s %q: %w", op, f.User+"@"+f.Host+":"+path, err)
+}
+
func (f *FS) Open(name string) (fs.File, error) {
- return f.conn.Open(name)
+ file, err := f.conn.Open(name)
+ if err != nil {
+ return nil, f.err("open", name, err)
+ }
+ return file, nil
}
func (f *FS) ReadDir(name string) ([]fs.DirEntry, error) {
@@ -190,45 +198,72 @@ func (f *FS) ReadDir(name string) ([]fs.DirEntry, error) {
for i, entry := range entriesFileInfo {
entries[i] = fs.FileInfoToDirEntry(entry)
}
+ if err != nil {
+ return entries, f.err("readdir", name, err)
+ }
return entries, err
}
func (f *FS) Stat(name string) (fs.FileInfo, error) {
- return f.conn.Stat(name)
+ fi, err := f.conn.Stat(name)
+ if err != nil {
+ return nil, f.err("stat", name, err)
+ }
+ return fi, nil
}
func (f *FS) Lstat(name string) (fs.FileInfo, error) {
- return f.conn.Lstat(name)
+ fi, err := f.conn.Lstat(name)
+ if err != nil {
+ return nil, f.err("lstat", name, err)
+ }
+ return fi, nil
}
func (f *FS) ReadLink(name string) (string, error) {
- return f.conn.ReadLink(name)
+ target, err := f.conn.ReadLink(name)
+ if err != nil {
+ return "", f.err("readlink", name, err)
+ }
+ return target, nil
}
func (f *FS) Create(name string, perm fs.FileMode) (io.WriteCloser, error) {
file, err := f.conn.Create(name)
if err != nil {
- return nil, err
+ return nil, f.err("open", name, err)
}
if err := file.Chmod(perm); err != nil {
file.Close()
- return nil, err
+ return nil, f.err("chmod", name, err)
}
return file, nil
}
func (f *FS) Remove(name string) error {
- return f.conn.Remove(name)
+ if err := f.conn.Remove(name); err != nil {
+ return f.err("remove", name, err)
+ }
+ return nil
}
func (f *FS) Mkdir(name string) error {
- return f.conn.Mkdir(name)
+ if err := f.conn.Mkdir(name); err != nil {
+ return f.err("mkdir", name, err)
+ }
+ return nil
}
func (f *FS) Symlink(oldname, newname string) error {
- return f.conn.Symlink(oldname, newname)
+ if err := f.conn.Symlink(oldname, newname); err != nil {
+ return f.err("symlink", newname, err)
+ }
+ return nil
}
func (f *FS) Chmod(name string, mode fs.FileMode) error {
- return f.conn.Chmod(name, mode)
+ if err := f.conn.Chmod(name, mode); err != nil {
+ return f.err("chmod", name, err)
+ }
+ return nil
}