Support unescaped repository urls, like git does.

Turns out that git will accept a .git/config containing an url with eg,
spaces in its name. Handle this by escaping the url if it's not valid.

This also fixes support for urls containing escaped characters like %20
for space. Before, the path from the url was not unescaped properly.
This commit is contained in:
Joey Hess 2012-01-05 14:32:20 -04:00
parent 3e3ed62bdf
commit 0b27e6baa0
3 changed files with 23 additions and 7 deletions

4
Git.hs
View file

@ -29,7 +29,7 @@ module Git (
import qualified Data.Map as M
import Data.Char
import Network.URI (uriPath, uriScheme)
import Network.URI (uriPath, uriScheme, unEscapeString)
import Common
import Git.Types
@ -107,7 +107,7 @@ gitDir repo
-
- Note that for URL repositories, this is the path on the remote host. -}
workTree :: Repo -> FilePath
workTree Repo { location = Url u } = uriPath u
workTree Repo { location = Url u } = unEscapeString $ uriPath u
workTree Repo { location = Dir d } = d
workTree Repo { location = Unknown } = undefined