mirror of
https://github.com/kovidgoyal/kitty
synced 2026-06-08 22:28:24 +02:00
Clean up error handling
This commit is contained in:
@@ -196,6 +196,11 @@ func (self *remote_file) Write(data []byte) (n int, err error) {
|
|||||||
func (self *remote_file) write_data(data []byte, is_last bool) (amt_written int64, err error) {
|
func (self *remote_file) write_data(data []byte, is_last bool) (amt_written int64, err error) {
|
||||||
self.received_bytes += int64(len(data))
|
self.received_bytes += int64(len(data))
|
||||||
var base, pos int64
|
var base, pos int64
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("Failed writing to %s with error: %w", self.expanded_local_path, err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
if self.actual_file != nil {
|
if self.actual_file != nil {
|
||||||
base, err = self.actual_file.tell()
|
base, err = self.actual_file.tell()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -422,10 +427,11 @@ func (self *handler) print_err(err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *handler) abort_with_error(err error, delay ...time.Duration) {
|
func (self *handler) abort_with_error(err error, delay ...time.Duration) {
|
||||||
|
if err != nil {
|
||||||
self.print_err(err)
|
self.print_err(err)
|
||||||
|
}
|
||||||
self.lp.Println(`Waiting to ensure terminal cancels transfer, will quit in a few seconds`)
|
self.lp.Println(`Waiting to ensure terminal cancels transfer, will quit in a few seconds`)
|
||||||
self.abort_transfer(delay...)
|
self.abort_transfer(delay...)
|
||||||
self.lp.Println(self.ctx.BrightRed(err.Error()))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *handler) do_error_quit(loop.IdType) error {
|
func (self *handler) do_error_quit(loop.IdType) error {
|
||||||
@@ -434,7 +440,7 @@ func (self *handler) do_error_quit(loop.IdType) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *handler) abort_transfer(delay ...time.Duration) {
|
func (self *handler) abort_transfer(delay ...time.Duration) {
|
||||||
var d time.Duration = -1
|
var d time.Duration = 5 * time.Second
|
||||||
if len(delay) > 0 {
|
if len(delay) > 0 {
|
||||||
d = delay[0]
|
d = delay[0]
|
||||||
}
|
}
|
||||||
@@ -777,9 +783,8 @@ func (self *handler) on_file_transfer_response(ftc *FileTransmissionCommand) (er
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
transfer_started := self.manager.state == state_transferring
|
transfer_started := self.manager.state == state_transferring
|
||||||
err = self.manager.on_file_transfer_response(ftc)
|
if merr := self.manager.on_file_transfer_response(ftc); merr != nil {
|
||||||
if err != nil {
|
self.abort_with_error(merr)
|
||||||
self.abort_with_error(err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !transfer_started && self.manager.state == state_transferring {
|
if !transfer_started && self.manager.state == state_transferring {
|
||||||
@@ -787,9 +792,12 @@ func (self *handler) on_file_transfer_response(ftc *FileTransmissionCommand) (er
|
|||||||
self.print_err(fmt.Errorf(`Failed to process some sources:`))
|
self.print_err(fmt.Errorf(`Failed to process some sources:`))
|
||||||
for spec_id, msg := range self.manager.failed_specs {
|
for spec_id, msg := range self.manager.failed_specs {
|
||||||
spec := self.manager.spec[spec_id]
|
spec := self.manager.spec[spec_id]
|
||||||
self.lp.Println(fmt.Sprintf(` {%s}: {%s}`, spec, msg))
|
if strings.HasPrefix(msg, `ENOENT:`) {
|
||||||
|
msg = `File not found`
|
||||||
}
|
}
|
||||||
self.lp.Quit(1)
|
self.lp.Println(fmt.Sprintf(` %s: %s`, spec, msg))
|
||||||
|
}
|
||||||
|
self.abort_with_error(nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
zero_specs := make([]string, 0, len(self.manager.spec_counts))
|
zero_specs := make([]string, 0, len(self.manager.spec_counts))
|
||||||
@@ -799,11 +807,11 @@ func (self *handler) on_file_transfer_response(ftc *FileTransmissionCommand) (er
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(zero_specs) > 0 {
|
if len(zero_specs) > 0 {
|
||||||
self.print_err(fmt.Errorf(`No matches found for: %s`, strings.Join(zero_specs, ", ")))
|
self.abort_with_error(fmt.Errorf(`No matches found for: %s`, strings.Join(zero_specs, ", ")))
|
||||||
self.lp.Quit(1)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err = self.manager.collect_files(); err != nil {
|
if merr := self.manager.collect_files(); merr != nil {
|
||||||
|
self.abort_with_error(merr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if self.cli_opts.ConfirmPaths {
|
if self.cli_opts.ConfirmPaths {
|
||||||
@@ -1079,7 +1087,7 @@ func receive_loop(opts *Options, spec []string, dest string) (err error, rc int)
|
|||||||
ssz += f.sent_bytes
|
ssz += f.sent_bytes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if tsf > 0 && dsz+ssz > 0 {
|
if tsf > 0 && dsz+ssz > 0 && rc == 0 {
|
||||||
print_rsync_stats(tsf, dsz, ssz)
|
print_rsync_stats(tsf, dsz, ssz)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user