Subject: bug#65541: New fancy progress bars writing new lines instead of updating original

From: Julien Lepiller <[email-masked]>
Date: Sat, 26 Aug 2023 09:06:27 +0200

Le Sat, 26 Aug 2023 10:25:53 +0900,
elaexuotee--- via Bug reports for GNU Guix <[email-masked]> a écrit :

> The new pretty progress bars are quite nice. One issue I am
> ecountering, however, is demonstrated in the snippet below:
> 
>     オブジェクトにインデックスを付けています  71%
> ▕████████████████████████████████████████████████████████████████████████████████████████████▉
> オブジェクトにインデックスを付けています  74%
> ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏
> オブジェクトにインデックスを付けています  77%
> ▕█████████████████████████████████████████████████████████████████████████████████████████████████████▍
> オブジェクトにインデックスを付けています  81%
> ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████▋
> オブジェクトにインデックスを付けています  84%
> ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████▊
> オブジェクトにインデックスを付けています  87%
> ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████
> オブジェクトにインデックスを付けています  90%
> ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████
> 
> When preceeding text contains double-width characters, progress bar
> updates end up printing new lines instead of overwriting the
> original. When the preceeding text is ascii, such as for substitute
> downloads, then the bars work beautifully.
> 
> My guess is that the width-calculation simply forgets to account for
> possible double-width charaters in the text snippet.
> 
> Anyone else seeing this?
> 
> Cheers,
> B. Wilson
> 

I don't think it's specific to the fancy bars, and I was able to
reproduce with "LANG=ja_JP.UTF-8 guix pull".

I sent a patch, now tracked https://issues.guix.gnu.org/65546, which
fixes the issue.

To test it, I did:

msgfmt po/guix/ja.po
cd ../..
mkdir -p ja/LC_MESSAGES
mv messages.mo ja/LC_MESSAGES/guix.mo
./configure --localstatedir=/var --sysconfdir=/etc --localedir=$(pwd)
make
./pre-inst-env guix pull

(if you don't specify a localedir, it'll try to find the translations
in /usr by default)

No more newlines :)