aboutsummaryrefslogtreecommitdiff
path: root/Remote.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-08-17 12:26:14 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-08-17 13:54:14 -0400
commitda0a1360d7b57d034620338996552752ab873045 (patch)
tree7cd5d994f15ae0d52e18321a129360b9e39a6d7d /Remote.hs
parent13ce429b5cbc3036e24613ce85e17af7acd9a480 (diff)
add annex-ignore-command and annex-sync-command configs
Added remote configuration settings annex-ignore-command and annex-sync-command, which are dynamic equivilants of the annex-ignore and annex-sync configurations. For this I needed a new DynamicConfig infrastructure. Its implementation should be as fast as before when there is no dynamic config, and it caches so shell commands are only run once. Note that annex-ignore-command exits nonzero when the remote should be ignored. While that may seem backwards, it allows using the same command for it as for annex-sync-command when you want to disable both. This commit was sponsored by Trenton Cronholm on Patreon.
Diffstat (limited to 'Remote.hs')
-rw-r--r--Remote.hs17
1 files changed, 10 insertions, 7 deletions
diff --git a/Remote.hs b/Remote.hs
index 8c774915a..877c9f37d 100644
--- a/Remote.hs
+++ b/Remote.hs
@@ -70,6 +70,7 @@ import Logs.Location hiding (logStatus)
import Logs.Web
import Remote.List
import Config
+import Config.DynamicConfig
import Git.Types (RemoteName)
import qualified Git
@@ -120,12 +121,13 @@ byNameWithUUID = checkuuid <=< byName
where
checkuuid Nothing = return Nothing
checkuuid (Just r)
- | uuid r == NoUUID = giveup $
- if remoteAnnexIgnore (gitconfig r)
- then noRemoteUUIDMsg r ++
+ | uuid r == NoUUID =
+ ifM (liftIO $ getDynamicConfig $ remoteAnnexIgnore (gitconfig r))
+ ( giveup $ noRemoteUUIDMsg r ++
" (" ++ show (remoteConfig (repo r) "ignore") ++
" is set)"
- else noRemoteUUIDMsg r
+ , giveup $ noRemoteUUIDMsg r
+ )
| otherwise = return $ Just r
byName' :: RemoteName -> Annex (Either String Remote)
@@ -292,8 +294,8 @@ remoteLocations locations trusted = do
let validtrustedlocations = nub locations `intersect` trusted
-- remotes that match uuids that have the key
- allremotes <- filter (not . remoteAnnexIgnore . gitconfig)
- <$> remoteList
+ allremotes <- remoteList
+ >>= filterM (not <$$> liftIO . getDynamicConfig . remoteAnnexIgnore . gitconfig)
let validremotes = remotesWithUUID allremotes locations
return (sortBy (comparing cost) validremotes, validtrustedlocations)
@@ -313,7 +315,8 @@ showLocations separateuntrusted key exclude nolocmsg = do
let msg = message ppuuidswanted ppuuidsskipped
unless (null msg) $
showLongNote msg
- ignored <- filter (remoteAnnexIgnore . gitconfig) <$> remoteList
+ ignored <- remoteList
+ >>= filterM (liftIO . getDynamicConfig . remoteAnnexIgnore . gitconfig)
unless (null ignored) $
showLongNote $ "(Note that these git remotes have annex-ignore set: " ++ unwords (map name ignored) ++ ")"
where