diff options
author | Joey Hess <joey@kitenet.net> | 2013-09-29 14:51:49 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-09-29 14:51:49 -0400 |
commit | 54dc77ac53eade5ff226db073055decf24b9761d (patch) | |
tree | f9884f8e8e260ac0c3aaec9a7a65e9a4a0cd960a /Remote.hs | |
parent | 209f178e8c481a3ccab1ebe2e59b1412652b3906 (diff) |
webapp: Fixed a bug where when a new remote is added, one file may fail to sync to or from it
This happened because the transferrer process did not know about the new
remote. remoteFromUUID crashed, which crashed the transferrer. When it was
restarted, the new one knew about the new remote so all further files would
transfer, but the one file would temporarily not be, until transfers retried.
Fixed by making remoteFromUUID not crash, and try reloading the remote list
if it does not know about a remote.
Note that this means that remoteFromUUID does not only return Nothing anymore
when the UUID is the UUID of the local repository. So had to change some code
that dependend on that assumption.
Diffstat (limited to 'Remote.hs')
-rw-r--r-- | Remote.hs | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -168,13 +168,19 @@ prettyListUUIDs uuids = do prettyUUID :: UUID -> Annex String prettyUUID u = concat <$> prettyListUUIDs [u] -{- Gets the remote associated with a UUID. - - There's no associated remote when this is the UUID of the local repo. -} +{- Gets the remote associated with a UUID. -} remoteFromUUID :: UUID -> Annex (Maybe Remote) remoteFromUUID u = ifM ((==) u <$> getUUID) ( return Nothing - , Just . fromMaybe (error "Unknown UUID") . M.lookup u <$> remoteMap id + , do + maybe tryharder (return . Just) =<< findinmap ) + where + findinmap = M.lookup u <$> remoteMap id + {- Re-read remote list in case a new remote has popped up. -} + tryharder = do + void remoteListRefresh + findinmap {- Filters a list of remotes to ones that have the listed uuids. -} remotesWithUUID :: [Remote] -> [UUID] -> [Remote] |