git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] am: invoke perl's strftime in C locale
@ 2013-01-14 20:59 Dmitry V. Levin
  2013-01-14 21:49 ` Junio C Hamano
  2013-01-15 15:59 ` [PATCH] " Jeff King
  0 siblings, 2 replies; 13+ messages in thread
From: Dmitry V. Levin @ 2013-01-14 20:59 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

This fixes "hg" patch format support for locales other than C and en_*,
see https://bugzilla.altlinux.org/show_bug.cgi?id=28248

Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
---
 git-am.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/git-am.sh b/git-am.sh
index c682d34..64b88e4 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -334,7 +334,7 @@ split_patches () {
 			# Since we cannot guarantee that the commit message is in
 			# git-friendly format, we put no Subject: line and just consume
 			# all of the message as the body
-			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
+			LC_ALL=C perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
 				if ($subject) { print ; }
 				elsif (/^\# User /) { s/\# User/From:/ ; print ; }
 				elsif (/^\# Date /) {

-- 
ldv

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH] am: invoke perl's strftime in C locale
  2013-01-14 20:59 [PATCH] am: invoke perl's strftime in C locale Dmitry V. Levin
@ 2013-01-14 21:49 ` Junio C Hamano
  2013-01-14 22:36   ` [PATCH v2] " Dmitry V. Levin
  2013-01-15 15:59 ` [PATCH] " Jeff King
  1 sibling, 1 reply; 13+ messages in thread
From: Junio C Hamano @ 2013-01-14 21:49 UTC (permalink / raw)
  To: Dmitry V. Levin; +Cc: git

"Dmitry V. Levin" <ldv@altlinux.org> writes:

> This fixes "hg" patch format support for locales other than C and en_*,
> see https://bugzilla.altlinux.org/show_bug.cgi?id=28248
>
> Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
> ---

Thanks.

The reference URL is not very friendly, and you should be able to
state it here on a single line in English instead, I think.

The patch looks correct, though.

>  git-am.sh | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/git-am.sh b/git-am.sh
> index c682d34..64b88e4 100755
> --- a/git-am.sh
> +++ b/git-am.sh
> @@ -334,7 +334,7 @@ split_patches () {
>  			# Since we cannot guarantee that the commit message is in
>  			# git-friendly format, we put no Subject: line and just consume
>  			# all of the message as the body
> -			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
> +			LC_ALL=C perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
>  				if ($subject) { print ; }
>  				elsif (/^\# User /) { s/\# User/From:/ ; print ; }
>  				elsif (/^\# Date /) {

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2] am: invoke perl's strftime in C locale
  2013-01-14 21:49 ` Junio C Hamano
@ 2013-01-14 22:36   ` Dmitry V. Levin
  0 siblings, 0 replies; 13+ messages in thread
From: Dmitry V. Levin @ 2013-01-14 22:36 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

This fixes "hg" patch format support for locales other than C and en_*.
Before the change, git-am was making "Date:" line from hg changeset
metadata according to the current locale, and this line was rejected
later with "invalid date format" diagnostics because localized date
strings are not supported.

Reported-by: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
---

 v2: replaced "unfriendly" URL with a short description

 git-am.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/git-am.sh b/git-am.sh
index c682d34..64b88e4 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -334,7 +334,7 @@ split_patches () {
 			# Since we cannot guarantee that the commit message is in
 			# git-friendly format, we put no Subject: line and just consume
 			# all of the message as the body
-			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
+			LC_ALL=C perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
 				if ($subject) { print ; }
 				elsif (/^\# User /) { s/\# User/From:/ ; print ; }
 				elsif (/^\# Date /) {

-- 
ldv

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH] am: invoke perl's strftime in C locale
  2013-01-14 20:59 [PATCH] am: invoke perl's strftime in C locale Dmitry V. Levin
  2013-01-14 21:49 ` Junio C Hamano
@ 2013-01-15 15:59 ` Jeff King
  2013-01-15 16:42   ` Antoine Pelisse
  1 sibling, 1 reply; 13+ messages in thread
From: Jeff King @ 2013-01-15 15:59 UTC (permalink / raw)
  To: Dmitry V. Levin; +Cc: Junio C Hamano, git

On Tue, Jan 15, 2013 at 12:59:33AM +0400, Dmitry V. Levin wrote:

> diff --git a/git-am.sh b/git-am.sh
> index c682d34..64b88e4 100755
> --- a/git-am.sh
> +++ b/git-am.sh
> @@ -334,7 +334,7 @@ split_patches () {
>  			# Since we cannot guarantee that the commit message is in
>  			# git-friendly format, we put no Subject: line and just consume
>  			# all of the message as the body
> -			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
> +			LC_ALL=C perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
>  				if ($subject) { print ; }
>  				elsif (/^\# User /) { s/\# User/From:/ ; print ; }
>  				elsif (/^\# Date /) {

This puts all of perl into the C locale, which would mean error messages
from perl would be in English rather than the user's language. It
probably isn't a big deal, because that snippet of perl is short and not
likely to produce problems, but I wonder how hard it would be to set the
locale just for the strftime call.

-Peff

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] am: invoke perl's strftime in C locale
  2013-01-15 15:59 ` [PATCH] " Jeff King
@ 2013-01-15 16:42   ` Antoine Pelisse
  2013-01-15 16:50     ` Jeff King
  0 siblings, 1 reply; 13+ messages in thread
From: Antoine Pelisse @ 2013-01-15 16:42 UTC (permalink / raw)
  To: Jeff King; +Cc: Dmitry V. Levin, Junio C Hamano, git

> This puts all of perl into the C locale, which would mean error messages
> from perl would be in English rather than the user's language. It
> probably isn't a big deal, because that snippet of perl is short and not
> likely to produce problems, but I wonder how hard it would be to set the
> locale just for the strftime call.

Maybe just setting LC_TIME to C would do ...

>From locale(7) man page:

       LC_TIME
              changes  the behavior of the strftime(3) function to
display the current time in a locally acceptable form; for
              example, most of Europe uses a 24-hour clock versus the
12-hour clock used in the United States.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] am: invoke perl's strftime in C locale
  2013-01-15 16:42   ` Antoine Pelisse
@ 2013-01-15 16:50     ` Jeff King
  2013-01-15 17:40       ` Dmitry V. Levin
  0 siblings, 1 reply; 13+ messages in thread
From: Jeff King @ 2013-01-15 16:50 UTC (permalink / raw)
  To: Antoine Pelisse; +Cc: Dmitry V. Levin, Junio C Hamano, git

On Tue, Jan 15, 2013 at 05:42:12PM +0100, Antoine Pelisse wrote:

> > This puts all of perl into the C locale, which would mean error messages
> > from perl would be in English rather than the user's language. It
> > probably isn't a big deal, because that snippet of perl is short and not
> > likely to produce problems, but I wonder how hard it would be to set the
> > locale just for the strftime call.
> 
> Maybe just setting LC_TIME to C would do ...

Yeah, that is a nice simple solution. Dmitry, does just setting LC_TIME
fix the problem for you?

-Peff

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] am: invoke perl's strftime in C locale
  2013-01-15 16:50     ` Jeff King
@ 2013-01-15 17:40       ` Dmitry V. Levin
  2013-01-15 19:05         ` [PATCH v3] " Dmitry V. Levin
  2013-01-15 19:14         ` [PATCH] " Junio C Hamano
  0 siblings, 2 replies; 13+ messages in thread
From: Dmitry V. Levin @ 2013-01-15 17:40 UTC (permalink / raw)
  To: Jeff King; +Cc: Antoine Pelisse, Junio C Hamano, git

[-- Attachment #1: Type: text/plain, Size: 1150 bytes --]

On Tue, Jan 15, 2013 at 08:50:59AM -0800, Jeff King wrote:
> On Tue, Jan 15, 2013 at 05:42:12PM +0100, Antoine Pelisse wrote:
> 
> > > This puts all of perl into the C locale, which would mean error messages
> > > from perl would be in English rather than the user's language. It
> > > probably isn't a big deal, because that snippet of perl is short and not
> > > likely to produce problems, but I wonder how hard it would be to set the
> > > locale just for the strftime call.
> > 
> > Maybe just setting LC_TIME to C would do ...
> 
> Yeah, that is a nice simple solution. Dmitry, does just setting LC_TIME
> fix the problem for you?

Just setting LC_TIME environment variable instead of LC_ALL would end up
with unreliable solution because LC_ALL has the highest priority.

If keeping error messages from perl has the utmost importance, it could be
achieved by
-			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
+			perl -M'POSIX qw(strftime :locale_h)' -ne '
+				BEGIN { setlocale(LC_TIME, "C"); $subject = 0 }
but the little perl helper script we are talking about hardly worths so
much efforts.


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v3] am: invoke perl's strftime in C locale
  2013-01-15 17:40       ` Dmitry V. Levin
@ 2013-01-15 19:05         ` Dmitry V. Levin
  2013-01-18 20:36           ` Junio C Hamano
  2013-01-15 19:14         ` [PATCH] " Junio C Hamano
  1 sibling, 1 reply; 13+ messages in thread
From: Dmitry V. Levin @ 2013-01-15 19:05 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, Antoine Pelisse, git

This fixes "hg" patch format support for locales other than C and en_*.
Before the change, git-am was making "Date:" line from hg changeset
metadata according to the current locale, and this line was rejected
later with "invalid date format" diagnostics because localized date
strings are not supported.

Reported-by: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
---

 v3: alternative implementation using setlocale(LC_TIME, "C")

 git-am.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/git-am.sh b/git-am.sh
index c682d34..8677d8c 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -334,7 +334,8 @@ split_patches () {
 			# Since we cannot guarantee that the commit message is in
 			# git-friendly format, we put no Subject: line and just consume
 			# all of the message as the body
-			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
+			perl -M'POSIX qw(strftime :locale_h)' -ne '
+				BEGIN { setlocale(LC_TIME, "C"); $subject = 0 }
 				if ($subject) { print ; }
 				elsif (/^\# User /) { s/\# User/From:/ ; print ; }
 				elsif (/^\# Date /) {

-- 
ldv

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH] am: invoke perl's strftime in C locale
  2013-01-15 17:40       ` Dmitry V. Levin
  2013-01-15 19:05         ` [PATCH v3] " Dmitry V. Levin
@ 2013-01-15 19:14         ` Junio C Hamano
  1 sibling, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2013-01-15 19:14 UTC (permalink / raw)
  To: Dmitry V. Levin; +Cc: Jeff King, Antoine Pelisse, git

"Dmitry V. Levin" <ldv@altlinux.org> writes:

> On Tue, Jan 15, 2013 at 08:50:59AM -0800, Jeff King wrote:
>> On Tue, Jan 15, 2013 at 05:42:12PM +0100, Antoine Pelisse wrote:
>> 
>> > > This puts all of perl into the C locale, which would mean error messages
>> > > from perl would be in English rather than the user's language. It
>> > > probably isn't a big deal, because that snippet of perl is short and not
>> > > likely to produce problems, but I wonder how hard it would be to set the
>> > > locale just for the strftime call.
>> > 
>> > Maybe just setting LC_TIME to C would do ...
>> 
>> Yeah, that is a nice simple solution. Dmitry, does just setting LC_TIME
>> fix the problem for you?
>
> Just setting LC_TIME environment variable instead of LC_ALL would end up
> with unreliable solution because LC_ALL has the highest priority.
>
> If keeping error messages from perl has the utmost importance, it could be
> achieved by
> -			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
> +			perl -M'POSIX qw(strftime :locale_h)' -ne '
> +				BEGIN { setlocale(LC_TIME, "C"); $subject = 0 }
> but the little perl helper script we are talking about hardly worths so
> much efforts.

Yeah I agree that this is not worth it, I would think.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3] am: invoke perl's strftime in C locale
  2013-01-15 19:05         ` [PATCH v3] " Dmitry V. Levin
@ 2013-01-18 20:36           ` Junio C Hamano
  2013-01-19 16:39             ` Jeff King
  2013-01-19 20:28             ` Dmitry V. Levin
  0 siblings, 2 replies; 13+ messages in thread
From: Junio C Hamano @ 2013-01-18 20:36 UTC (permalink / raw)
  To: Dmitry V. Levin; +Cc: Jeff King, Antoine Pelisse, git

"Dmitry V. Levin" <ldv@altlinux.org> writes:

> This fixes "hg" patch format support for locales other than C and en_*.
> Before the change, git-am was making "Date:" line from hg changeset
> metadata according to the current locale, and this line was rejected
> later with "invalid date format" diagnostics because localized date
> strings are not supported.
>
> Reported-by: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
> Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
> ---
>
>  v3: alternative implementation using setlocale(LC_TIME, "C")
>
>  git-am.sh | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/git-am.sh b/git-am.sh
> index c682d34..8677d8c 100755
> --- a/git-am.sh
> +++ b/git-am.sh
> @@ -334,7 +334,8 @@ split_patches () {
>  			# Since we cannot guarantee that the commit message is in
>  			# git-friendly format, we put no Subject: line and just consume
>  			# all of the message as the body
> -			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
> +			perl -M'POSIX qw(strftime :locale_h)' -ne '
> +				BEGIN { setlocale(LC_TIME, "C"); $subject = 0 }

I still haven't convinced myself that this is an improvement over
the simple "LC_ALL=C LANG=C perl ..." approach.

This alternative might be theoretically more correct if we cared
about the error and other messages from this Perl invocation, but it
requires that everybody's Perl implementation correctly supports the
additional -M'POSIX ":locale_h"' and "setlocale(LC_TIME, ...)".

I am tempted to use the previous one that puts the whole process
under LC_ALL=C instead, unless I hear a "we already depend on that
elsewhere, look at $that_code".

Thanks.

>  				if ($subject) { print ; }
>  				elsif (/^\# User /) { s/\# User/From:/ ; print ; }
>  				elsif (/^\# Date /) {

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3] am: invoke perl's strftime in C locale
  2013-01-18 20:36           ` Junio C Hamano
@ 2013-01-19 16:39             ` Jeff King
  2013-01-19 20:28             ` Dmitry V. Levin
  1 sibling, 0 replies; 13+ messages in thread
From: Jeff King @ 2013-01-19 16:39 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Dmitry V. Levin, Antoine Pelisse, git

On Fri, Jan 18, 2013 at 12:36:46PM -0800, Junio C Hamano wrote:

> > diff --git a/git-am.sh b/git-am.sh
> > index c682d34..8677d8c 100755
> > --- a/git-am.sh
> > +++ b/git-am.sh
> > @@ -334,7 +334,8 @@ split_patches () {
> >  			# Since we cannot guarantee that the commit message is in
> >  			# git-friendly format, we put no Subject: line and just consume
> >  			# all of the message as the body
> > -			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
> > +			perl -M'POSIX qw(strftime :locale_h)' -ne '
> > +				BEGIN { setlocale(LC_TIME, "C"); $subject = 0 }
> 
> I still haven't convinced myself that this is an improvement over
> the simple "LC_ALL=C LANG=C perl ..." approach.

Yeah, I was the one who brought it up, but I think I was probably being
too nit-picky. It almost certainly doesn't matter, and the alternatives
are just as likely to cause problems.

> I am tempted to use the previous one that puts the whole process
> under LC_ALL=C instead, unless I hear a "we already depend on that
> elsewhere, look at $that_code".

I'm fine with that.

-Peff

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3] am: invoke perl's strftime in C locale
  2013-01-18 20:36           ` Junio C Hamano
  2013-01-19 16:39             ` Jeff King
@ 2013-01-19 20:28             ` Dmitry V. Levin
  2013-01-20 17:47               ` Junio C Hamano
  1 sibling, 1 reply; 13+ messages in thread
From: Dmitry V. Levin @ 2013-01-19 20:28 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, Antoine Pelisse, git

[-- Attachment #1: Type: text/plain, Size: 1600 bytes --]

On Fri, Jan 18, 2013 at 12:36:46PM -0800, Junio C Hamano wrote:
> "Dmitry V. Levin" <ldv@altlinux.org> writes:
> 
> > This fixes "hg" patch format support for locales other than C and en_*.
> > Before the change, git-am was making "Date:" line from hg changeset
> > metadata according to the current locale, and this line was rejected
> > later with "invalid date format" diagnostics because localized date
> > strings are not supported.
> >
> > Reported-by: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
> > Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
> > ---
> >
> >  v3: alternative implementation using setlocale(LC_TIME, "C")
> >
> >  git-am.sh | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/git-am.sh b/git-am.sh
> > index c682d34..8677d8c 100755
> > --- a/git-am.sh
> > +++ b/git-am.sh
> > @@ -334,7 +334,8 @@ split_patches () {
> >  			# Since we cannot guarantee that the commit message is in
> >  			# git-friendly format, we put no Subject: line and just consume
> >  			# all of the message as the body
> > -			perl -M'POSIX qw(strftime)' -ne 'BEGIN { $subject = 0 }
> > +			perl -M'POSIX qw(strftime :locale_h)' -ne '
> > +				BEGIN { setlocale(LC_TIME, "C"); $subject = 0 }
> 
> I still haven't convinced myself that this is an improvement over
> the simple "LC_ALL=C LANG=C perl ..." approach.

Personally I prefer 2nd edition that is simpler and does the right thing
(not that LC_ALL=C is necessary and sufficient, you neither need to add
things like LANG=C nor can relax it to LC_TIME=C).


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3] am: invoke perl's strftime in C locale
  2013-01-19 20:28             ` Dmitry V. Levin
@ 2013-01-20 17:47               ` Junio C Hamano
  0 siblings, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2013-01-20 17:47 UTC (permalink / raw)
  To: Dmitry V. Levin; +Cc: Jeff King, Antoine Pelisse, git

"Dmitry V. Levin" <ldv@altlinux.org> writes:

> Personally I prefer 2nd edition that is simpler and does the right thing
> (not that LC_ALL=C is necessary and sufficient, you neither need to add
> things like LANG=C nor can relax it to LC_TIME=C).

I guess everybody involved is in agreement, then.

Just FYI, "LC_ALL=C LANG=C" comes from the inertia dating back when
not everybody understood LC_*; I do not personally know of a system
that will be helped by the extra LANG=C these days, but I know it
will not hurt anybody, so...

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2013-01-20 17:47 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-14 20:59 [PATCH] am: invoke perl's strftime in C locale Dmitry V. Levin
2013-01-14 21:49 ` Junio C Hamano
2013-01-14 22:36   ` [PATCH v2] " Dmitry V. Levin
2013-01-15 15:59 ` [PATCH] " Jeff King
2013-01-15 16:42   ` Antoine Pelisse
2013-01-15 16:50     ` Jeff King
2013-01-15 17:40       ` Dmitry V. Levin
2013-01-15 19:05         ` [PATCH v3] " Dmitry V. Levin
2013-01-18 20:36           ` Junio C Hamano
2013-01-19 16:39             ` Jeff King
2013-01-19 20:28             ` Dmitry V. Levin
2013-01-20 17:47               ` Junio C Hamano
2013-01-15 19:14         ` [PATCH] " Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).