fix handling of importtree-only remotes

Don't want to try to use these remotes as key/value remotes, which will
surely fail. It only recently became possible for importtree to be set
w/o exporttree, so before this code was ok.

(cherry picked from commit 97599cb0f7f4115aa5a3e81a91ee3d1d6c52dc84)
This commit is contained in:
Joey Hess 2020-12-18 15:11:53 -04:00
parent e9db382308
commit f62aee0525
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 8 additions and 3 deletions

View file

@ -30,7 +30,7 @@ type Reason = String
- and numcopies settings. - and numcopies settings.
- -
- Skips trying to drop from remotes that are appendonly, since those drops - Skips trying to drop from remotes that are appendonly, since those drops
- would presumably fail. Also skips dropping from exporttree remotes, - would presumably fail. Also skips dropping from exporttree/importtree remotes,
- which don't allow dropping individual keys. - which don't allow dropping individual keys.
- -
- The UUIDs are ones where the content is believed to be present. - The UUIDs are ones where the content is believed to be present.
@ -87,6 +87,7 @@ handleDropsFrom locs rs reason fromhere key afile si preverified runner = do
| uuid r `S.notMember` slocs = go fs rest n | uuid r `S.notMember` slocs = go fs rest n
| appendonly r = go fs rest n | appendonly r = go fs rest n
| exportTree (config r) = go fs rest n | exportTree (config r) = go fs rest n
| importTree (config r) = go fs rest n
| checkcopies n (Just $ Remote.uuid r) = | checkcopies n (Just $ Remote.uuid r) =
dropr fs r n >>= go fs rest dropr fs r n >>= go fs rest
| otherwise = pure n | otherwise = pure n

View file

@ -56,7 +56,8 @@ calcSyncRemotes = do
let syncable = filter good rs let syncable = filter good rs
contentremotes <- filterM (not <$$> liftIO . getDynamicConfig . remoteAnnexIgnore . Remote.gitconfig) $ contentremotes <- filterM (not <$$> liftIO . getDynamicConfig . remoteAnnexIgnore . Remote.gitconfig) $
filter (\r -> Remote.uuid r /= NoUUID) syncable filter (\r -> Remote.uuid r /= NoUUID) syncable
let (exportremotes, dataremotes) = partition (exportTree . Remote.config) contentremotes let (exportremotes, nonexportremotes) = partition (exportTree . Remote.config) contentremotes
let dataremotes = filter (not . importTree . Remote.config) nonexportremotes
return $ \dstatus -> dstatus return $ \dstatus -> dstatus
{ syncRemotes = syncable { syncRemotes = syncable

View file

@ -210,8 +210,9 @@ seek' o = do
let gitremotes = filter (Remote.gitSyncableRemoteType . Remote.remotetype) remotes let gitremotes = filter (Remote.gitSyncableRemoteType . Remote.remotetype) remotes
dataremotes <- filter (\r -> Remote.uuid r /= NoUUID) dataremotes <- filter (\r -> Remote.uuid r /= NoUUID)
<$> filterM (not <$$> liftIO . getDynamicConfig . remoteAnnexIgnore . Remote.gitconfig) remotes <$> filterM (not <$$> liftIO . getDynamicConfig . remoteAnnexIgnore . Remote.gitconfig) remotes
let (exportremotes, keyvalueremotes) = partition (exportTree . Remote.config) dataremotes let (exportremotes, nonexportremotes) = partition (exportTree . Remote.config) dataremotes
let importremotes = filter (importTree . Remote.config) dataremotes let importremotes = filter (importTree . Remote.config) dataremotes
let keyvalueremotes = partition (not . importTree . Remote.config) nonexportremotes
if cleanupOption o if cleanupOption o
then do then do

View file

@ -0,0 +1,2 @@
The assistant currently will export to exporttree=yes remotes, but it will
not import from importtree=yes remotes.