info: Added --autoenable option
Use cases include using git-annex init --no-autoenable and then going back and enabling the special remotes that have autoenable configured. As well as just querying to remember which ones have it enabled. It lists all special remotes that have autoenable=yes whether currently enabled or not. And it can be used with --json. I pondered making this "git-annex info autoenable", but that seemed wrong because then if the use has a directory named "autoenable", it's unclear what they are asking for. (Although "git-annex info remote" may be similarly unclear.) Making it an option does mean that it can't be provided via --batch though. Sponsored-by: Dartmouth College's Datalad project
This commit is contained in:
parent
0d50c90794
commit
c59ea5b1ca
5 changed files with 57 additions and 11 deletions
|
@ -63,7 +63,10 @@ newConfig name sameas fromuser m = case sameas of
|
|||
specialRemoteMap :: Annex (M.Map UUID RemoteName)
|
||||
specialRemoteMap = do
|
||||
m <- Logs.Remote.remoteConfigMap
|
||||
return $ M.fromList $ mapMaybe go (M.toList m)
|
||||
return $ specialRemoteNameMap m
|
||||
|
||||
specialRemoteNameMap :: M.Map UUID RemoteConfig -> M.Map UUID RemoteName
|
||||
specialRemoteNameMap = M.fromList . mapMaybe go . M.toList
|
||||
where
|
||||
go (u, c) = case lookupName c of
|
||||
Nothing -> Nothing
|
||||
|
@ -85,14 +88,14 @@ findType config = maybe unspecified (specified . fromProposedAccepted) $
|
|||
|
||||
autoEnable :: Annex ()
|
||||
autoEnable = do
|
||||
remotemap <- M.filter configured <$> remoteConfigMap
|
||||
m <- autoEnableable
|
||||
enabled <- getenabledremotes
|
||||
forM_ (M.toList remotemap) $ \(cu, c) -> unless (cu `M.member` enabled) $ do
|
||||
forM_ (M.toList m) $ \(cu, c) -> unless (cu `M.member` enabled) $ do
|
||||
let u = case findSameasUUID c of
|
||||
Just (Sameas u') -> u'
|
||||
Nothing -> cu
|
||||
case (lookupName c, findType c) of
|
||||
(Just name, Right t) -> whenM (canenable u) $ do
|
||||
(Just name, Right t) -> do
|
||||
showSideAction $ "Auto enabling special remote " ++ name
|
||||
dummycfg <- liftIO dummyRemoteGitConfig
|
||||
tryNonAsync (setup t (AutoEnable c) (Just u) Nothing c dummycfg) >>= \case
|
||||
|
@ -102,13 +105,25 @@ autoEnable = do
|
|||
setConfig (remoteAnnexConfig c "config-uuid") (fromUUID cu)
|
||||
_ -> return ()
|
||||
where
|
||||
configured rc = fromMaybe False $
|
||||
trueFalseParser' . fromProposedAccepted
|
||||
=<< M.lookup autoEnableField rc
|
||||
canenable u = (/= DeadTrusted) <$> lookupTrust u
|
||||
getenabledremotes = M.fromList
|
||||
. map (\r -> (getcu r, r))
|
||||
<$> remoteList
|
||||
getcu r = fromMaybe
|
||||
(Remote.uuid r)
|
||||
(remoteAnnexConfigUUID (Remote.gitconfig r))
|
||||
|
||||
autoEnableable :: Annex (M.Map UUID RemoteConfig)
|
||||
autoEnableable = do
|
||||
tm <- trustMap
|
||||
(M.filterWithKey (notdead tm) . M.filter configured)
|
||||
<$> remoteConfigMap
|
||||
where
|
||||
configured c = fromMaybe False $
|
||||
trueFalseParser' . fromProposedAccepted
|
||||
=<< M.lookup autoEnableField c
|
||||
notdead tm cu c =
|
||||
let u = case findSameasUUID c of
|
||||
Just (Sameas u') -> u'
|
||||
Nothing -> cu
|
||||
in lookupTrust' u tm /= DeadTrusted
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue