addurl: Add --pathdepth option.
This commit is contained in:
parent
a86d937b5b
commit
39c3f56b33
3 changed files with 36 additions and 15 deletions
|
@ -22,34 +22,40 @@ import qualified Option
|
|||
import Types.Key
|
||||
|
||||
def :: [Command]
|
||||
def = [withOptions [fileOption] $
|
||||
def = [withOptions [fileOption, pathdepthOption] $
|
||||
command "addurl" (paramRepeating paramUrl) seek "add urls to annex"]
|
||||
|
||||
fileOption :: Option
|
||||
fileOption = Option.field [] "file" paramFile "specify what file the url is added to"
|
||||
|
||||
pathdepthOption :: Option
|
||||
pathdepthOption = Option.field [] "pathdepth" paramFile "number of path components to use in filename"
|
||||
|
||||
seek :: [CommandSeek]
|
||||
seek = [withField fileOption return $ \f ->
|
||||
withStrings $ start f]
|
||||
withField pathdepthOption (return . maybe Nothing readish) $ \d ->
|
||||
withStrings $ start f d]
|
||||
|
||||
start :: Maybe FilePath -> String -> CommandStart
|
||||
start optfile s = notBareRepo $ go $ fromMaybe bad $ parseURI s
|
||||
start :: Maybe FilePath -> Maybe Int -> String -> CommandStart
|
||||
start optfile pathdepth s = notBareRepo $ go $ fromMaybe bad $ parseURI s
|
||||
where
|
||||
bad = fromMaybe (error $ "bad url " ++ s) $
|
||||
parseURI $ escapeURIString isUnescapedInURI s
|
||||
go url = do
|
||||
let file = fromMaybe (url2file url) optfile
|
||||
let file = fromMaybe (url2file url pathdepth) optfile
|
||||
showStart "addurl" file
|
||||
next $ perform s file
|
||||
next $ perform s file pathdepth
|
||||
|
||||
perform :: String -> FilePath -> CommandPerform
|
||||
perform url file = ifAnnexed file addurl geturl
|
||||
perform :: String -> FilePath -> Maybe Int -> CommandPerform
|
||||
perform url file pathdepth = ifAnnexed file addurl geturl
|
||||
where
|
||||
geturl = do
|
||||
liftIO $ createDirectoryIfMissing True (parentDir file)
|
||||
fast <- Annex.getState Annex.fast
|
||||
if fast then nodownload url file else download url file
|
||||
addurl (key, _backend) = do
|
||||
when (pathdepth /= Nothing) $
|
||||
error $ file ++ " already exists"
|
||||
unlessM (liftIO $ Url.check url (keySize key)) $
|
||||
error $ "failed to verify url: " ++ url
|
||||
setUrlPresent key url
|
||||
|
@ -80,8 +86,17 @@ nodownload url file = do
|
|||
setUrlPresent key url
|
||||
next $ Command.Add.cleanup file key False
|
||||
|
||||
url2file :: URI -> FilePath
|
||||
url2file url = take 255 $ escape $ uriRegName auth ++ uriPath url ++ uriQuery url
|
||||
url2file :: URI -> Maybe Int -> FilePath
|
||||
url2file url pathdepth = case pathdepth of
|
||||
Nothing -> filesize $ escape fullurl
|
||||
Just depth
|
||||
| depth > 0 -> filesize $ join "/" $
|
||||
fromend depth $ map escape $
|
||||
filter (not . null) $ split "/" fullurl
|
||||
| otherwise -> error "bad --pathdepth value"
|
||||
where
|
||||
escape = replace "/" "_" . replace "?" "_"
|
||||
fullurl = uriRegName auth ++ uriPath url ++ uriQuery url
|
||||
auth = fromMaybe (error $ "bad url " ++ show url) $ uriAuthority url
|
||||
filesize = take 255
|
||||
escape = replace "/" "_" . replace "?" "_"
|
||||
fromend n = reverse . take n . reverse
|
||||
|
|
1
debian/changelog
vendored
1
debian/changelog
vendored
|
@ -29,6 +29,7 @@ git-annex (3.20120124) UNRELEASED; urgency=low
|
|||
* whereis: Prints the urls of files that the web special remote knows about.
|
||||
* Added a annex.queuesize setting, useful when adding hundreds of thousands
|
||||
of files on a system with plenty of memory.
|
||||
* addurl: Add --pathdepth option.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Tue, 24 Jan 2012 16:21:55 -0400
|
||||
|
||||
|
|
|
@ -149,10 +149,15 @@ subdirectories).
|
|||
|
||||
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.
|
||||
Normally the filename is based on the full url, so will look like
|
||||
"www.example.com_subdir_bigfile". For a shorter filename, specify
|
||||
--pathdepth=N. For example, --pathdepth=2 will use "subdir/bigfile",
|
||||
while --parhdepth=1 will use "bigfile".
|
||||
|
||||
Or, to directly 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
|
||||
|
||||
|
|
Loading…
Reference in a new issue