avoid trying to export tree to proxied exporttree=yes remotes

This avoids a lot of ugly messages when syncing with such a remote.
The export tree happens on the proxy side.
This commit is contained in:
Joey Hess 2024-08-07 13:00:19 -04:00
parent 6d96734128
commit 55adbb6694
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
2 changed files with 18 additions and 10 deletions

View file

@ -305,8 +305,7 @@ seek' o = startConcurrency transferStages $ do
-- repositories, in case that lets content -- repositories, in case that lets content
-- be dropped from other repositories. -- be dropped from other repositories.
exportedcontent <- withbranch $ exportedcontent <- withbranch $
seekExportContent (Just o) seekExportContent (Just o) contentremotes
(filter isExport contentremotes)
-- Sync content with remotes, including -- Sync content with remotes, including
-- importing from import remotes (since -- importing from import remotes (since
@ -975,7 +974,13 @@ syncFile o ebloom rs af k = do
- Returns True if any file transfers were made. - Returns True if any file transfers were made.
-} -}
seekExportContent :: Maybe SyncOptions -> [Remote] -> CurrBranch -> Annex Bool seekExportContent :: Maybe SyncOptions -> [Remote] -> CurrBranch -> Annex Bool
seekExportContent o rs (mcurrbranch, madj) seekExportContent o rs currbranch =
seekExportContent' o (filter canexportcontent rs) currbranch
where
canexportcontent r = isExport r && not (isProxied r)
seekExportContent' :: Maybe SyncOptions -> [Remote] -> CurrBranch -> Annex Bool
seekExportContent' o rs (mcurrbranch, madj)
| null rs = return False | null rs = return False
| otherwise = do | otherwise = do
-- Propagate commits from the adjusted branch, so that -- Propagate commits from the adjusted branch, so that
@ -1147,6 +1152,9 @@ isExport = exportTree . Remote.config
isImport :: Remote -> Bool isImport :: Remote -> Bool
isImport = importTree . Remote.config isImport = importTree . Remote.config
isProxied :: Remote -> Bool
isProxied = isJust . remoteAnnexProxiedBy . Remote.gitconfig
exportHasAnnexObjects :: Remote -> Bool exportHasAnnexObjects :: Remote -> Bool
exportHasAnnexObjects = annexObjects . Remote.config exportHasAnnexObjects = annexObjects . Remote.config

View file

@ -33,13 +33,8 @@ Planned schedule of work:
* Working on `exportreeplus` branch which is groundwork for proxying to * Working on `exportreeplus` branch which is groundwork for proxying to
exporttree=yes special remotes. Need to merge it to master. exporttree=yes special remotes. Need to merge it to master.
* `git-annex sync --content` now updates a proxied exporttree=yes special * `git-annex sync` hides output of git-annex post-retreive, which is a
remote! But, there are some messages like these that should be avoided: problem when it's doing things that are expensive.
Not updating export to origin-d to reflect changes to the tree, because export tracking is not enabled. (Set remote.origin-d.annex-tracking-branch to enable it.)
export origin-d 1
export not supported
failed
* Handle cases where a single key is used by multiple files in the exported * Handle cases where a single key is used by multiple files in the exported
tree. Need to download from the special remote in order to export tree. Need to download from the special remote in order to export
@ -47,6 +42,11 @@ Planned schedule of work:
`git-annex push`. When using first `git push` followed by `git-annex push`. When using first `git push` followed by
`git-annex copy --to` the proxied remote, the received key is stored `git-annex copy --to` the proxied remote, the received key is stored
to all export locations.) to all export locations.)
* Implement `git-annex export treeish --to=foo --from=bar`, which
gets from bar as needed to send to foo. Make post-retrieve use
`--to=r --from=r` to handle the multiple files case.
* Handle case where the special remote does not support renameExport. * Handle case where the special remote does not support renameExport.
Each key will need to be downloaded from it in order to export the key Each key will need to be downloaded from it in order to export the key
back to it, if the proxy is to support such a remote. back to it, if the proxy is to support such a remote.