A remote can have a annexUrl configured, that is used by git-annex instead of its usual url. (Similar to pushUrl.)

This commit is contained in:
Joey Hess 2011-10-14 18:17:46 -04:00
parent 3e07780bf8
commit 9fa9214106
6 changed files with 44 additions and 8 deletions

22
Git.hs
View file

@ -48,8 +48,10 @@ module Git (
attributes,
remotes,
remotesAdd,
genRemote,
repoRemoteName,
repoRemoteNameSet,
repoRemoteNameFromKey,
checkAttr,
decodeGitFile,
encodeGitFile,
@ -185,10 +187,14 @@ repoRemoteName :: Repo -> Maybe String
repoRemoteName Repo { remoteName = Just name } = Just name
repoRemoteName _ = Nothing
{- Sets the name of a remote. -}
repoRemoteNameSet :: Repo -> String -> Repo
repoRemoteNameSet r n = r { remoteName = Just n }
{- Sets the name of a remote based on the git config key, such as
"remote.foo.url". -}
repoRemoteNameSet :: Repo -> String -> Repo
repoRemoteNameSet r k = r { remoteName = Just basename }
repoRemoteNameFromKey :: Repo -> String -> Repo
repoRemoteNameFromKey r k = repoRemoteNameSet r basename
where
basename = join "." $ reverse $ drop 1 $
reverse $ drop 1 $ split "." k
@ -501,9 +507,15 @@ configRemotes repo = mapM construct remotepairs
remotepairs = filterkeys isremote
isremote k = startswith "remote." k && endswith ".url" k
construct (k,v) = do
r <- gen $ calcloc v
return $ repoRemoteNameSet r k
gen v
r <- genRemote repo v
return $ repoRemoteNameFromKey r k
{- Generates one of a repo's remotes using a given location (ie, an url). -}
genRemote :: Repo -> String -> IO Repo
genRemote repo = gen . calcloc
where
filterconfig f = filter f $ M.toList $ config repo
gen v
| scpstyle v = repoFromUrl $ scptourl v
| isURI v = repoFromUrl v
| otherwise = repoFromRemotePath v repo