diff options
author | Joey Hess <joey@kitenet.net> | 2014-08-15 14:17:05 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-08-15 14:17:05 -0400 |
commit | f448a738b8322a07994831e256e3f46207ee4950 (patch) | |
tree | b7ab0302e7994bd2c1e78c13965914c49b40de55 /Annex/Transfer.hs | |
parent | b38491100168141f2a1daa089a5416a92014ec25 (diff) |
git-annex-shell sendkey: Don't fail if a remote asks for a key to be sent that already has a transfer lock file indicating it's being sent to that remote. The remote may have moved between networks, or reconnected.
Diffstat (limited to 'Annex/Transfer.hs')
-rw-r--r-- | Annex/Transfer.hs | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/Annex/Transfer.hs b/Annex/Transfer.hs index ebc8e8b89..5e98a87d9 100644 --- a/Annex/Transfer.hs +++ b/Annex/Transfer.hs @@ -12,6 +12,7 @@ module Annex.Transfer ( upload, download, runTransfer, + alwaysRunTransfer, noRetry, forwardRetry, ) where @@ -46,12 +47,23 @@ download u key f d a _witness = runTransfer (Transfer Download u key) f d a - no transfer information or lock file is used. -} runTransfer :: Transfer -> Maybe FilePath -> RetryDecider -> (MeterUpdate -> Annex Bool) -> Annex Bool -runTransfer t file shouldretry a = do +runTransfer = runTransfer' False + +{- Like runTransfer, but ignores any existing transfer lock file for the + - transfer, allowing re-running a transfer that is already in progress. + - + - Note that this may result in confusing progress meter display in the + - webapp, if multiple processes are writing to the transfer info file. -} +alwaysRunTransfer :: Transfer -> Maybe FilePath -> RetryDecider -> (MeterUpdate -> Annex Bool) -> Annex Bool +alwaysRunTransfer = runTransfer' True + +runTransfer' :: Bool -> Transfer -> Maybe FilePath -> RetryDecider -> (MeterUpdate -> Annex Bool) -> Annex Bool +runTransfer' ignorelock t file shouldretry a = do info <- liftIO $ startTransferInfo file (meter, tfile, metervar) <- mkProgressUpdater t info mode <- annexFileMode (fd, inprogress) <- liftIO $ prep tfile mode info - if inprogress + if inprogress && not ignorelock then do showNote "transfer already in progress" return False |