diff --git a/Test.hs b/Test.hs index d10ef8b4cf..a8d01bf6df 100644 --- a/Test.hs +++ b/Test.hs @@ -1794,7 +1794,12 @@ test_crypto = do -- it needs to be able to store the agent socket there, -- which can be problimatic when testing some filesystems. absgpgtmp <- fromRawFilePath <$> absPath (toRawFilePath gpgtmp) - testscheme' scheme absgpgtmp + res <- testscheme' scheme absgpgtmp + -- gpg may still be running and would prevent + -- removeDirectoryRecursive from succeeding, so + -- force removal of the temp directory. + liftIO $ removeDirectoryForCleanup gpgtmp + return res testscheme' scheme absgpgtmp = intmpclonerepo $ do -- Since gpg uses a unix socket, which is limited to a -- short path, use whichever is shorter of absolute diff --git a/Utility/Tmp/Dir.hs b/Utility/Tmp/Dir.hs index 4deda1297e..904b65a526 100644 --- a/Utility/Tmp/Dir.hs +++ b/Utility/Tmp/Dir.hs @@ -69,11 +69,4 @@ removeTmpDir tmpdir = liftIO $ whenM (doesDirectoryExist tmpdir) $ do go tmpdir #endif where - -- Use removePathForcibly when available, to avoid crashing - -- if some other process is removing files in the directory at the - -- same time. -#if MIN_VERSION_directory(1,2,7) - go = removePathForcibly -#else go = removeDirectoryRecursive -#endif diff --git a/doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL.mdwn b/doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL.mdwn index 70ba96f0e1..d7137d7cce 100644 --- a/doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL.mdwn +++ b/doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL.mdwn @@ -39,3 +39,5 @@ cron-20220420/build-ubuntu.yaml-667-0346631d-failed/2_test-annex (crippled-tmp, cron-20220420/build-ubuntu.yaml-667-0346631d-failed/4_test-annex (nfs-home, ubuntu-latest).txt:1511:2022-04-20T03:34:57.9524586Z rsync remote: FAIL (1.57s) ... ``` + +> [[fixed|done]] --[[Joey]] diff --git a/doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL/comment_2_0327663314d2a8b2f0cab7536fdaa6bd._comment b/doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL/comment_2_0327663314d2a8b2f0cab7536fdaa6bd._comment new file mode 100644 index 0000000000..c6aa04f30b --- /dev/null +++ b/doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL/comment_2_0327663314d2a8b2f0cab7536fdaa6bd._comment @@ -0,0 +1,32 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 2""" + date="2022-05-02T17:08:15Z" + content=""" +Here is the bug in action: + + -r--r--r-- 1 joey joey 30 May 2 12:42 .git/annex/objects/Gj/8J/SHA256E-s30--3d65cafd9435fde3867a527d75ff8aea05a3632cb60574d45e0fc277f06c8a64/SHA256E-s30--3d65cafd9435fde3867a527d75ff8aea05a3632cb60574d45e0fc277f06c8a64 + joey@darkstar:/tmp/x>git-annex copy --to foo + copy x (to foo...) + ok + joey@darkstar:/tmp/x>ls -l .git/annex/objects/Gj/8J/SHA256E-s30--3d65cafd9435fde3867a527d75ff8aea05a3632cb60574d45e0fc277f06c8a64/SHA256E-s30--3d65cafd9435fde3867a527d75ff8aea05a3632cb60574d45e0fc277f06c8a64 + -rwxr--r-- 1 joey joey 30 May 2 12:42 .git/annex/objects/Gj/8J/SHA256E-s30--3d65cafd9435fde3867a527d75ff8aea05a3632cb60574d45e0fc277f06c8a64/SHA256E-s30--3d65cafd9435fde3867a527d75ff8aea05a3632cb60574d45e0fc277f06c8a64* + +At first I thought this was rsync modifying the permissions of the source file. + +But no... [[!commit 17b20a24502aee3bfc5683146c3899a233295aea]] +changed how temp directories get cleaned up. removePathForcibly +is actually changing the permissions of the object file hard link +in the rsynctmp directory when deleting that directory. Which also +changes the permissions of the object file. + +Filed a bug on removePathForcibly. + +I think this makes removePathForcibly unsuitable for general purpose +use in git-annex, because there are just too many ways for a hard link +to enter the picture. (Eg annex.thin, or even a user making their own +hard link that git-annex does not know about.) + +So, I've reverted that commit, and put in a more +targeted fix for the problem it was addressing. +"""]]