aboutsummaryrefslogtreecommitdiff
path: root/RemoteDaemon
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 /RemoteDaemon
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 'RemoteDaemon')
-rw-r--r--RemoteDaemon/Core.hs27
1 files changed, 15 insertions, 12 deletions
diff --git a/RemoteDaemon/Core.hs b/RemoteDaemon/Core.hs
index a3e4e6400..399b1553a 100644
--- a/RemoteDaemon/Core.hs
+++ b/RemoteDaemon/Core.hs
@@ -10,6 +10,7 @@ module RemoteDaemon.Core (runInteractive, runNonInteractive) where
import qualified Annex
import Common
import Types.GitConfig
+import Config.DynamicConfig
import RemoteDaemon.Common
import RemoteDaemon.Types
import RemoteDaemon.Transport
@@ -139,19 +140,21 @@ genRemoteMap :: TransportHandle -> TChan Emitted -> IO RemoteMap
genRemoteMap h@(TransportHandle (LocalRepo g) _) ochan =
M.fromList . catMaybes <$> mapM gen (Git.remotes g)
where
- gen r = case Git.location r of
- Git.Url u -> case M.lookup (uriScheme u) remoteTransports of
- Just transport
- | remoteAnnexSync gc -> do
- ichan <- newTChanIO :: IO (TChan Consumed)
- return $ Just
- ( r
- , (transport (RemoteRepo r gc) (RemoteURI u) h ichan ochan, ichan)
- )
+ gen r = do
+ gc <- atomically $ extractRemoteGitConfig g (Git.repoDescribe r)
+ case Git.location r of
+ Git.Url u -> case M.lookup (uriScheme u) remoteTransports of
+ Just transport -> ifM (getDynamicConfig (remoteAnnexSync gc))
+ ( do
+ ichan <- newTChanIO :: IO (TChan Consumed)
+ return $ Just
+ ( r
+ , (transport (RemoteRepo r gc) (RemoteURI u) h ichan ochan, ichan)
+ )
+ , return Nothing
+ )
+ Nothing -> return Nothing
_ -> return Nothing
- _ -> return Nothing
- where
- gc = extractRemoteGitConfig g (Git.repoDescribe r)
genTransportHandle :: IO TransportHandle
genTransportHandle = do