diff --git a/pkg/sshutils/utils.go b/pkg/sshutils/utils.go index 2686ac7bc306e4cdbf40687087d1ed15375c0b5c..3f0e5b03dab226d971768273fa0ce4e36342aba3 100644 --- a/pkg/sshutils/utils.go +++ b/pkg/sshutils/utils.go @@ -3,6 +3,7 @@ package sshutils import ( "bytes" "context" + "fmt" "github.com/charmbracelet/ssh" gossh "golang.org/x/crypto/ssh" @@ -11,7 +12,10 @@ import ( // ParseAuthorizedKey parses an authorized key string into a public key. func ParseAuthorizedKey(ak string) (gossh.PublicKey, string, error) { pk, c, _, _, err := gossh.ParseAuthorizedKey([]byte(ak)) - return pk, c, err + if err != nil { + return nil, "", fmt.Errorf("failed to parse authorized key: %w", err) + } + return pk, c, nil } // MarshalAuthorizedKey marshals a public key into an authorized key string. diff --git a/pkg/storage/local.go b/pkg/storage/local.go index 39389eb17c445ad85fbe3ae442aa86dc2803f1aa..ced01867ca41a796112a4999f017f563175e6506 100644 --- a/pkg/storage/local.go +++ b/pkg/storage/local.go @@ -2,6 +2,7 @@ package storage import ( "errors" + "fmt" "io" "io/fs" "os" @@ -25,34 +26,49 @@ func NewLocalStorage(root string) *LocalStorage { // Delete implements Storage. func (l *LocalStorage) Delete(name string) error { name = l.fixPath(name) - return os.Remove(name) + if err := os.Remove(name); err != nil { + return fmt.Errorf("failed to remove file %s: %w", name, err) + } + return nil } // Open implements Storage. func (l *LocalStorage) Open(name string) (Object, error) { name = l.fixPath(name) - return os.Open(name) + f, err := os.Open(name) + if err != nil { + return nil, fmt.Errorf("failed to open file %s: %w", name, err) + } + return f, nil } // Stat implements Storage. func (l *LocalStorage) Stat(name string) (fs.FileInfo, error) { name = l.fixPath(name) - return os.Stat(name) + info, err := os.Stat(name) + if err != nil { + return nil, fmt.Errorf("failed to stat file %s: %w", name, err) + } + return info, nil } // Put implements Storage. func (l *LocalStorage) Put(name string, r io.Reader) (int64, error) { name = l.fixPath(name) if err := os.MkdirAll(filepath.Dir(name), os.ModePerm); err != nil { - return 0, err + return 0, fmt.Errorf("failed to create directory for %s: %w", name, err) } f, err := os.Create(name) if err != nil { - return 0, err + return 0, fmt.Errorf("failed to create file %s: %w", name, err) } defer f.Close() - return io.Copy(f, r) + n, err := io.Copy(f, r) + if err != nil { + return n, fmt.Errorf("failed to copy data to file %s: %w", name, err) + } + return n, nil } // Exists implements Storage. @@ -65,7 +81,7 @@ func (l *LocalStorage) Exists(name string) (bool, error) { if errors.Is(err, fs.ErrNotExist) { return false, nil } - return false, err + return false, fmt.Errorf("failed to check existence of file %s: %w", name, err) } // Rename implements Storage. @@ -73,10 +89,13 @@ func (l *LocalStorage) Rename(oldName, newName string) error { oldName = l.fixPath(oldName) newName = l.fixPath(newName) if err := os.MkdirAll(filepath.Dir(newName), os.ModePerm); err != nil { - return err + return fmt.Errorf("failed to create directory for %s: %w", newName, err) } - return os.Rename(oldName, newName) + if err := os.Rename(oldName, newName); err != nil { + return fmt.Errorf("failed to rename %s to %s: %w", oldName, newName, err) + } + return nil } // Replace all slashes with the OS-specific separator. diff --git a/pkg/ui/components/code/code.go b/pkg/ui/components/code/code.go index 279ef16147274def059dc32f18d2b14156347a2b..b02f570c1fbdd58125740f9a511090a47a1c710a 100644 --- a/pkg/ui/components/code/code.go +++ b/pkg/ui/components/code/code.go @@ -113,7 +113,7 @@ func (r *Code) Init() tea.Cmd { if r.sidenote != "" { lines := strings.Split(r.sidenote, "\n") - sideNoteWidth := int(math.Ceil(float64(r.Model.Width()) * r.SideNotePercent)) + sideNoteWidth := int(math.Ceil(float64(r.Viewport.Width()) * r.SideNotePercent)) for i, l := range lines { lines[i] = common.TruncateString(l, sideNoteWidth) }