display "transfer already in progress" as a note

This commit is contained in:
Joey Hess 2013-07-17 16:16:17 -04:00
parent 2d8a801a97
commit ec8cf85fcc

View file

@ -118,14 +118,16 @@ runTransfer t file shouldretry a = do
info <- liftIO $ startTransferInfo file info <- liftIO $ startTransferInfo file
(meter, tfile, metervar) <- mkProgressUpdater t info (meter, tfile, metervar) <- mkProgressUpdater t info
mode <- annexFileMode mode <- annexFileMode
(fd, cantransfer) <- liftIO $ prep tfile mode info (fd, inprogress) <- liftIO $ prep tfile mode info
if cantransfer if inprogress
then do then do
showNote "transfer already in progress"
return False
else do
ok <- retry info metervar $ ok <- retry info metervar $
bracketIO (return fd) (cleanup tfile) (const $ a meter) bracketIO (return fd) (cleanup tfile) (const $ a meter)
unless ok $ recordFailedTransfer t info unless ok $ recordFailedTransfer t info
return ok return ok
else return False
where where
prep tfile mode info = do prep tfile mode info = do
#ifndef __WINDOWS__ #ifndef __WINDOWS__
@ -133,22 +135,20 @@ runTransfer t file shouldretry a = do
openFd (transferLockFile tfile) ReadWrite (Just mode) openFd (transferLockFile tfile) ReadWrite (Just mode)
defaultFileFlags { trunc = True } defaultFileFlags { trunc = True }
case mfd of case mfd of
Nothing -> return (mfd, True) Nothing -> return (mfd, False)
Just fd -> do Just fd -> do
locked <- catchMaybeIO $ locked <- catchMaybeIO $
setLock fd (WriteLock, AbsoluteSeek, 0, 0) setLock fd (WriteLock, AbsoluteSeek, 0, 0)
if isNothing locked if isNothing locked
then do then return (Nothing, True)
hPutStrLn stderr "transfer already in progress"
return (Nothing, False)
else do else do
void $ tryIO $ writeTransferInfoFile info tfile void $ tryIO $ writeTransferInfoFile info tfile
return (mfd, True) return (mfd, False)
#else #else
mfd <- catchMaybeIO $ do mfd <- catchMaybeIO $ do
writeFile (transferLockFile tfile) "" writeFile (transferLockFile tfile) ""
writeTransferInfoFile info tfile writeTransferInfoFile info tfile
return (mfd, True) return (mfd, False)
#endif #endif
cleanup _ Nothing = noop cleanup _ Nothing = noop
cleanup tfile (Just fd) = do cleanup tfile (Just fd) = do