1. 程式人生 > >[golang] Glide 包管理工具,在windows10 64位系統上的bug修復方案

[golang] Glide 包管理工具,在windows10 64位系統上的bug修復方案

環境 all 管理工具 oos for 討論 pos inb direct

bug重現
[ERROR] Unable to export dependencies to vendor directory: Error moving files: exit status 1. output: Access is denied. 0 dir(s) moved

解決方案

第一步

//找到這個文件 github.com/Masterminds/glide/blob/master/path/winbug.go


// CustomRemoveAll is similar to os.RemoveAll but deals with the bug outlined
// at https://github.com/golang/go/issues/20841.
func CustomRemoveAll(p string) error {

    // Handle the windows case first
    if runtime.GOOS == "windows" {
        msg.Debug("Detected Windows. Removing files using windows command")
        cmd := exec.Command("cmd.exe", "/c", "rd", "/s", "/q", p) //主要修改這一行代碼,將其替換為 cmd := exec.Command("cmd.exe", "/c", "xcopy /s/y", o, n+"\\")
        output, err := cmd.CombinedOutput()
        if err != nil {
            exitCode := getExitCode(err)
            if exitCode != winErrorFileNotFound && exitCode != winErrorPathNotFound {
                return fmt.Errorf("Error removing files: %s. output: %s", err, output)
            }
        }
        return nil
    } else if detectWsl() {
        cmd := exec.Command("rm", "-rf", p)
        output, err2 := cmd.CombinedOutput()
        msg.Debug("Detected Windows Subsystem for Linux. Removing files using subsystem command")
        if err2 != nil {
            return fmt.Errorf("Error removing files: %s. output: %s", err2, output)
        }
        return nil
    }
    return os.RemoveAll(p)
}

第二步,重新編譯glide.go文件

go build glide.go

第三步,將編譯生成的可執行文件glide.exe,復制到gopath下的bin目錄(這個目錄是加了系統環境變量的,所以將其放入該目錄)

第四步,更詳細的討論解決方案 https://github.com/Masterminds/glide/issues/873

[golang] Glide 包管理工具,在windows10 64位系統上的bug修復方案