aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/Transfer.hs8
1 files changed, 6 insertions, 2 deletions
diff --git a/Annex/Transfer.hs b/Annex/Transfer.hs
index 805446b75..af9d89f4d 100644
--- a/Annex/Transfer.hs
+++ b/Annex/Transfer.hs
@@ -91,8 +91,9 @@ runTransfer' ignorelock t file shouldretry transferobserver transferaction = do
return v
where
#ifndef mingw32_HOST_OS
- prep tfile mode info = do
+ prep tfile mode info = catchPermissionDenied (const prepfailed) $ do
let lck = transferLockFile tfile
+ createAnnexDirectory $ takeDirectory lck
r <- tryLockExclusive (Just mode) lck
case r of
Nothing -> return (Nothing, True)
@@ -104,8 +105,9 @@ runTransfer' ignorelock t file shouldretry transferobserver transferaction = do
, return (Nothing, True)
)
#else
- prep tfile _mode info = liftIO $ do
+ prep tfile _mode info = catchPermissionDenied (const prepfailed) liftIO $ do
let lck = transferLockFile tfile
+ createAnnexDirectory $ takeDirectory lck
v <- catchMaybeIO $ lockExclusive lck
case v of
Nothing -> return (Nothing, False)
@@ -115,6 +117,8 @@ runTransfer' ignorelock t file shouldretry transferobserver transferaction = do
writeTransferInfoFile info tfile
return (Just lockhandle, False)
#endif
+ prepfailed = return (Nothing, False)
+
cleanup _ Nothing = noop
cleanup tfile (Just lockhandle) = do
let lck = transferLockFile tfile