Fixed #580: cross-device error handling failed on Windows
diff --git a/repo/installer.go b/repo/installer.go
index 324e4eb..52dcf12 100644
--- a/repo/installer.go
+++ b/repo/installer.go
@@ -5,6 +5,7 @@
"io/ioutil"
"os"
"path/filepath"
+ "runtime"
"strings"
"sync"
"time"
@@ -360,8 +361,11 @@
err = os.Rename(vp, i.VendorPath())
// When there are different physical devices we cannot rename cross device.
- // Fall back to manual copy.
- if err != nil && strings.Contains(err.Error(), "cross-device link") {
+ // Note, windows does not return the cross-device link message but instead
+ // bubbles up a system message (I believe is i18n). So, we try to detect the
+ // cross device link error or a windows error. If copy fails that will bubble
+ // up an additional error.
+ if err != nil && (strings.Contains(err.Error(), "cross-device link") || runtime.GOOS == "windows") {
msg.Debug("Cross link err, trying manual copy: %s", err)
err = gpath.CopyDir(vp, i.VendorPath())