Mercurial > gcp
diff gcp @ 14:21b38ed339a4
Fixed KeyboardInterrupt management
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 28 Sep 2010 14:54:13 +0800 |
parents | 894530949e30 |
children | 8253a5ccbe9a |
line wrap: on
line diff
--- a/gcp Tue Sep 28 14:40:27 2010 +0800 +++ b/gcp Tue Sep 28 14:54:13 2010 +0800 @@ -300,31 +300,38 @@ @param source_fd: file descriptor of the file to copy @param condition: condition which launched the callback (glib.IO_IN) @param data: tuple with (destination file descriptor, copying options)""" - dest_fd,options = data + try: + dest_fd,options = data - try: - buff = source_fd.read(self.buffer_size) - except: - self.__copyFailed("can't read source", source_fd, dest_fd) - return False + try: + buff = source_fd.read(self.buffer_size) + except KeyboardInterrupt: + raise KeyboardInterrupt + except: + self.__copyFailed("can't read source", source_fd, dest_fd) + return False - try: - dest_fd.write(buff) - except: - self.__copyFailed("can't write to dest", source_fd, dest_fd) - return False + try: + dest_fd.write(buff) + except KeyboardInterrupt: + raise KeyboardInterrupt + except: + self.__copyFailed("can't write to dest", source_fd, dest_fd) + return False - self.bytes_copied += len(buff) - if self.progress: - self._pbar_update() + self.bytes_copied += len(buff) + if self.progress: + self._pbar_update() - if len(buff) != self.buffer_size: - source_fd.close() - dest_fd.close() - self.__post_copy(source_fd.name, dest_fd.name, options) - self.journal.closeFile() - return False - return True + if len(buff) != self.buffer_size: + source_fd.close() + dest_fd.close() + self.__post_copy(source_fd.name, dest_fd.name, options) + self.journal.closeFile() + return False + return True + except KeyboardInterrupt: + self._userInterruption() def __filename_fix(self, filename, options, no_journal=False): """Fix filenames incompatibilities/mistake according to options @@ -481,13 +488,17 @@ self.__launched = True return (True,'') + def _userInterruption(self): + info(_("User interruption: good bye")) + exit(1) + def go(self): """Launch main loop""" self.loop = gobject.MainLoop() try: self.loop.run() except KeyboardInterrupt: - info(_("User interruption: good bye")) + self._userInterruption() if __name__ == "__main__":