From 745e97e0ab69a154e28ddaffaf451bb2db2e3804 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 8 Sep 2021 09:59:45 +0530 Subject: [PATCH] Send a started response after each dest file is registered --- kitty/file_transmission.py | 5 ++++- kitty_tests/file_transmission.py | 12 +++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/kitty/file_transmission.py b/kitty/file_transmission.py index d72d93bd8..22ed4fed8 100644 --- a/kitty/file_transmission.py +++ b/kitty/file_transmission.py @@ -58,7 +58,7 @@ class TransmissionType(NameReprEnum): rsync = auto() -ErrorCode = Enum('ErrorCode', 'OK EINVAL EPERM EISDIR') +ErrorCode = Enum('ErrorCode', 'OK STARTED EINVAL EPERM EISDIR') class TransmissionError(Exception): @@ -437,6 +437,9 @@ class FileTransmission: self.send_fail_on_os_error(err, 'Failed to create directory', ar, df.file_id) else: self.send_status_response(ErrorCode.OK, ar.id, df.file_id, name=df.name) + else: + if ar.send_acknowledgements: + self.send_status_response(code=ErrorCode.STARTED, request_id=ar.id, file_id=df.file_id, name=df.name) elif cmd.action in (Action.data, Action.end_data): try: df = ar.add_data(cmd) diff --git a/kitty_tests/file_transmission.py b/kitty_tests/file_transmission.py index d0ad967df..6c0aff11f 100644 --- a/kitty_tests/file_transmission.py +++ b/kitty_tests/file_transmission.py @@ -92,14 +92,15 @@ class TestFileTransmission(BaseTest): dest = os.path.join(self.tdir, '1.bin') ft.handle_serialized_command(serialized_cmd(action='send', quiet=quiet)) self.assertIn('', ft.active_receives) + self.ae(ft.test_responses, [] if quiet else [response(status='OK')]) ft.handle_serialized_command(serialized_cmd(action='file', name=dest, quiet=quiet)) self.assertPathEqual(ft.active_file().name, dest) self.assertIsNone(ft.active_file().actual_file) - self.ae(ft.test_responses, [] if quiet else [response(status='OK')]) + self.ae(ft.test_responses, [] if quiet else [response(status='OK'), response(status='STARTED', name=dest)]) ft.handle_serialized_command(serialized_cmd(action='data', data='abcd')) self.assertPathEqual(ft.active_file().actual_file.name, dest) ft.handle_serialized_command(serialized_cmd(action='end_data', data='123')) - self.ae(ft.test_responses, [] if quiet else [response(status='OK'), response(status='OK', name=dest)]) + self.ae(ft.test_responses, [] if quiet else [response(status='OK'), response(status='STARTED', name=dest), response(status='OK', name=dest)]) self.assertTrue(ft.active_receives) ft.handle_serialized_command(serialized_cmd(action='finish')) self.assertFalse(ft.active_receives) @@ -115,7 +116,7 @@ class TestFileTransmission(BaseTest): ft.handle_serialized_command(serialized_cmd(action='data', data='abcd')) self.assertTrue(os.path.exists(dest)) ft.handle_serialized_command(serialized_cmd(action='cancel')) - self.ae(ft.test_responses, [response(status='OK')]) + self.ae(ft.test_responses, [response(status='OK'), response(status='STARTED', name=dest)]) self.assertFalse(ft.active_receives) # compress with zlib ft = FileTransmission() @@ -129,7 +130,7 @@ class TestFileTransmission(BaseTest): ft.handle_serialized_command(serialized_cmd(action='data', data=data[:len(data)//2])) self.assertTrue(os.path.exists(dest)) ft.handle_serialized_command(serialized_cmd(action='end_data', data=data[len(data)//2:])) - self.ae(ft.test_responses, [response(status='OK'), response(status='OK', name=dest)]) + self.ae(ft.test_responses, [response(status='OK'), response(status='STARTED', name=dest), response(status='OK', name=dest)]) ft.handle_serialized_command(serialized_cmd(action='finish')) with open(dest, 'rb') as f: self.ae(f.read(), odata) @@ -151,9 +152,10 @@ class TestFileTransmission(BaseTest): kw['file_id'] = str(fid) kw['name'] = name ft.handle_serialized_command(serialized_cmd(**kw)) + self.assertResponses(ft, status='OK' if not data else 'STARTED', name=name, file_id=str(fid)) if data: ft.handle_serialized_command(serialized_cmd(action='end_data', file_id=str(fid), data=data)) - self.assertResponses(ft, status='OK', name=name, file_id=str(fid)) + self.assertResponses(ft, status='OK', name=name, file_id=str(fid)) send(dest, b'xyz', permissions=0o777, mtime=13) st = os.stat(dest)