summaryrefslogtreecommitdiff
path: root/Remote/List.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-09-12 15:54:35 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-09-12 15:54:35 -0400
commitb2ffbaf43ca2773e51ff2d5665db67f86f8ccdd7 (patch)
tree5b98d88bf1cbaf9e0d41458f6b9469f1895d6bdf /Remote/List.hs
parent4515c27f4273969ef2fae1dc0f90dbe98a905eae (diff)
Support hot-swapping of removable drives containing gcrypt repositories.
To support this, a core.gcrypt-id is stored by git-annex inside the git config of a local gcrypt repository, when setting it up. That is compared with the remote's cached gcrypt-id. When different, a drive has been changed. git-annex then looks up the remote config for the uuid mapped from the core.gcrypt-id, and tweaks the configuration appropriately. When there is no known config for the uuid, it will refuse to use the remote.
Diffstat (limited to 'Remote/List.hs')
-rw-r--r--Remote/List.hs9
1 files changed, 5 insertions, 4 deletions
diff --git a/Remote/List.hs b/Remote/List.hs
index f38c1daaa..271ee8794 100644
--- a/Remote/List.hs
+++ b/Remote/List.hs
@@ -67,7 +67,7 @@ remoteList = do
return rs'
else return rs
where
- process m t = enumerate t >>= mapM (remoteGen m t)
+ process m t = enumerate t >>= mapM (remoteGen m t) >>= return . catMaybes
{- Forces the remoteList to be re-generated, re-reading the git config. -}
remoteListRefresh :: Annex [Remote]
@@ -80,16 +80,17 @@ remoteListRefresh = do
remoteList
{- Generates a Remote. -}
-remoteGen :: (M.Map UUID RemoteConfig) -> RemoteType -> Git.Repo -> Annex Remote
+remoteGen :: (M.Map UUID RemoteConfig) -> RemoteType -> Git.Repo -> Annex (Maybe Remote)
remoteGen m t r = do
u <- getRepoUUID r
g <- fromRepo id
let gc = extractRemoteGitConfig g (Git.repoDescribe r)
let c = fromMaybe M.empty $ M.lookup u m
- addHooks <$> generate t r u c gc
+ mrmt <- generate t r u c gc
+ return $ addHooks <$> mrmt
{- Updates a local git Remote, re-reading its git config. -}
-updateRemote :: Remote -> Annex Remote
+updateRemote :: Remote -> Annex (Maybe Remote)
updateRemote remote = do
m <- readRemoteLog
remote' <- updaterepo $ repo remote