GHC boot script can't handle Git remote not named origin
Problem
I ran the following to get the sources for GHC to build them:
git clone -o ghc --recursive http://git.haskell.org/ghc.git
Note especially the -o ghc
part, which uses the Git remote name ghc
instead of the default origin
. When a custom remote name is used, ./boot
fails:
$ ./boot
Traceback (most recent call last):
File "./boot", line 193, in <module>
check_for_url_rewrites()
File "./boot", line 29, in check_for_url_rewrites
subprocess.check_output('git config remote.origin.url'.split()).find(b'github.com') != -1 and \
File "/usr/lib/python3.5/subprocess.py", line 626, in check_output
**kwargs).stdout
File "/usr/lib/python3.5/subprocess.py", line 708, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['git', 'config', 'remote.origin.url']' returned non-zero exit status 1
$ git config remote.origin.url
$ echo $?
1
Solution
git config remote.origin.url
can be used first. Whenever git config remote.origin.url
fails, a git rev-parse
command (thanks to freenode/#git/ikke for it) can be used to get the remote name and branch that would be pushed to:
$ git rev-parse --symbolic-full-name --abbrev-ref @{upstream}
ghc/coercible
$ git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | sed 's/\/.*$//'
ghc
$ git config "remote.$( git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | sed 's/\/.*$//' ).url"
http://git.haskell.org/ghc.git
Workaround
Rename the remote to origin
:
$ git remote rename "$( git config branch.master.remote )" origin
$ ./boot
Creating libraries/mtl/ghc.mk
Creating libraries/unix/ghc.mk
Creating libraries/text/ghc.mk
⋮