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.
This commit is contained in:
parent
86428f6261
commit
d39c120afa
21 changed files with 201 additions and 92 deletions
|
@ -227,7 +227,8 @@ gCryptSetup _ mu _ c gc = go $ M.lookup "gitrepo" c
|
|||
setupRepo :: Git.GCrypt.GCryptId -> Git.Repo -> Annex AccessMethod
|
||||
setupRepo gcryptid r
|
||||
| Git.repoIsUrl r = do
|
||||
(_, _, accessmethod) <- rsyncTransport r def
|
||||
dummycfg <- liftIO dummyRemoteGitConfig
|
||||
(_, _, accessmethod) <- rsyncTransport r dummycfg
|
||||
case accessmethod of
|
||||
AccessDirect -> rsyncsetup
|
||||
AccessShell -> ifM gitannexshellsetup
|
||||
|
@ -249,7 +250,8 @@ setupRepo gcryptid r
|
|||
-}
|
||||
rsyncsetup = Remote.Rsync.withRsyncScratchDir $ \tmp -> do
|
||||
liftIO $ createDirectoryIfMissing True $ tmp </> objectDir
|
||||
(rsynctransport, rsyncurl, _) <- rsyncTransport r def
|
||||
dummycfg <- liftIO dummyRemoteGitConfig
|
||||
(rsynctransport, rsyncurl, _) <- rsyncTransport r dummycfg
|
||||
let tmpconfig = tmp </> "config"
|
||||
void $ liftIO $ rsync $ rsynctransport ++
|
||||
[ Param $ rsyncurl ++ "/config"
|
||||
|
@ -389,8 +391,10 @@ toAccessMethod "shell" = AccessShell
|
|||
toAccessMethod _ = AccessDirect
|
||||
|
||||
getGCryptUUID :: Bool -> Git.Repo -> Annex (Maybe UUID)
|
||||
getGCryptUUID fast r = (genUUIDInNameSpace gCryptNameSpace <$>) . fst
|
||||
<$> getGCryptId fast r def
|
||||
getGCryptUUID fast r = do
|
||||
dummycfg <- liftIO dummyRemoteGitConfig
|
||||
(genUUIDInNameSpace gCryptNameSpace <$>) . fst
|
||||
<$> getGCryptId fast r dummycfg
|
||||
|
||||
coreGCryptId :: String
|
||||
coreGCryptId = "core.gcrypt-id"
|
||||
|
|
|
@ -35,6 +35,7 @@ import qualified Annex.Url as Url
|
|||
import Utility.Tmp
|
||||
import Config
|
||||
import Config.Cost
|
||||
import Config.DynamicConfig
|
||||
import Annex.Init
|
||||
import Annex.Version
|
||||
import Types.CleanupActions
|
||||
|
@ -128,7 +129,8 @@ configRead :: Bool -> Git.Repo -> Annex Git.Repo
|
|||
configRead autoinit r = do
|
||||
gc <- Annex.getRemoteGitConfig r
|
||||
u <- getRepoUUID r
|
||||
case (repoCheap r, remoteAnnexIgnore gc, u) of
|
||||
annexignore <- liftIO $ getDynamicConfig (remoteAnnexIgnore gc)
|
||||
case (repoCheap r, annexignore, u) of
|
||||
(_, True, _) -> return r
|
||||
(True, _, _) -> tryGitConfigRead autoinit r
|
||||
(False, _, NoUUID) -> tryGitConfigRead autoinit r
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue