diff --git a/Command/Sync.hs b/Command/Sync.hs index 62b557ccc7..b010c8847e 100644 --- a/Command/Sync.hs +++ b/Command/Sync.hs @@ -315,7 +315,8 @@ seek' o = startConcurrency transferStages $ do -- importing only downloads new files not -- old files) let shouldsynccontent r - | isExport r && not (isImport r) = False + | isExport r && not (isImport r) + && not (exportHasAnnexObjects r) = False | otherwise = True syncedcontent <- withbranch $ seekSyncContent o @@ -944,7 +945,8 @@ syncFile o ebloom rs af k = do wantput r | pushOption o == False && operationMode o /= SatisfyMode = return False | Remote.readonly r || remoteAnnexReadOnly (Remote.gitconfig r) = return False - | isExport r || isImport r = return False + | isImport r && not (isExport r) = return False + | isExport r && not (exportHasAnnexObjects r) = return False | isThirdPartyPopulated r = return False | otherwise = wantGetBy True (Just k) af (Remote.uuid r) handleput lack inhere @@ -1147,6 +1149,9 @@ isExport = exportTree . Remote.config isImport :: Remote -> Bool isImport = importTree . Remote.config +exportHasAnnexObjects :: Remote -> Bool +exportHasAnnexObjects = annexObjects . Remote.config + isThirdPartyPopulated :: Remote -> Bool isThirdPartyPopulated = Remote.thirdPartyPopulated . Remote.remotetype diff --git a/doc/todo/git-annex_proxies.mdwn b/doc/todo/git-annex_proxies.mdwn index cc4ce80a52..e9562e70a4 100644 --- a/doc/todo/git-annex_proxies.mdwn +++ b/doc/todo/git-annex_proxies.mdwn @@ -33,6 +33,15 @@ Planned schedule of work: * Working on `exportreeplus` branch which is groundwork for proxying to exporttree=yes special remotes. +* `git-annex sync` with an annexobjects=true special remote, when exporting + a subdir that contained a file, which has now been moved out of the + subdir, first unexports the file, and then re-uploads it to the remote. + This could be avoided if when unexporting, it moves to the annex objects + location. + + (Might be worth doing that by default, this would let annexobjects=true + special remotes not be untrusted.) + * `git-annex sync --content` to an annexobjects=true special remote should get and put keys that are not in the exported tree to the annexobjects location.