dimitri / el-get

Manage the external elisp bits and pieces upon which you depend!
http://tapoueh.org/emacs/el-get.html
1.64k stars 457 forks source link

Usage of 'go get' for recipes of type "go" is broken with golang 1.16+ #2856

Open kscherer opened 2 years ago

kscherer commented 2 years ago

I tried to install the go-company recipe and the installation failed in the byte compile stage because it couldn't find the elisp source. I did some research and with the golang 1.17 installed on my system the 'go get' command only supports "module" mode [1] and this breaks the code in el-get-go.el.

There are several related issues: 1) 'go get' still builds the binary but this is deprecated and this functionality will be removed in newer versions

2) 'go get' installs the source code in 666 mode by default which causes el-get-reinstall to fail because the code cannot be removed (permission denied solved by chmod -R +w). There isn't a 'go uninstall' command that will remove the code. I guess golang developers never delete modules...

3) 'go get' in "module" mode integrates the module version into the download path. What used to be src/github.com/nsf/gocode/emacs-company is now pkg/mod/github.com/nsf/gocode@v0.0.0-20190302080247-5bee97b48836/emacs-company/. This makes it hard to locate the source code in a version independent way.

I don't know golang well enough yet to know what the right way to handle this is. Maybe 'go get -d' followed by 'go build' (and chmod -R +w?) to create the binary and a separate step to clone the git repository for the elisp code?

[1]: Technically it was no longer the default in 1.16: https://github.com/golang/go/wiki/GOPATH