summaryrefslogtreecommitdiff
path: root/Command/AddUrl.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Command/AddUrl.hs')
-rw-r--r--Command/AddUrl.hs49
1 files changed, 30 insertions, 19 deletions
diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs
index f8a4ca59b..ab6b9b8df 100644
--- a/Command/AddUrl.hs
+++ b/Command/AddUrl.hs
@@ -64,25 +64,36 @@ seek us = do
r <- Remote.claimingUrl u
if Remote.uuid r == webUUID || raw
then void $ commandAction $ startWeb relaxed optfile pathdepth u
- else do
- pathmax <- liftIO $ fileNameLengthLimit "."
- let deffile = fromMaybe (urlString2file u pathdepth pathmax) optfile
- res <- tryNonAsync $ maybe
- (error $ "unable to checkUrl of " ++ Remote.name r)
- (flip id u)
- (Remote.checkUrl r)
- case res of
- Left e -> void $ commandAction $ do
- showStart "addurl" u
- warning (show e)
- next $ next $ return False
- Right (UrlContents sz mf) -> do
- void $ commandAction $
- startRemote r relaxed (maybe deffile fromSafeFilePath mf) u sz
- Right (UrlMulti l) ->
- forM_ l $ \(u', sz, f) ->
- void $ commandAction $
- startRemote r relaxed (deffile </> fromSafeFilePath f) u' sz
+ else checkUrl r u optfile relaxed raw pathdepth
+
+checkUrl :: Remote -> URLString -> Maybe FilePath -> Bool -> Bool -> Maybe Int -> Annex ()
+checkUrl r u optfile relaxed raw pathdepth = do
+ pathmax <- liftIO $ fileNameLengthLimit "."
+ let deffile = fromMaybe (urlString2file u pathdepth pathmax) optfile
+ go deffile =<< maybe
+ (error $ "unable to checkUrl of " ++ Remote.name r)
+ (tryNonAsync . flip id u)
+ (Remote.checkUrl r)
+ where
+
+ go _ (Left e) = void $ commandAction $ do
+ showStart "addurl" u
+ warning (show e)
+ next $ next $ return False
+ go deffile (Right (UrlContents sz mf)) = do
+ let f = fromMaybe (maybe deffile fromSafeFilePath mf) optfile
+ void $ commandAction $
+ startRemote r relaxed f u sz
+ go deffile (Right (UrlMulti l))
+ | isNothing optfile =
+ forM_ l $ \(u', sz, f) ->
+ void $ commandAction $
+ startRemote r relaxed (deffile </> fromSafeFilePath f) u' sz
+ | otherwise = error $ unwords
+ [ "That url contains multiple files according to the"
+ , Remote.name r
+ , " remote; cannot add it to a single file."
+ ]
startRemote :: Remote -> Bool -> FilePath -> URLString -> Maybe Integer -> CommandStart
startRemote r relaxed file uri sz = do