fsck: Work around bug in persistent that broke display of problematically encoded filenames on stderr when using --incremental.

This commit is contained in:
Joey Hess 2015-09-09 17:02:00 -04:00
parent 1fcca1b43b
commit 4ed82e5328
5 changed files with 36 additions and 3 deletions

View file

@ -31,6 +31,7 @@ import Types.Key
import Types.UUID
import Annex.Perms
import Annex.LockFile
import Messages
import Database.Persist.TH
import Database.Esqueleto hiding (Key)
@ -77,6 +78,10 @@ openDb u = do
rename tmpdbdir dbdir
lockFileCached =<< fromRepo (gitAnnexFsckDbLock u)
h <- liftIO $ H.openDb db "fscked"
-- work around https://github.com/yesodweb/persistent/issues/474
liftIO setConsoleEncoding
return $ FsckHandle h u
closeDb :: FsckHandle -> Annex ()

View file

@ -30,6 +30,7 @@ module Messages (
showHeader,
showRaw,
setupConsole,
setConsoleEncoding,
enableDebugOutput,
disableDebugOutput,
debugEnabled,
@ -176,9 +177,12 @@ setupConsole = do
<$> streamHandler stderr DEBUG
<*> pure preciseLogFormatter
updateGlobalLogger rootLoggerName (setLevel NOTICE . setHandlers [s])
{- This avoids ghc's output layer crashing on
- invalid encoded characters in
- filenames when printing them out. -}
setConsoleEncoding
{- This avoids ghc's output layer crashing on invalid encoded characters in
- filenames when printing them out. -}
setConsoleEncoding :: IO ()
setConsoleEncoding = do
fileEncoding stdout
fileEncoding stderr

2
debian/changelog vendored
View file

@ -7,6 +7,8 @@ git-annex (5.20150825) UNRELEASED; urgency=medium
--unused-refspec option. Thanks, Øyvind A. Holm.
* Make full option parsing be done when not in a git repo, so --help
can be displayed for commands that require a git repo, etc.
* fsck: Work around bug in persistent that broke display of
problematically encoded filenames on stderr when using --incremental.
-- Joey Hess <id@joeyh.name> Tue, 01 Sep 2015 14:46:18 -0700

View file

@ -76,3 +76,5 @@ git-annex: fsck: 2 failed
# End of transcript or log.
"""]]
> [[fixed|done]] --[[Joey]]

View file

@ -0,0 +1,20 @@
[[!comment format=mdwn
username="joey"
subject="""comment 1"""
date="2015-09-09T20:14:01Z"
content="""
It only fails with --incremental, and the only difference
is that the fsck database is opened and written that way.
Somehow, opening the database causes the encoding of the stderr handle to get
reset from the fileEncoding git-annex normally applies at startup to
the defaut, which crashes on filenames that don't use the locale's
encoding.
What a strange side effect especially to find in haskell code!
It's some kind of bug in persistent that this happens.
I've filed a bug: <https://github.com/yesodweb/persistent/issues/474>
I put in a workaround; I have it reset the encoding of the file handles
after opening the db.
"""]]