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:
Joey Hess 2012-02-08 15:35:18 -04:00
parent 57a747d081
commit ef013506cb
4 changed files with 37 additions and 16 deletions

View file

@ -17,26 +17,39 @@ import qualified Annex
import qualified Backend.URL import qualified Backend.URL
import Annex.Content import Annex.Content
import Logs.Web import Logs.Web
import qualified Option
def :: [Command] 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 :: [CommandSeek]
seek = [withStrings start] seek = [withField fileOption return $ \f ->
withStrings $ start f]
start :: String -> CommandStart start :: Maybe FilePath -> String -> CommandStart
start s = notBareRepo $ go $ parseURI s start optfile s = notBareRepo $ go $ parseURI s
where where
go Nothing = error $ "bad url " ++ s go Nothing = error $ "bad url " ++ s
go (Just url) = do go (Just url) = do
file <- liftIO $ url2file url let file = fromMaybe (url2file url) optfile
showStart "addurl" file showStart "addurl" file
next $ perform s file next $ perform s file
perform :: String -> FilePath -> CommandPerform perform :: String -> FilePath -> CommandPerform
perform url file = do perform url file = ifAnnexed file addurl geturl
fast <- Annex.getState Annex.fast where
if fast then nodownload url file else download url file 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 :: String -> FilePath -> CommandPerform
download url file = do download url file = do
@ -60,12 +73,8 @@ nodownload url file = do
setUrlPresent key url setUrlPresent key url
next $ Command.Add.cleanup file key False next $ Command.Add.cleanup file key False
url2file :: URI -> IO FilePath url2file :: URI -> FilePath
url2file url = do url2file url = escape $ uriRegName auth ++ uriPath url ++ uriQuery url
whenM (doesFileExist file) $
error $ "already have this url in " ++ file
return file
where where
file = escape $ uriRegName auth ++ uriPath url ++ uriQuery url
escape = replace "/" "_" . replace "?" "_" escape = replace "/" "_" . replace "?" "_"
auth = fromMaybe (error $ "bad url " ++ show url) $ uriAuthority url auth = fromMaybe (error $ "bad url " ++ show url) $ uriAuthority url

View file

@ -76,6 +76,8 @@ paramDate :: String
paramDate = "DATE" paramDate = "DATE"
paramFormat :: String paramFormat :: String
paramFormat = "FORMAT" paramFormat = "FORMAT"
paramFile :: String
paramFile = "FILE"
paramKeyValue :: String paramKeyValue :: String
paramKeyValue = "K=V" paramKeyValue = "K=V"
paramNothing :: String paramNothing :: String

5
debian/changelog vendored
View file

@ -11,6 +11,11 @@ git-annex (3.20120124) UNRELEASED; urgency=low
This version can only be built with ghc 7.4 or newer. This version can only be built with ghc 7.4 or newer.
* S3: Fix irrefutable pattern failure when accessing encrypted S3 * S3: Fix irrefutable pattern failure when accessing encrypted S3
credentials. credentials.
* addurl: Added a --file option, which 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.
-- Joey Hess <joeyh@debian.org> Tue, 24 Jan 2012 16:21:55 -0400 -- Joey Hess <joeyh@debian.org> Tue, 24 Jan 2012 16:21:55 -0400

View file

@ -145,9 +145,14 @@ subdirectories).
* addurl [url ...] * addurl [url ...]
Downloads each url to a file, which is added to the annex. Downloads each url to its own file, which is added to the annex.
To avoid immediately downloading the url, specify --fast To avoid immediately downloading the url, specify --fast.
To specify what file the url is added to, specify --file. This changes
the behavior; now all the specified urls are recorded as alternate
locations from which the file can be downloaded. In this mode, addurl
can be used both to add new files, or to add urls to existing files.
# REPOSITORY SETUP COMMANDS # REPOSITORY SETUP COMMANDS