parent
4d3e1cfd6e
commit
e2bf773f3b
46
nav.go
46
nav.go
@ -12,6 +12,7 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
times "gopkg.in/djherbis/times.v1"
|
times "gopkg.in/djherbis/times.v1"
|
||||||
@ -743,9 +744,48 @@ func (nav *nav) moveAsync(ui *ui, srcs []string, dstDir string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Rename(src, dst); err != nil {
|
if err := os.Rename(src, dst); err != nil {
|
||||||
errCount++
|
if err.(*os.LinkError).Err.(syscall.Errno) == syscall.EXDEV {
|
||||||
echo.args[0] = fmt.Sprintf("[%d] %s", errCount, err)
|
total, err := copySize([]string{src})
|
||||||
ui.exprChan <- echo
|
if err != nil {
|
||||||
|
echo.args[0] = err.Error()
|
||||||
|
ui.exprChan <- echo
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
nav.copyTotalChan <- total
|
||||||
|
|
||||||
|
nums, errs := copyAll([]string{src}, dstDir)
|
||||||
|
|
||||||
|
oldCount := errCount
|
||||||
|
loop:
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case n := <-nums:
|
||||||
|
nav.copyBytesChan <- n
|
||||||
|
case err, ok := <-errs:
|
||||||
|
if !ok {
|
||||||
|
break loop
|
||||||
|
}
|
||||||
|
errCount++
|
||||||
|
echo.args[0] = fmt.Sprintf("[%d] %s", errCount, err)
|
||||||
|
ui.exprChan <- echo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nav.copyTotalChan <- -total
|
||||||
|
|
||||||
|
if errCount == oldCount {
|
||||||
|
if err := os.RemoveAll(src); err != nil {
|
||||||
|
errCount++
|
||||||
|
echo.args[0] = fmt.Sprintf("[%d] %s", errCount, err)
|
||||||
|
ui.exprChan <- echo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
errCount++
|
||||||
|
echo.args[0] = fmt.Sprintf("[%d] %s", errCount, err)
|
||||||
|
ui.exprChan <- echo
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user