bittorrent: Fix mojibake introduced in parsing arai2c progress output.
hGetSomeString reads one byte at a time, so unicode bytes are not composed. The problem comes when outputting that to the console with hPut; that tried to apply the handle's encoding, and so we get mojibake. Instead, use ByteStrings, and only convert it to a string for parsing, not for display. Note that there are a couple of other things that use hGetSomeString, which I've left as-is for now.
This commit is contained in:
parent
b80a434685
commit
a787cead35
4 changed files with 23 additions and 4 deletions
|
@ -1,6 +1,6 @@
|
||||||
{- Metered IO
|
{- Metered IO
|
||||||
-
|
-
|
||||||
- Copyright 2012, 2013 Joey Hess <id@joeyh.name>
|
- Copyright 2012-2105 Joey Hess <id@joeyh.name>
|
||||||
-
|
-
|
||||||
- License: BSD-2-clause
|
- License: BSD-2-clause
|
||||||
-}
|
-}
|
||||||
|
@ -17,6 +17,7 @@ import System.IO.Unsafe
|
||||||
import Foreign.Storable (Storable(sizeOf))
|
import Foreign.Storable (Storable(sizeOf))
|
||||||
import System.Posix.Types
|
import System.Posix.Types
|
||||||
import Data.Int
|
import Data.Int
|
||||||
|
import Data.Bits.Utils
|
||||||
|
|
||||||
{- An action that can be run repeatedly, updating it on the bytes processed.
|
{- An action that can be run repeatedly, updating it on the bytes processed.
|
||||||
-
|
-
|
||||||
|
@ -163,12 +164,13 @@ commandMeter progressparser meterupdate cmd params = liftIO $ catchBoolIO $
|
||||||
p = proc cmd (toCommand params)
|
p = proc cmd (toCommand params)
|
||||||
|
|
||||||
feedprogress prev buf h = do
|
feedprogress prev buf h = do
|
||||||
s <- hGetSomeString h 80
|
b <- S.hGetSome h 80
|
||||||
if null s
|
if S.null b
|
||||||
then return True
|
then return True
|
||||||
else do
|
else do
|
||||||
putStr s
|
S.hPut stdout b
|
||||||
hFlush stdout
|
hFlush stdout
|
||||||
|
let s = w82s (S.unpack b)
|
||||||
let (mbytes, buf') = progressparser (buf++s)
|
let (mbytes, buf') = progressparser (buf++s)
|
||||||
case mbytes of
|
case mbytes of
|
||||||
Nothing -> feedprogress prev buf' h
|
Nothing -> feedprogress prev buf' h
|
||||||
|
|
1
debian/changelog
vendored
1
debian/changelog
vendored
|
@ -20,6 +20,7 @@ git-annex (5.20150206) UNRELEASED; urgency=medium
|
||||||
* Improve race recovery code when committing to git-annex branch.
|
* Improve race recovery code when committing to git-annex branch.
|
||||||
* addurl: Avoid crash if quvi is not installed, when git-annex was
|
* addurl: Avoid crash if quvi is not installed, when git-annex was
|
||||||
built with process-1.2
|
built with process-1.2
|
||||||
|
* bittorrent: Fix mojibake introduced in parsing arai2c progress output.
|
||||||
|
|
||||||
-- Joey Hess <id@joeyh.name> Fri, 06 Feb 2015 13:57:08 -0400
|
-- Joey Hess <id@joeyh.name> Fri, 06 Feb 2015 13:57:08 -0400
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 1"""
|
||||||
|
date="2015-02-10T16:11:09Z"
|
||||||
|
content="""
|
||||||
|
This is because aria2c detects it's not outputting to a terminal, so it
|
||||||
|
stops using \r for progress displays. You can get the same effect by piping
|
||||||
|
aria2c to less. There does not seem to be any switch to force console-style
|
||||||
|
output.
|
||||||
|
|
||||||
|
The only solution would be the complexity of making git-annex use a pty
|
||||||
|
internally, or just not showing aria2c progress output (or not intercepting
|
||||||
|
it for metering).
|
||||||
|
"""]]
|
|
@ -173,3 +173,5 @@ LC_ALL=
|
||||||
"""]]
|
"""]]
|
||||||
|
|
||||||
Previous similar UTF-8 bug: [[forget_corrupts_non-ascii_chars]]. Looks similar. --[[anarcat]]
|
Previous similar UTF-8 bug: [[forget_corrupts_non-ascii_chars]]. Looks similar. --[[anarcat]]
|
||||||
|
|
||||||
|
> [[fixed|done]] --[[Joey]]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue