]> dgit.raspbian.org Git - git-annex.git/commitdiff
in unexport, check for annexobjects presence before updating location log
authorJoey Hess <joeyh@joeyh.name>
Fri, 2 Aug 2024 22:43:10 +0000 (18:43 -0400)
committerJoey Hess <joeyh@joeyh.name>
Fri, 2 Aug 2024 22:43:10 +0000 (18:43 -0400)
The key may still be in the annexobjects location.

Command/Export.hs
doc/todo/exporttree_remotes_could_store_any_key.mdwn

index a7ee89f11d7221382c98b322917ecd07f10682c2..ab7e1c49e2672017028b1886692f9bb4e7192500 100644 (file)
@@ -1,6 +1,6 @@
 {- git-annex command
  -
- - Copyright 2017-2023 Joey Hess <id@joeyh.name>
+ - Copyright 2017-2024 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU AGPL version 3 or higher.
  -}
@@ -21,6 +21,7 @@ import Git.Types
 import Git.FilePath
 import Git.Sha
 import qualified Remote
+import qualified Types.Remote as Remote
 import Types.Remote
 import Types.Export
 import Annex.Export
@@ -29,6 +30,7 @@ import Annex.Transfer
 import Annex.CatFile
 import Annex.FileMatcher
 import Annex.RemoteTrackingBranch
+import Annex.SpecialRemote.Config
 import Logs.Location
 import Logs.Export
 import Logs.PreferredContent
@@ -387,7 +389,15 @@ cleanupUnexport r db eks loc = do
                        concat <$> forM eks (getExportedLocation db)
                when (null remaininglocs) $
                        forM_ eks $ \ek ->
-                               logChange ek (uuid r) InfoMissing
+                               -- When annexobject=true, a key that
+                               -- was unexported may still be present
+                               -- on the remote.
+                               if annexObjects (Remote.config r)
+                                       then tryNonAsync (checkPresent r ek) >>= \case
+                                               Right False ->
+                                                       logChange ek (uuid r) InfoMissing
+                                               _ -> noop
+                                       else logChange ek (uuid r) InfoMissing
        
        removeEmptyDirectories r db loc eks
 
index fe2ade60c1c0aeef6c003df6d306cdfaeb00679b..5a9c20881b0ef07c043a3d0a47dc3453e63d417a 100644 (file)
@@ -67,12 +67,13 @@ exporttree=yes special remote R.
 * A exports tree T1 to R
 * B pulls from A, so knows R has tree T1
 * A exports tree T2 to R, which deletes file `foo`. So
-  it is moved to R's .git/annex/objects/
+  it is moved to R's .git/annex/objects. Or, alternatively,
+  `foo` is deleted, and the key is then copied to R again,
+  also to .git/annex/objects.
 * B exports tree T2 to R also. So B deletes file `foo`. But it was not
   present anyway. If B then marks the key as not present in R, we will have
   lost track of the fact that A moved it to the objects location.
 
 So, when calling removeExport, have to also check if the key is present in
-the objects location. If so, don't record the key as missing. (Or course,
-it already checks if some other exported file also has the content of the
-key.)
+the objects location. If so, either don't record the key as missing, or
+also remove from the objects location.