enableremote: Better handling of the unusual case where multiple special remotes have been initialized with the same name
Before it would pick one at random, though preferring ones that were not dead over dead ones. Now, if one is dead and the other not, it will use the non-dead one. But if both are not dead, or both dead, it will error out, suggesting the user clarify what they want to enable. Sponsored-by: Luke Shumaker on Patreon
This commit is contained in:
parent
7f3628331c
commit
58afb00f6e
3 changed files with 26 additions and 11 deletions
|
@ -1,6 +1,6 @@
|
|||
{- git-annex special remote configuration
|
||||
-
|
||||
- Copyright 2011-2019 Joey Hess <id@joeyh.name>
|
||||
- Copyright 2011-2021 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
- Licensed under the GNU AGPL version 3 or higher.
|
||||
-}
|
||||
|
@ -25,16 +25,22 @@ import qualified Types.Remote as Remote
|
|||
import Git.Types (RemoteName)
|
||||
|
||||
import qualified Data.Map as M
|
||||
import Data.Ord
|
||||
|
||||
{- See if there's an existing special remote with this name.
|
||||
-
|
||||
- Prefer remotes that are not dead when a name appears multiple times. -}
|
||||
- Remotes that are not dead come first in the list
|
||||
- when a name appears multiple times. -}
|
||||
findExisting :: RemoteName -> Annex (Maybe (UUID, RemoteConfig, Maybe (ConfigFrom UUID)))
|
||||
findExisting name = do
|
||||
(a, b) <- findExisting' name
|
||||
return (headMaybe (a++b))
|
||||
|
||||
{- Dead remotes with the name are in the second list, all others in the
|
||||
- first list. -}
|
||||
findExisting' :: RemoteName -> Annex ([(UUID, RemoteConfig, Maybe (ConfigFrom UUID))], [(UUID, RemoteConfig, Maybe (ConfigFrom UUID))])
|
||||
findExisting' name = do
|
||||
t <- trustMap
|
||||
headMaybe
|
||||
. sortBy (comparing $ \(u, _, _) -> Down $ M.lookup u t)
|
||||
partition (\(u, _, _) -> M.lookup u t /= Just DeadTrusted)
|
||||
. findByRemoteConfig (\c -> lookupName c == Just name)
|
||||
<$> Logs.Remote.remoteConfigMap
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue