summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Assistant/Threads/TransferPoller.hs3
-rw-r--r--Command/AddUrl.hs29
-rw-r--r--debian/changelog3
3 files changed, 31 insertions, 4 deletions
diff --git a/Assistant/Threads/TransferPoller.hs b/Assistant/Threads/TransferPoller.hs
index 68075cac8..eff647447 100644
--- a/Assistant/Threads/TransferPoller.hs
+++ b/Assistant/Threads/TransferPoller.hs
@@ -51,6 +51,7 @@ transferPollerThread = namedThread "TransferPoller" $ do
maybe noop (newsize t info . bytesComplete) mi
newsize t info sz
- | bytesComplete info /= sz && isJust sz =
+ | bytesComplete info /= sz && isJust sz = do
+ liftIO $ print ("alterTransferInfo called", sz)
alterTransferInfo t $ \i -> i { bytesComplete = sz }
| otherwise = noop
diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs
index a8e3588d8..12142fb93 100644
--- a/Command/AddUrl.hs
+++ b/Command/AddUrl.hs
@@ -25,6 +25,8 @@ import Types.KeySource
import Config
import Annex.Content.Direct
import Logs.Location
+import qualified Logs.Transfer as Transfer
+import Utility.Daemon (checkDaemon)
def :: [Command]
def = [notBareRepo $ withOptions [fileOption, pathdepthOption, relaxedOption] $
@@ -81,10 +83,9 @@ perform relaxed url file = ifAnnexed file addurl geturl
download :: String -> FilePath -> CommandPerform
download url file = do
showAction $ "downloading " ++ url ++ " "
- let dummykey = Backend.URL.fromUrl url Nothing
+ dummykey <- genkey
tmp <- fromRepo $ gitAnnexTmpLocation dummykey
- liftIO $ createDirectoryIfMissing True (parentDir tmp)
- stopUnless (downloadUrl [url] tmp) $ do
+ stopUnless (runtransfer dummykey tmp) $ do
backend <- chooseBackend file
let source = KeySource
{ keyFilename = file
@@ -95,6 +96,28 @@ download url file = do
case k of
Nothing -> stop
Just (key, _) -> next $ cleanup url file key (Just tmp)
+ where
+ {- Generate a dummy key to use for this download, before we can
+ - examine the file and find its real key. This allows resuming
+ - downloads, as the dummy key for a given url is stable.
+ -
+ - If the assistant is running, actually hits the url here,
+ - to get the size, so it can display a pretty progress bar.
+ -}
+ genkey = do
+ pidfile <- fromRepo gitAnnexPidFile
+ size <- ifM (liftIO $ isJust <$> checkDaemon pidfile)
+ ( do
+ headers <- getHttpHeaders
+ liftIO $ snd <$> Url.exists url headers
+ , return Nothing
+ )
+ return $ Backend.URL.fromUrl url size
+ runtransfer dummykey tmp =
+ Transfer.download webUUID dummykey (Just file) Transfer.forwardRetry $ do
+ liftIO $ createDirectoryIfMissing True (parentDir tmp)
+ downloadUrl [url] tmp
+
cleanup :: String -> FilePath -> Key -> Maybe FilePath -> CommandCleanup
cleanup url file key mtmp = do
diff --git a/debian/changelog b/debian/changelog
index 4eba8011d..97ac7b295 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -23,6 +23,9 @@ git-annex (4.20130406) UNRELEASED; urgency=low
* assistant: Bug fix to avoid annexing the files that git uses
to stand in for symlinks on FAT and other filesystem not supporting
symlinks.
+ * addurl: Register transfer so the webapp can see it.
+ * addurl: Automatically retry downloads that fail, as long as some
+ additional content was downloaded.
-- Joey Hess <joeyh@debian.org> Sat, 06 Apr 2013 15:24:15 -0400