addurl: Always use whole url as destination filename, rather than only its file component.
First, this ensures that git annex addurl, when run repeatedly with the same url, doesn't create duplicate files, which it did before when it fell back to the longer filename. Secondly, the file part of an url is frequently not very descriptive on its own. The uri scheme, auth, and port is intentionally left out, as clutter.
This commit is contained in:
parent
7c768c0984
commit
03d6209e1c
3 changed files with 17 additions and 23 deletions
|
@ -7,9 +7,10 @@
|
|||
|
||||
module Command.AddUrl where
|
||||
|
||||
import Control.Monad.State (liftIO, when)
|
||||
import Control.Monad.State
|
||||
import Network.URI
|
||||
import Data.String.Utils
|
||||
import Data.Maybe
|
||||
import System.Directory
|
||||
|
||||
import Command
|
||||
|
@ -24,6 +25,7 @@ import Content
|
|||
import PresenceLog
|
||||
import Locations
|
||||
import Utility.Path
|
||||
import Utility.Conditional
|
||||
|
||||
command :: [Command]
|
||||
command = [repoCommand "addurl" paramPath seek "add urls to annex"]
|
||||
|
@ -75,20 +77,10 @@ nodownload url file = do
|
|||
|
||||
url2file :: URI -> IO FilePath
|
||||
url2file url = do
|
||||
let parts = filter safe $ split "/" $ uriPath url
|
||||
if null parts
|
||||
then fallback
|
||||
else do
|
||||
let file = last parts
|
||||
e <- doesFileExist file
|
||||
if e then fallback else return file
|
||||
whenM (doesFileExist file) $
|
||||
error $ "already have this url in " ++ file
|
||||
return file
|
||||
where
|
||||
fallback = do
|
||||
let file = replace "/" "_" $ show url
|
||||
e <- doesFileExist file
|
||||
when e $ error "already have this url"
|
||||
return file
|
||||
safe "" = False
|
||||
safe "." = False
|
||||
safe ".." = False
|
||||
safe _ = True
|
||||
file = escape $ uriRegName auth ++ uriPath url ++ uriQuery url
|
||||
escape = replace "/?" $ repeat '_'
|
||||
auth = fromMaybe (error $ "bad url " ++ show url) $ uriAuthority url
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue