diff --git a/Annex/Import.hs b/Annex/Import.hs index 9b2a8ead93..fd5e02fe16 100644 --- a/Annex/Import.hs +++ b/Annex/Import.hs @@ -12,6 +12,7 @@ module Annex.Import ( ImportCommitConfig(..), buildImportCommit, buildImportTrees, + canImportKeys, importKeys, filterImportableContents, makeImportMatcher, @@ -281,6 +282,12 @@ buildImportTrees basetree msubdir importable = History topf = asTopFilePath $ maybe lf (\sd -> getTopFilePath sd P. lf) msubdir +canImportKeys :: Remote -> Bool -> Bool +canImportKeys remote importcontent = + importcontent || isJust (Remote.importKey ia) + where + ia = Remote.importActions remote + {- Downloads all new ContentIdentifiers, or when importcontent is False, - generates Keys without downloading. - @@ -304,7 +311,7 @@ importKeys -> ImportableContents (ContentIdentifier, ByteSize) -> Annex (Maybe (ImportableContents (Either Sha Key))) importKeys remote importtreeconfig importcontent importablecontents = do - when (not importcontent && isNothing (Remote.importKey ia)) $ + unless (canImportKeys remote importcontent) $ giveup "This remote does not support importing without downloading content." -- This map is used to remember content identifiers that -- were just imported, before they have necessarily been diff --git a/CHANGELOG b/CHANGELOG index 4bae385a14..ad4b04d294 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -27,6 +27,9 @@ git-annex (8.20200909) UNRELEASED; urgency=medium files into git, the same as is done when importing with content. If the largefiles expression needs the file content available (due to mimetype or mimeencoding being used), the import will fail. + * sync: When run without --content, import without copying from + importtree=yes directory special remotes. + (Other special remotes may support this later as well.) -- Joey Hess Mon, 14 Sep 2020 18:34:37 -0400 diff --git a/Command/Sync.hs b/Command/Sync.hs index ff17ad88b9..e4e14824c0 100644 --- a/Command/Sync.hs +++ b/Command/Sync.hs @@ -66,6 +66,7 @@ import Annex.UpdateInstead import Annex.Export import Annex.TaggedPush import Annex.CurrentBranch +import Annex.Import (canImportKeys) import Types.FileMatcher import qualified Database.Export as Export import Utility.Bloom @@ -468,8 +469,11 @@ importRemote importcontent o mergeconfig remote currbranch let subdir = if S.null p then Nothing else Just (asTopFilePath p) - Command.Import.seekRemote remote branch subdir importcontent - void $ mergeRemote remote currbranch mergeconfig o + if canImportKeys remote importcontent + then do + Command.Import.seekRemote remote branch subdir importcontent + void $ mergeRemote remote currbranch mergeconfig o + else warning $ "Cannot import from " ++ Remote.name remote ++ " when not syncing content." where wantpull = remoteAnnexPull (Remote.gitconfig remote)