[PATCH/RESEND] transport.c: mark push status strings for translation

2013-12-03 Thread Nguyễn Thái Ngọc Duy
Mark strings like [up to date] passed to print_ref_status() for
translation with N_() instead of _() so they can remain untranslated
in porcelain mode.

While at there, mark some error strings in git push for translation
too.

Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
Reviewed-by: Jonathan Nieder jrnie...@gmail.com
---
 builtin/push.c |  8 +++---
 transport.c| 81 ++
 2 files changed, 52 insertions(+), 37 deletions(-)

diff --git a/builtin/push.c b/builtin/push.c
index 7b1b66c..22e2d4c 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -319,7 +319,7 @@ static int push_with_options(struct transport *transport, 
int flags)
 
if (!is_empty_cas(cas)) {
if (!transport-smart_options)
-   die(underlying transport does not support --%s option,
+   die(_(underlying transport does not support --%s 
option),
CAS_OPT_NAME);
transport-smart_options-cas = cas;
}
@@ -426,7 +426,7 @@ static int option_parse_recurse_submodules(const struct 
option *opt,
 
if (*flags  (TRANSPORT_RECURSE_SUBMODULES_CHECK |
  TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND))
-   die(%s can only be used once., opt-long_name);
+   die(_(%s can only be used once.), opt-long_name);
 
if (arg) {
if (!strcmp(arg, check))
@@ -434,9 +434,9 @@ static int option_parse_recurse_submodules(const struct 
option *opt,
else if (!strcmp(arg, on-demand))
*flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND;
else
-   die(bad %s argument: %s, opt-long_name, arg);
+   die(_(bad %s argument: %s), opt-long_name, arg);
} else
-   die(option %s needs an argument (check|on-demand),
+   die(_(option %s needs an argument (check|on-demand)),
opt-long_name);
 
return 0;
diff --git a/transport.c b/transport.c
index 7202b77..1fb92a1 100644
--- a/transport.c
+++ b/transport.c
@@ -14,6 +14,7 @@
 #include url.h
 #include submodule.h
 #include string-list.h
+#include utf8.h
 
 /* rsync support */
 
@@ -627,16 +628,23 @@ static void print_ref_status(char flag, const char 
*summary, struct ref *to, str
else
fprintf(stdout, %s\n, summary);
} else {
-   fprintf(stderr,  %c %-*s , flag, TRANSPORT_SUMMARY_WIDTH, 
summary);
+   int width = TRANSPORT_SUMMARY_WIDTH;
+   const char *localized_summary = _(summary);
+   /*
+* Compensate for the invisible bytes in utf-8
+* strings. The expression below is guaranteed always
+* positive (or zero in case of ascii strings) because
+* none of the doublewidth characters are ASCII
+* characters.
+*/
+   width += strlen(localized_summary) - 
utf8_strwidth(localized_summary);
+   fprintf(stderr,  %c %-*s , flag, width, localized_summary);
if (from)
fprintf(stderr, %s - %s, 
prettify_refname(from-name), prettify_refname(to-name));
else
fputs(prettify_refname(to-name), stderr);
-   if (msg) {
-   fputs( (, stderr);
-   fputs(msg, stderr);
-   fputc(')', stderr);
-   }
+   if (msg)
+   fprintf(stderr,  (%s), _(msg));
fputc('\n', stderr);
}
 }
@@ -649,11 +657,11 @@ static const char *status_abbrev(unsigned char sha1[20])
 static void print_ok_ref_status(struct ref *ref, int porcelain)
 {
if (ref-deletion)
-   print_ref_status('-', [deleted], ref, NULL, NULL, porcelain);
+   print_ref_status('-', N_([deleted]), ref, NULL, NULL, 
porcelain);
else if (is_null_sha1(ref-old_sha1))
print_ref_status('*',
-   (!prefixcmp(ref-name, refs/tags/) ? [new tag] :
-   [new branch]),
+   (!prefixcmp(ref-name, refs/tags/) ? N_([new tag]) :
+N_([new branch])),
ref, ref-peer_ref, NULL, porcelain);
else {
char quickref[84];
@@ -664,7 +672,7 @@ static void print_ok_ref_status(struct ref *ref, int 
porcelain)
if (ref-forced_update) {
strcat(quickref, ...);
type = '+';
-   msg = forced update;
+   msg = N_(forced update);
} else {
strcat(quickref, ..);
type = ' ';
@@ -678,50 +686,57 @@ static void print_ok_ref_status(struct ref *ref, int 
porcelain)
 
 static int 

Re: [PATCH/RESEND] transport.c: mark push status strings for translation

2013-12-03 Thread Jonathan Nieder
Nguyễn Thái Ngọc Duy wrote:

 Mark strings like [up to date] passed to print_ref_status() for
 translation with N_() instead of _() so they can remain untranslated
 in porcelain mode.

Makes sense.

[...]
 --- a/builtin/push.c
 +++ b/builtin/push.c

Perhaps it would make sense to send these as a separate patch, since
they are simpler than the rest.

[...]
 --- a/transport.c
 +++ b/transport.c
 @@ -14,6 +14,7 @@
  #include url.h
  #include submodule.h
  #include string-list.h
 +#include utf8.h
  
  /* rsync support */
  
 @@ -627,16 +628,23 @@ static void print_ref_status(char flag, const char 
 *summary, struct ref *to, str
   else
   fprintf(stdout, %s\n, summary);
   } else {
 - fprintf(stderr,  %c %-*s , flag, TRANSPORT_SUMMARY_WIDTH, 
 summary);
 + int width = TRANSPORT_SUMMARY_WIDTH;
 + const char *localized_summary = _(summary);

The summary arg comes from one of a few places:

 (a) [deleted] etc from print_ok_ref_status, which you marked
 with N_ (good)

 (b) deadbe... from status_abbrev via print_ok_ref_status.  Can we
 avoid passing it to gettext()?

 (c) [no match] etc from print_one_push_status, marked with
 N_ (good)

I am tempted to suggest something like

const char *localized_summary;

if (*summary != '[')
/* Leave abbreviated sha1 from status_abbrev() alone */
localized_summary = summary;
else
localized_summary = _(summary);

but that's kind of ugly.  Is there a simpler way?  Should the summary
arg be passed in already localized (with 'porcelain' handling higher
up)?

Thanks,
Jonathan
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html