addurl: Added a --file option
Can be used to specify what file the url is added to. This can be used to override the default filename that is used when adding an url, which is based on the url. Or, when the file already exists, the url is recorded as another location of the file.
This commit is contained in:
parent
57a747d081
commit
ef013506cb
4 changed files with 37 additions and 16 deletions
|
@ -17,26 +17,39 @@ import qualified Annex
|
|||
import qualified Backend.URL
|
||||
import Annex.Content
|
||||
import Logs.Web
|
||||
import qualified Option
|
||||
|
||||
def :: [Command]
|
||||
def = [command "addurl" (paramRepeating paramUrl) seek "add urls to annex"]
|
||||
def = [withOptions [fileOption] $
|
||||
command "addurl" (paramRepeating paramUrl) seek "add urls to annex"]
|
||||
|
||||
fileOption :: Option
|
||||
fileOption = Option.field [] "file" paramFile "specify what file the url is added to"
|
||||
|
||||
seek :: [CommandSeek]
|
||||
seek = [withStrings start]
|
||||
seek = [withField fileOption return $ \f ->
|
||||
withStrings $ start f]
|
||||
|
||||
start :: String -> CommandStart
|
||||
start s = notBareRepo $ go $ parseURI s
|
||||
start :: Maybe FilePath -> String -> CommandStart
|
||||
start optfile s = notBareRepo $ go $ parseURI s
|
||||
where
|
||||
go Nothing = error $ "bad url " ++ s
|
||||
go (Just url) = do
|
||||
file <- liftIO $ url2file url
|
||||
let file = fromMaybe (url2file url) optfile
|
||||
showStart "addurl" file
|
||||
next $ perform s file
|
||||
|
||||
perform :: String -> FilePath -> CommandPerform
|
||||
perform url file = do
|
||||
fast <- Annex.getState Annex.fast
|
||||
if fast then nodownload url file else download url file
|
||||
perform url file = ifAnnexed file addurl geturl
|
||||
where
|
||||
geturl = do
|
||||
whenM (liftIO $ doesFileExist file) $
|
||||
error $ "already have this url in " ++ file
|
||||
fast <- Annex.getState Annex.fast
|
||||
if fast then nodownload url file else download url file
|
||||
addurl (key, _backend) = do
|
||||
setUrlPresent key url
|
||||
next $ return True
|
||||
|
||||
download :: String -> FilePath -> CommandPerform
|
||||
download url file = do
|
||||
|
@ -60,12 +73,8 @@ nodownload url file = do
|
|||
setUrlPresent key url
|
||||
next $ Command.Add.cleanup file key False
|
||||
|
||||
url2file :: URI -> IO FilePath
|
||||
url2file url = do
|
||||
whenM (doesFileExist file) $
|
||||
error $ "already have this url in " ++ file
|
||||
return file
|
||||
url2file :: URI -> FilePath
|
||||
url2file url = escape $ uriRegName auth ++ uriPath url ++ uriQuery url
|
||||
where
|
||||
file = escape $ uriRegName auth ++ uriPath url ++ uriQuery url
|
||||
escape = replace "/" "_" . replace "?" "_"
|
||||
auth = fromMaybe (error $ "bad url " ++ show url) $ uriAuthority url
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue