characters as-is in filenames.
* Control characters in non-filename data coming from the repository or
other possible untrusted sources are filtered out of the display of many
- commands.
+ commands. When the command output is intended for use in scripting,
+ control characters are only filtered out when displaying to the
+ terminal.
* find, findkeys, examinekey: When outputting to a terminal and --format
is not used, quote unusual characters.
(Similar to the behavior of GNU find.)
import Backend (genKey, defaultBackend)
import Types.KeySource
import Utility.Metered
+import Utility.Terminal
+import Utility.SafeOutput
cmd :: Command
cmd = noCommit $ noMessages $ dontCheck repoExists $
run :: () -> SeekInput -> String -> Annex Bool
run _ _ file = tryNonAsync (genKey ks nullMeterUpdate =<< defaultBackend) >>= \case
Right (k, _) -> do
- liftIO $ putStrLn $ serializeKey k
+ IsTerminal isterminal <- liftIO $ checkIsTerminal stdout
+ let sk = serializeKey k
+ liftIO $ putStrLn $ if isterminal then safeOutput sk else sk
return True
Left _err -> return False
where
import Command
import Annex.Transfer
+import Utility.Terminal
+import Utility.SafeOutput
import qualified Data.Set as S
ts <- map (transferKey . fst) <$> getTransfers
case keyOptions o of
Just WantAllKeys ->
- forM_ ts $ commandAction . start'
+ forM_ ts $ commandAction . (start' isterminal)
Just (WantSpecificKey k)
- | k `elem` ts -> commandAction (start' k)
+ | k `elem` ts -> commandAction (start' isterminal k)
| otherwise -> commandAction stop
_ -> do
let s = S.fromList ts
let seeker = AnnexedFileSeeker
- { startAction = start s
+ { startAction = start isterminal s
, checkContentPresent = Nothing
, usesLocationLog = False
}
where
ww = WarnUnmatchLsFiles
-start :: S.Set Key -> SeekInput -> RawFilePath -> Key -> CommandStart
-start s _si _file k
- | S.member k s = start' k
+start :: IsTerminal -> S.Set Key -> SeekInput -> RawFilePath -> Key -> CommandStart
+start isterminal s _si _file k
+ | S.member k s = start' isterminal k
| otherwise = stop
-start' :: Key -> CommandStart
-start' k = startingCustomOutput k $ do
+start' :: IsTerminal -> Key -> CommandStart
+start' (IsTerminal isterminal) k = startingCustomOutput k $ do
tmpf <- fromRawFilePath <$> fromRepo (gitAnnexTmpObjectLocation k)
whenM (liftIO $ doesFileExist tmpf) $
- liftIO $ putStrLn tmpf
+ liftIO $ putStrLn (if isterminal then safeOutput tmpf else tmpf)
next $ return True
import Command
import Annex.CatFile
import qualified Git.LsFiles
+import Utility.Terminal
+import Utility.SafeOutput
cmd :: Command
cmd = notBareRepo $ noCommit $ noMessages $
Nothing -> return False
Just file' -> catKeyFile file' >>= \case
Just k -> do
- liftIO $ putStrLn $ serializeKey k
+ IsTerminal isterminal <- liftIO $ checkIsTerminal stdout
+ let sk = serializeKey k
+ liftIO $ putStrLn $ if isterminal then safeOutput sk else sk
return True
Nothing -> return False