[[!comment format=mdwn username="joey" subject="""comment 1""" date="2018-10-29T17:51:27Z" content=""" Looking at the code, it addurl clearly *does* use the urls returned by CHECKURL. In Command/AddUrl.hs: go deffile (Right (UrlMulti l)) | isNothing (fileOption (downloadOptions o)) = forM_ l $ \(u', sz, f) -> do let f' = adjustFile o (deffile fromSafeFilePath f) void $ commandAction $ startRemote r o f' u' sz `l` is the list of values it returns, and `u'` is individual urls from that list, as opposed to `u` which is the url the user provided. `u'` is passed to `startRemote`, and `u` is not. Hmm, but in Remote/External.hs there is a special case: -- Treat a single item multi response specially to -- simplify the external remote implementation. CHECKURL_MULTI ((_, sz, f):[]) -> result $ UrlContents sz $ Just $ mkSafeFilePath f CHECKURL_MULTI l -> result $ UrlMulti $ map mkmulti l That does not have any kind of rationalle in [[!commit 8a17bcb0be91c345a52d78c08009285b0fcd6e3a]], but the next commit added `doc/special_remotes/external/git-annex-remote-torrent` and I think I can see why I felt it simplified things. That script always replies with CHECKURL-MULTI, but a torrent often contains a single file, and it would be perhaps bettter to use the original url provided to the user for such a file from a torrent, rather than an url that asks for file "#1" from the torrent. Although AFAICS either would work, and Remote/BitTorrent.hs contains just the kind of special case for a single item torrent that I was wanting to avoid external special remotes needing to worry about. The other benefit to special casing UrlContents is that lets addurl --file specify where to put the file, which the fileOption check in the first code block above prevents for UrlMulti. But, that could just as well be handled by adding a single file special case to the code in AddUrl. I suppose changing this won't break anything, or if it does it was relying on this undocumented behavior. """]]