addurl now accepts --prefix and --suffix options to adjust the filenames used
This commit is contained in:
		
					parent
					
						
							
								a3c6762636
							
						
					
				
			
			
				commit
				
					
						49d102f98b
					
				
			
		
					 4 changed files with 54 additions and 23 deletions
				
			
		| 
						 | 
					@ -46,6 +46,8 @@ data AddUrlOptions = AddUrlOptions
 | 
				
			||||||
	{ addUrls :: CmdParams
 | 
						{ addUrls :: CmdParams
 | 
				
			||||||
	, fileOption :: Maybe FilePath
 | 
						, fileOption :: Maybe FilePath
 | 
				
			||||||
	, pathdepthOption :: Maybe Int
 | 
						, pathdepthOption :: Maybe Int
 | 
				
			||||||
 | 
						, prefixOption :: Maybe String
 | 
				
			||||||
 | 
						, suffixOption :: Maybe String
 | 
				
			||||||
	, relaxedOption :: Bool
 | 
						, relaxedOption :: Bool
 | 
				
			||||||
	, rawOption :: Bool
 | 
						, rawOption :: Bool
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -59,7 +61,15 @@ optParser desc = AddUrlOptions
 | 
				
			||||||
		))
 | 
							))
 | 
				
			||||||
	<*> optional (option auto
 | 
						<*> optional (option auto
 | 
				
			||||||
		( long "pathdepth" <> metavar paramNumber
 | 
							( long "pathdepth" <> metavar paramNumber
 | 
				
			||||||
		<> help "path components to use in filename"
 | 
							<> help "number of url path components to use in filename"
 | 
				
			||||||
 | 
							))
 | 
				
			||||||
 | 
						<*> optional (strOption
 | 
				
			||||||
 | 
							( long "prefix" <> metavar paramValue
 | 
				
			||||||
 | 
							<> help "add a prefix to the filename"
 | 
				
			||||||
 | 
							))
 | 
				
			||||||
 | 
						<*> optional (strOption
 | 
				
			||||||
 | 
							( long "suffix" <> metavar paramValue
 | 
				
			||||||
 | 
							<> help "add a suffix to the filename"
 | 
				
			||||||
		))
 | 
							))
 | 
				
			||||||
	<*> parseRelaxedOption
 | 
						<*> parseRelaxedOption
 | 
				
			||||||
	<*> parseRawOption
 | 
						<*> parseRawOption
 | 
				
			||||||
| 
						 | 
					@ -80,13 +90,13 @@ seek :: AddUrlOptions -> CommandSeek
 | 
				
			||||||
seek o = forM_ (addUrls o) $ \u -> do
 | 
					seek o = forM_ (addUrls o) $ \u -> do
 | 
				
			||||||
	r <- Remote.claimingUrl u
 | 
						r <- Remote.claimingUrl u
 | 
				
			||||||
	if Remote.uuid r == webUUID || rawOption o
 | 
						if Remote.uuid r == webUUID || rawOption o
 | 
				
			||||||
		then void $ commandAction $ startWeb (relaxedOption o) (fileOption o) (pathdepthOption o) u
 | 
							then void $ commandAction $ startWeb o u
 | 
				
			||||||
		else checkUrl r u (fileOption o) (relaxedOption o) (pathdepthOption o)
 | 
							else checkUrl r o u
 | 
				
			||||||
 | 
					
 | 
				
			||||||
checkUrl :: Remote -> URLString -> Maybe FilePath -> Bool -> Maybe Int -> Annex ()
 | 
					checkUrl :: Remote -> AddUrlOptions -> URLString -> Annex ()
 | 
				
			||||||
checkUrl r u optfile relaxed pathdepth = do
 | 
					checkUrl r o u = do
 | 
				
			||||||
	pathmax <- liftIO $ fileNameLengthLimit "."
 | 
						pathmax <- liftIO $ fileNameLengthLimit "."
 | 
				
			||||||
	let deffile = fromMaybe (urlString2file u pathdepth pathmax) optfile
 | 
						let deffile = fromMaybe (urlString2file u (pathdepthOption o) pathmax) (fileOption o)
 | 
				
			||||||
	go deffile =<< maybe
 | 
						go deffile =<< maybe
 | 
				
			||||||
		(error $ "unable to checkUrl of " ++ Remote.name r)
 | 
							(error $ "unable to checkUrl of " ++ Remote.name r)
 | 
				
			||||||
		(tryNonAsync . flip id u)
 | 
							(tryNonAsync . flip id u)
 | 
				
			||||||
| 
						 | 
					@ -98,14 +108,15 @@ checkUrl r u optfile relaxed pathdepth = do
 | 
				
			||||||
		warning (show e)
 | 
							warning (show e)
 | 
				
			||||||
		next $ next $ return False
 | 
							next $ next $ return False
 | 
				
			||||||
	go deffile (Right (UrlContents sz mf)) = do
 | 
						go deffile (Right (UrlContents sz mf)) = do
 | 
				
			||||||
		let f = fromMaybe (maybe deffile fromSafeFilePath mf) optfile
 | 
							let f = adjustFile o (fromMaybe (maybe deffile fromSafeFilePath mf) (fileOption o))
 | 
				
			||||||
		void $ commandAction $
 | 
							void $ commandAction $
 | 
				
			||||||
			startRemote r relaxed f u sz
 | 
								startRemote r (relaxedOption o) f u sz
 | 
				
			||||||
	go deffile (Right (UrlMulti l))
 | 
						go deffile (Right (UrlMulti l))
 | 
				
			||||||
		| isNothing optfile =
 | 
							| isNothing (fileOption o) =
 | 
				
			||||||
			forM_ l $ \(u', sz, f) ->
 | 
								forM_ l $ \(u', sz, f) -> do
 | 
				
			||||||
 | 
									let f' = adjustFile o (deffile </> fromSafeFilePath f)
 | 
				
			||||||
				void $ commandAction $
 | 
									void $ commandAction $
 | 
				
			||||||
					startRemote r relaxed (deffile </> fromSafeFilePath f) u' sz
 | 
										startRemote r (relaxedOption o) f' u' sz
 | 
				
			||||||
		| otherwise = error $ unwords
 | 
							| otherwise = error $ unwords
 | 
				
			||||||
			[ "That url contains multiple files according to the"
 | 
								[ "That url contains multiple files according to the"
 | 
				
			||||||
			, Remote.name r
 | 
								, Remote.name r
 | 
				
			||||||
| 
						 | 
					@ -151,8 +162,8 @@ downloadRemoteFile r relaxed uri file sz = do
 | 
				
			||||||
  where
 | 
					  where
 | 
				
			||||||
	loguri = setDownloader uri OtherDownloader
 | 
						loguri = setDownloader uri OtherDownloader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
startWeb :: Bool -> Maybe FilePath -> Maybe Int -> String -> CommandStart
 | 
					startWeb :: AddUrlOptions -> String -> CommandStart
 | 
				
			||||||
startWeb relaxed optfile pathdepth s = go $ fromMaybe bad $ parseURI urlstring
 | 
					startWeb o s = go $ fromMaybe bad $ parseURI urlstring
 | 
				
			||||||
  where
 | 
					  where
 | 
				
			||||||
	(urlstring, downloader) = getDownloader s
 | 
						(urlstring, downloader) = getDownloader s
 | 
				
			||||||
	bad = fromMaybe (error $ "bad url " ++ urlstring) $
 | 
						bad = fromMaybe (error $ "bad url " ++ urlstring) $
 | 
				
			||||||
| 
						 | 
					@ -170,22 +181,22 @@ startWeb relaxed optfile pathdepth s = go $ fromMaybe bad $ parseURI urlstring
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	regulardownload url = do
 | 
						regulardownload url = do
 | 
				
			||||||
		pathmax <- liftIO $ fileNameLengthLimit "."
 | 
							pathmax <- liftIO $ fileNameLengthLimit "."
 | 
				
			||||||
		urlinfo <- if relaxed
 | 
							urlinfo <- if relaxedOption o
 | 
				
			||||||
			then pure $ Url.UrlInfo True Nothing Nothing
 | 
								then pure $ Url.UrlInfo True Nothing Nothing
 | 
				
			||||||
			else Url.withUrlOptions (Url.getUrlInfo urlstring)
 | 
								else Url.withUrlOptions (Url.getUrlInfo urlstring)
 | 
				
			||||||
		file <- case optfile of
 | 
							file <- adjustFile o <$> case fileOption o of
 | 
				
			||||||
			Just f -> pure f
 | 
								Just f -> pure f
 | 
				
			||||||
			Nothing -> case Url.urlSuggestedFile urlinfo of
 | 
								Nothing -> case Url.urlSuggestedFile urlinfo of
 | 
				
			||||||
				Nothing -> pure $ url2file url pathdepth pathmax
 | 
									Nothing -> pure $ url2file url (pathdepthOption o) pathmax
 | 
				
			||||||
				Just sf -> do
 | 
									Just sf -> do
 | 
				
			||||||
					let f = truncateFilePath pathmax $
 | 
										let f = truncateFilePath pathmax $
 | 
				
			||||||
						sanitizeFilePath sf
 | 
											sanitizeFilePath sf
 | 
				
			||||||
					ifM (liftIO $ doesFileExist f <||> doesDirectoryExist f)
 | 
										ifM (liftIO $ doesFileExist f <||> doesDirectoryExist f)
 | 
				
			||||||
						( pure $ url2file url pathdepth pathmax
 | 
											( pure $ url2file url (pathdepthOption o) pathmax
 | 
				
			||||||
						, pure f
 | 
											, pure f
 | 
				
			||||||
						)
 | 
											)
 | 
				
			||||||
		showStart "addurl" file
 | 
							showStart "addurl" file
 | 
				
			||||||
		next $ performWeb relaxed urlstring file urlinfo
 | 
							next $ performWeb (relaxedOption o) urlstring file urlinfo
 | 
				
			||||||
#ifdef WITH_QUVI
 | 
					#ifdef WITH_QUVI
 | 
				
			||||||
	badquvi = error $ "quvi does not know how to download url " ++ urlstring
 | 
						badquvi = error $ "quvi does not know how to download url " ++ urlstring
 | 
				
			||||||
	usequvi = do
 | 
						usequvi = do
 | 
				
			||||||
| 
						 | 
					@ -193,11 +204,11 @@ startWeb relaxed optfile pathdepth s = go $ fromMaybe bad $ parseURI urlstring
 | 
				
			||||||
			<$> withQuviOptions Quvi.forceQuery [Quvi.quiet, Quvi.httponly] urlstring
 | 
								<$> withQuviOptions Quvi.forceQuery [Quvi.quiet, Quvi.httponly] urlstring
 | 
				
			||||||
		let link = fromMaybe badquvi $ headMaybe $ Quvi.pageLinks page
 | 
							let link = fromMaybe badquvi $ headMaybe $ Quvi.pageLinks page
 | 
				
			||||||
		pathmax <- liftIO $ fileNameLengthLimit "."
 | 
							pathmax <- liftIO $ fileNameLengthLimit "."
 | 
				
			||||||
		let file = flip fromMaybe optfile $
 | 
							let file = adjustFile o $ flip fromMaybe (fileOption o) $
 | 
				
			||||||
			truncateFilePath pathmax $ sanitizeFilePath $
 | 
								truncateFilePath pathmax $ sanitizeFilePath $
 | 
				
			||||||
				Quvi.pageTitle page ++ "." ++ fromMaybe "m" (Quvi.linkSuffix link)
 | 
									Quvi.pageTitle page ++ "." ++ fromMaybe "m" (Quvi.linkSuffix link)
 | 
				
			||||||
		showStart "addurl" file
 | 
							showStart "addurl" file
 | 
				
			||||||
		next $ performQuvi relaxed urlstring (Quvi.linkUrl link) file
 | 
							next $ performQuvi (relaxedOption o) urlstring (Quvi.linkUrl link) file
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	usequvi = error "not built with quvi support"
 | 
						usequvi = error "not built with quvi support"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -367,3 +378,9 @@ urlString2file :: URLString -> Maybe Int -> Int -> FilePath
 | 
				
			||||||
urlString2file s pathdepth pathmax = case Url.parseURIRelaxed s of
 | 
					urlString2file s pathdepth pathmax = case Url.parseURIRelaxed s of
 | 
				
			||||||
	Nothing -> error $ "bad uri " ++ s
 | 
						Nothing -> error $ "bad uri " ++ s
 | 
				
			||||||
	Just u -> url2file u pathdepth pathmax
 | 
						Just u -> url2file u pathdepth pathmax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					adjustFile :: AddUrlOptions -> FilePath -> FilePath
 | 
				
			||||||
 | 
					adjustFile o = addprefix . addsuffix
 | 
				
			||||||
 | 
					  where
 | 
				
			||||||
 | 
						addprefix f = maybe f (++ f) (prefixOption o)
 | 
				
			||||||
 | 
						addsuffix f = maybe f (f ++) (suffixOption o)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								debian/changelog
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								debian/changelog
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -17,6 +17,8 @@ git-annex (5.20150714) UNRELEASED; urgency=medium
 | 
				
			||||||
  * version --raw now works when run outside a git repository.
 | 
					  * version --raw now works when run outside a git repository.
 | 
				
			||||||
  * assistant --startdelay now works when run outside a git repository.
 | 
					  * assistant --startdelay now works when run outside a git repository.
 | 
				
			||||||
  * dead now accepts multiple --key options.
 | 
					  * dead now accepts multiple --key options.
 | 
				
			||||||
 | 
					  * addurl now accepts --prefix and --suffix options to adjust the
 | 
				
			||||||
 | 
					    filenames used.
 | 
				
			||||||
  * sync --content: Fix bug that caused files to be uploaded to eg,
 | 
					  * sync --content: Fix bug that caused files to be uploaded to eg,
 | 
				
			||||||
    more archive remotes than wanted copies, only to later be dropped
 | 
					    more archive remotes than wanted copies, only to later be dropped
 | 
				
			||||||
    to satisfy the preferred content settings.
 | 
					    to satisfy the preferred content settings.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,13 +48,22 @@ be used to get better filenames.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* `--pathdepth=N`
 | 
					* `--pathdepth=N`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  This causes a shorter filename to be used. For example,
 | 
					  Rather than basing the filename on the whole url, this causes a path to
 | 
				
			||||||
   `--pathdepth=1` will use "dir/subdir/bigfile",
 | 
					  be constructed, starting at the specified depth within the path of the
 | 
				
			||||||
 | 
					  url.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  For example, adding the url http://www.example.com/dir/subdir/bigfile
 | 
				
			||||||
 | 
					  with `--pathdepth=1` will use "dir/subdir/bigfile",
 | 
				
			||||||
  while `--pathdepth=3` will use "bigfile". 
 | 
					  while `--pathdepth=3` will use "bigfile". 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  It can also be negative; `--pathdepth=-2` will use the last
 | 
					  It can also be negative; `--pathdepth=-2` will use the last
 | 
				
			||||||
  two parts of the url.
 | 
					  two parts of the url.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* `--prefix=foo` `--suffix=bar`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Use to adjust the filenames that are created by addurl. For example,
 | 
				
			||||||
 | 
					  `--suffix=.mp3` can be used to add an extension to the file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# SEE ALSO
 | 
					# SEE ALSO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[git-annex]](1)
 | 
					[[git-annex]](1)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1 +1,4 @@
 | 
				
			||||||
Is it possible to add a '--dir' option to addurl (or some other mechanic) to make git annex create the symlinks in the specified directory?
 | 
					Is it possible to add a '--dir' option to addurl (or some other mechanic) to make git annex create the symlinks in the specified directory?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> --prefix makes sense, and might as well also add --suffix. [[done]]
 | 
				
			||||||
 | 
					> --[[Joey]]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue