sync --no-content import from directory special remote
authorJoey Hess <joeyh@joeyh.name>
Mon, 28 Sep 2020 19:29:08 +0000 (15:29 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 28 Sep 2020 19:29:08 +0000 (15:29 -0400)
sync: When run without --content, import without copying from
importtree=yes directory special remotes. (Other special remotes may
support this later as well.)

This commit was sponsored by Svenne Krap on Patreon.

Annex/Import.hs
CHANGELOG
Command/Sync.hs

index 9b2a8ead93b4e0066c7895c3ef6c7f974142cbf3..fd5e02fe1674564212ca7df9a9be617f1f52025d 100644 (file)
@@ -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
index 4bae385a145eec0bc83ad6987e554255d588a798..ad4b04d294dcf76cf02e2e1c5c8ae3d550c339f2 100644 (file)
--- 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 <id@joeyh.name>  Mon, 14 Sep 2020 18:34:37 -0400
 
index ff17ad88b98107f8a464b14f853a1a8be3c1c6f5..e4e14824c0319b09937f4f968793abcf4f136194 100644 (file)
@@ -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)