summaryrefslogtreecommitdiff
path: root/Remote/Git.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-03-28 17:03:04 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-03-28 17:04:37 -0400
commit23bfeef5d168666d17343d5484974b7b65db5441 (patch)
tree38c936657bb183e162ed7b7ce02419eff3baaedb /Remote/Git.hs
parent45503f3ce47c95e5c9a3f15621df02b108d1a1c9 (diff)
webapp: Progess bar fixes for many types of special remotes.
There was confusion in different parts of the progress bar code about whether an update contained the total number of bytes transferred, or the number of bytes transferred since the last update. One way this bug showed up was progress bars that seemed to stick at zero for a long time. In order to fix it comprehensively, I add a new BytesProcessed data type, that is explicitly a total quantity of bytes, not a delta. Note that this doesn't necessarily fix every problem with progress bars. Particularly, buffering can now cause progress bars to seem to run ahead of transfers, reaching 100% when data is still being uploaded.
Diffstat (limited to 'Remote/Git.hs')
-rw-r--r--Remote/Git.hs9
1 files changed, 5 insertions, 4 deletions
diff --git a/Remote/Git.hs b/Remote/Git.hs
index 207655b4e..31396003b 100644
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -40,6 +40,7 @@ import Init
import Types.Key
import qualified Fields
import Logs.Location
+import Utility.Metered
import Control.Concurrent
import Control.Concurrent.MSampleVar
@@ -309,7 +310,7 @@ copyFromRemote r key file dest
: maybe [] (\f -> [(Fields.associatedFile, f)]) file
Just (cmd, params) <- git_annex_shell (repo r) "transferinfo"
[Param $ key2file key] fields
- v <- liftIO $ newEmptySV
+ v <- liftIO $ (newEmptySV :: IO (MSampleVar Integer))
tid <- liftIO $ forkIO $ void $ tryIO $ do
bytes <- readSV v
p <- createProcess $
@@ -325,7 +326,7 @@ copyFromRemote r key file dest
send bytes
forever $
send =<< readSV v
- let feeder = writeSV v
+ let feeder = writeSV v . fromBytesProcessed
bracketIO noop (const $ tryIO $ killThread tid) (a feeder)
copyFromRemoteCheap :: Remote -> Key -> FilePath -> Annex Bool
@@ -391,13 +392,13 @@ rsyncOrCopyFile rsyncparams src dest p =
dorsync = rsyncHelper (Just p) $
rsyncparams ++ [Param src, Param dest]
docopy = liftIO $ bracket
- (forkIO $ watchfilesize 0)
+ (forkIO $ watchfilesize zeroBytesProcessed)
(void . tryIO . killThread)
(const $ copyFileExternal src dest)
watchfilesize oldsz = do
threadDelay 500000 -- 0.5 seconds
v <- catchMaybeIO $
- fromIntegral . fileSize
+ toBytesProcessed . fileSize
<$> getFileStatus dest
case v of
Just sz