Dont wait for cancel response when user denies permission

This commit is contained in:
Kovid Goyal 2023-07-25 11:47:41 +05:30
parent ca485cc0f7
commit 2cae0ab695
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
3 changed files with 19 additions and 2 deletions

View file

@ -500,7 +500,7 @@ func (self *manager) on_file_transfer_response(ftc *FileTransmissionCommand) (er
if ftc.Status == `OK` {
self.state = state_waiting_for_file_metadata
} else {
return fmt.Errorf(`Permission for transfer denied`)
return os.ErrPermission
}
} else {
return fmt.Errorf(`Unexpected response from terminal: %s`, ftc.String())
@ -780,6 +780,10 @@ func (self *handler) on_file_transfer_response(ftc *FileTransmissionCommand) (er
}
transfer_started := self.manager.state == state_transferring
if merr := self.manager.on_file_transfer_response(ftc); merr != nil {
if merr == os.ErrPermission {
// terminal will not respond to cancel request
return fmt.Errorf("Permission denied by user")
}
self.abort_with_error(merr)
return
}

View file

@ -179,6 +179,7 @@ def __init__(self, cmd, cwd, allow=True, env=None):
class TestFileTransmission(BaseTest):
def setUp(self):
self.direction_receive = False
super().setUp()
self.tdir = os.path.realpath(tempfile.mkdtemp())
self.responses = []
@ -327,7 +328,7 @@ def test_rsync_hashers(self):
@contextmanager
def run_kitten(self, cmd, home_dir='', allow=True):
cwd = os.path.realpath(tempfile.mkdtemp(suffix='-cwd', dir=self.tdir))
cmd = [kitten_exe(), 'transfer'] + cmd
cmd = [kitten_exe(), 'transfer'] + (['--direction=receive'] if self.direction_receive else []) + cmd
env = {'PWD': cwd}
if home_dir:
env['HOME'] = home_dir
@ -342,6 +343,17 @@ def run_kitten(self, cmd, home_dir='', allow=True):
if os.path.exists(cwd):
shutil.rmtree(cwd)
def test_transfer_receive(self):
self.direction_receive = True
src = os.path.join(self.tdir, 'src')
self.src_data = os.urandom(11113)
with open(src, 'wb') as s:
s.write(self.src_data)
dest = os.path.join(self.tdir, 'dest')
with self.run_kitten([src, dest], allow=False) as pty:
pty.wait_till_child_exits(require_exit_code=1)
self.assertFalse(os.path.exists(dest))
def test_transfer_send(self):
src = os.path.join(self.tdir, 'src')
self.src_data = os.urandom(9137)

View file

@ -5,6 +5,7 @@ package wcswidth
import (
"bytes"
"fmt"
"kitty/tools/utils"
)