Patchwork util: add doctest to datestr()

login
register
mail settings
Submitter Yuya Nishihara
Date April 9, 2016, 4:42 a.m.
Message ID <20160409134200.01531470@mimosa>
Download mbox | patch
Permalink /patch/14449/
State Superseded
Commit 16255662446d2ce08bd0a4210df30afe3d6377f6
Headers show

Comments

Yuya Nishihara - April 9, 2016, 4:42 a.m.
On Fri, 08 Apr 2016 18:46:29 +0200, Adrian Buehlmann wrote:
> On 2016-04-08 18:23, Yuya Nishihara wrote:
> > On Fri, 08 Apr 2016 17:58:16 +0200, Adrian Buehlmann wrote:  
> >> On 2016-04-08 16:51, Yuya Nishihara wrote:  
> >>> On Fri, 08 Apr 2016 11:29:20 +0200, Adrian Buehlmann wrote:    
> >>>> # HG changeset patch
> >>>> # User Adrian Buehlmann <adrian@cadifra.com>
> >>>> # Date 1460042647 -7200
> >>>> # Node ID e4855d9b93ae1c1413b3ab67e9e605b968c89fa9
> >>>> # Parent  ea86cdcd9b50bf38c6b9dd7bbaa04b9c8cc0aefb
> >>>> util: add doctest to datestr()
> >>>>
> >>>> The setlocale call is needed. If I leave it away, the active locale is -
> >>>> surprisingly - *not* 'C' here.
> >>>>
> >>>> diff --git a/mercurial/util.py b/mercurial/util.py
> >>>> --- a/mercurial/util.py
> >>>> +++ b/mercurial/util.py
> >>>> @@ -1576,7 +1576,22 @@
> >>>>      """represent a (unixtime, offset) tuple as a localized time.
> >>>>      unixtime is seconds since the epoch, and offset is the time zone's
> >>>>      number of seconds away from UTC. if timezone is false, do not
> >>>> -    append time zone to string."""
> >>>> +    append time zone to string.
> >>>> +
> >>>> +    >>> import locale
> >>>> +    >>> locale.setlocale(locale.LC_ALL, 'C')
> >>>> +    'C'    
> >>>
> >>> Perhaps test-doctest.py should do that globally? I got test failure on
> >>> Windows even without this patch.
> >>>    
> >>
> >> ?
> >>
> >> I'll probably stop digging this. In my experiments, setlocale in
> >> test-doctest.py had no influence on the locale used inside the scope of
> >> individual doctests.
> >>
> >> Test passed here.  
> > 
> > I thought setlocale() is per process and test-doctest.py won't spawn new
> > process. But I didn't investigate it either.  
> 
> To me, it looks like each doctest-block has a new locale-scope (per
> function). Could be similar to the fact that each one has its own
> globals. I might be wrong though.
> 
> No matter what I tried: the locale was correctly set only if I did set
> it in the doctest block. Which is quite surprising.

It turned out a bug of crecord.py. The following change fixed the doctest
failure on Windows.

Patch

diff --git a/mercurial/crecord.py b/mercurial/crecord.py
--- a/mercurial/crecord.py
+++ b/mercurial/crecord.py
@@ -28,7 +28,7 @@  from . import (
 
 # This is required for ncurses to display non-ASCII characters in default user
 # locale encoding correctly.  --immerrr
-locale.setlocale(locale.LC_ALL, '')
+#locale.setlocale(locale.LC_ALL, '')
 
 # patch comments based on the git one
 diffhelptext = _("""# To remove '-' lines, make them ' ' lines (context).