diff options
author | Joey Hess <joey@kitenet.net> | 2013-09-12 15:54:35 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-09-12 15:54:35 -0400 |
commit | b2ffbaf43ca2773e51ff2d5665db67f86f8ccdd7 (patch) | |
tree | 5b98d88bf1cbaf9e0d41458f6b9469f1895d6bdf /Remote/List.hs | |
parent | 4515c27f4273969ef2fae1dc0f90dbe98a905eae (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.hs | 9 |
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 |