haskell / cabal

Official upstream development repository for Cabal and cabal-install
https://haskell.org/cabal
Other
1.62k stars 697 forks source link

cabal-install converts the remote repo URI to a file path incorrectly on Windows. #5218

Open grayjay opened 6 years ago

grayjay commented 6 years ago

This issue is item 4 from #5204, but I wanted to open a separate issue because it doesn't just affect tests.

When the url field of the repository section of the cabal config file is a file URI, cabal treats its path component as a file path, without applying a conversion:

https://github.com/haskell/cabal/blob/59bb50b7d0c001949cb2c629a12584540636c627/cabal-install/Distribution/Client/GlobalFlags.hs#L248-L249

On Windows, the path is invalid because it contains forward slashes. If the path is an absolute path, hackage-security's path conversion code ends up removing the colon from the path and preventing cabal from reading root.json. There is more detail in https://github.com/haskell/cabal/issues/5204#issue-304234880.

grayjay commented 6 years ago

I tried searching for a conversion function, and the only one I could find was in haskell-lsp: https://hackage.haskell.org/package/haskell-lsp-0.2.0.1/docs/Language-Haskell-LSP-TH-DataTypesJSON.html#v:uriToFilePath