diff options
author | Joey Hess <joey@kitenet.net> | 2011-10-09 14:58:32 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-10-09 14:58:32 -0400 |
commit | 81ed7b203d1c1af7a9c7a52c939eb0797fa16ab7 (patch) | |
tree | 02a67de19dc5591865dc4c56f306916a9724985b | |
parent | dfee6e1ed65e6df3fe66df6e8351d41a7572903f (diff) |
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
-rw-r--r-- | Git.hs | 22 | ||||
-rw-r--r-- | debian/changelog | 3 |
2 files changed, 21 insertions, 4 deletions
@@ -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 diff --git a/debian/changelog b/debian/changelog index 6a08d62e8..a72a85a8a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 |