From c598350fc568d4211a4aa2ac2b6b81364217542c Mon Sep 17 00:00:00 2001 From: vrubelroman Date: Wed, 13 May 2026 12:43:03 +0300 Subject: [PATCH] fix: skip local PathExists check when target is remote (SFTP copy) --- internal/ui/model.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/internal/ui/model.go b/internal/ui/model.go index b1fe083..f0485a5 100644 --- a/internal/ui/model.go +++ b/internal/ui/model.go @@ -2358,17 +2358,20 @@ func (m *Model) handleTransfer(kind fileOpKind) (tea.Model, tea.Cmd) { kind, m.active, srcPane.Path, dstPane.Path, srcHasRemote, dstHasRemote, sources) // Check for existing targets (fast — one Stat per top-level item) + // Skip when target is remote — local fs check doesn't apply. existingTargets := 0 - for _, sourcePath := range sources { - targetPath := filepath.Join(targetDir, filepath.Base(sourcePath)) - exists, err := vfs.PathExists(targetPath) - if err != nil { - log.Printf("[ERROR] Transfer: path check failed: %s err=%v", targetPath, err) - m.status = err.Error() - return m, nil - } - if exists { - existingTargets++ + if !dstHasRemote { + for _, sourcePath := range sources { + targetPath := filepath.Join(targetDir, filepath.Base(sourcePath)) + exists, err := vfs.PathExists(targetPath) + if err != nil { + log.Printf("[ERROR] Transfer: path check failed: %s err=%v", targetPath, err) + m.status = err.Error() + return m, nil + } + if exists { + existingTargets++ + } } } overwrite := existingTargets > 0