Now supports git's insteadOf configuration, to modify the url used to access a remote. Note that pushInsteadOf is not used; that and pushurl are reserved for actual git pushes. Closes: #644278

This commit is contained in:
Joey Hess 2011-10-09 14:58:32 -04:00
parent dfee6e1ed6
commit 81ed7b203d
2 changed files with 21 additions and 4 deletions

22
Git.hs
View file

@ -496,15 +496,29 @@ configParse s = M.fromList $ map pair $ lines s
configRemotes :: Repo -> IO [Repo]
configRemotes repo = mapM construct remotepairs
where
remotepairs = M.toList $ filterremotes $ config repo
filterremotes = M.filterWithKey (\k _ -> isremote k)
filterconfig f = filter f $ M.toList $ config repo
filterkeys f = filterconfig (\(k,_) -> f k)
remotepairs = filterkeys isremote
isremote k = startswith "remote." k && endswith ".url" k
construct (k,v) = do
r <- gen v
r <- gen $ calcloc v
return $ repoRemoteNameSet r k
gen v | scpstyle v = repoFromUrl $ scptourl v
gen v
| scpstyle v = repoFromUrl $ scptourl v
| isURI v = repoFromUrl v
| otherwise = repoFromRemotePath v repo
-- insteadof config can rewrite remote location
calcloc l
| null insteadofs = l
| otherwise = replacement ++ drop (length replacement) l
where
replacement = take (length bestkey - length prefix) bestkey
bestkey = fst $ maximumBy longestvalue insteadofs
longestvalue (_, a) (_, b) = compare b a
insteadofs = filterconfig $ \(k, v) ->
endswith prefix k &&
startswith v l
prefix = ".insteadof"
-- git remotes can be written scp style -- [user@]host:dir
scpstyle v = ":" `isInfixOf` v && not ("//" `isInfixOf` v)
scptourl v = "ssh://" ++ host ++ slash dir

3
debian/changelog vendored
View file

@ -18,6 +18,9 @@ git-annex (3.20110929) UNRELEASED; urgency=low
the expected repository.
* Note that this git-annex will not interoperate with remotes using
older versions of git-annex-shell.
* Now supports git's insteadOf configuration, to modify the url
used to access a remote. Note that pushInsteadOf is not used;
that and pushurl are reserved for actual git pushes. Closes: #644278
-- Joey Hess <joeyh@debian.org> Thu, 29 Sep 2011 18:58:53 -0400