summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-09-09 17:02:00 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-09-09 17:02:00 -0400
commit09b050b24597a21343f712e4bc7b6f8660113d63 (patch)
tree508942f546882679c2f34648350f3579303eb856
parenteee2566fce1e3cf8337ced753a8dcfc2923b28b2 (diff)
fsck: Work around bug in persistent that broke display of problematically encoded filenames on stderr when using --incremental.
-rw-r--r--Database/Fsck.hs5
-rw-r--r--Messages.hs10
-rw-r--r--debian/changelog2
-rw-r--r--doc/bugs/hPutChar_error_message_with_UTF-8_chars_above_7F_in_filenames.mdwn2
-rw-r--r--doc/bugs/hPutChar_error_message_with_UTF-8_chars_above_7F_in_filenames/comment_1_bb9cd3e753431b1f5dd8b94a1be4e4a3._comment20
5 files changed, 36 insertions, 3 deletions
diff --git a/Database/Fsck.hs b/Database/Fsck.hs
index 20b4878e3..ed00e62d8 100644
--- a/Database/Fsck.hs
+++ b/Database/Fsck.hs
@@ -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 ()
diff --git a/Messages.hs b/Messages.hs
index 026fca51e..fce5c179a 100644
--- a/Messages.hs
+++ b/Messages.hs
@@ -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
diff --git a/debian/changelog b/debian/changelog
index d0f16cf05..7a0314cc8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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
diff --git a/doc/bugs/hPutChar_error_message_with_UTF-8_chars_above_7F_in_filenames.mdwn b/doc/bugs/hPutChar_error_message_with_UTF-8_chars_above_7F_in_filenames.mdwn
index f4beac9fb..16acb005e 100644
--- a/doc/bugs/hPutChar_error_message_with_UTF-8_chars_above_7F_in_filenames.mdwn
+++ b/doc/bugs/hPutChar_error_message_with_UTF-8_chars_above_7F_in_filenames.mdwn
@@ -76,3 +76,5 @@ git-annex: fsck: 2 failed
# End of transcript or log.
"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/hPutChar_error_message_with_UTF-8_chars_above_7F_in_filenames/comment_1_bb9cd3e753431b1f5dd8b94a1be4e4a3._comment b/doc/bugs/hPutChar_error_message_with_UTF-8_chars_above_7F_in_filenames/comment_1_bb9cd3e753431b1f5dd8b94a1be4e4a3._comment
new file mode 100644
index 000000000..373c1e4e7
--- /dev/null
+++ b/doc/bugs/hPutChar_error_message_with_UTF-8_chars_above_7F_in_filenames/comment_1_bb9cd3e753431b1f5dd8b94a1be4e4a3._comment
@@ -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.
+"""]]