logo       

svn commit: r13182 - in trunk/subversion: clients/cmdline include libsvn_su: msg#00363

version-control.subversion.svn

Subject: svn commit: r13182 - in trunk/subversion: clients/cmdline include libsvn_subr svnadmin svndumpfilter svnlook svnserve

Author: dionisos
Date: Sun Feb 27 15:43:31 2005
New Revision: 13182

Modified:
trunk/subversion/clients/cmdline/main.c
trunk/subversion/include/svn_cmdline.h
trunk/subversion/libsvn_subr/cmdline.c
trunk/subversion/svnadmin/main.c
trunk/subversion/svndumpfilter/main.c
trunk/subversion/svnlook/main.c
trunk/subversion/svnserve/main.c
Log:
Fix svnserve error message translation by postponing locale initialization.

* subversion/include/svn_cmdline.h,
subversion/libsvn_subr/cmdline.c (svn_cmdline_init): Deprecated.
(svn_cmdline_init2): New. Derived from svn_cmdline_init, but takes
an extra 'server_mode' boolean parameter.

* subversion/clients/cmdline/main.c,
subversion/svnadmin/main.c,
subversion/svndumpfilter/main.c,
subversion/svnlook/main.c: Update calls to svn_cmdline_init2.

* subversion/svnserve/main.c: Set LC_ALL locale before calling _() (and
thus gettext()) to ensure getting the correct translation. Also,
don't translate messages which may be sent to the client.


Modified: trunk/subversion/clients/cmdline/main.c
Url:
http://svn.collab.net/viewcvs/svn/trunk/subversion/clients/cmdline/main.c?view=diff&rev=13182&p1=trunk/subversion/clients/cmdline/main.c&r1=13181&p2=trunk/subversion/clients/cmdline/main.c&r2=13182
==============================================================================
--- trunk/subversion/clients/cmdline/main.c (original)
+++ trunk/subversion/clients/cmdline/main.c Sun Feb 27 15:43:31 2005
@@ -780,7 +780,7 @@
svn_config_t *cfg;

/* Initialize the app. */
- if (svn_cmdline_init ("svn", stderr) != EXIT_SUCCESS)
+ if (svn_cmdline_init2 ("svn", stderr, FALSE) != EXIT_SUCCESS)
return EXIT_FAILURE;

/* Create our top-level pool. Use a seperate mutexless allocator,

Modified: trunk/subversion/include/svn_cmdline.h
Url:
http://svn.collab.net/viewcvs/svn/trunk/subversion/include/svn_cmdline.h?view=diff&rev=13182&p1=trunk/subversion/include/svn_cmdline.h&r1=13181&p2=trunk/subversion/include/svn_cmdline.h&r2=13182
==============================================================================
--- trunk/subversion/include/svn_cmdline.h (original)
+++ trunk/subversion/include/svn_cmdline.h Sun Feb 27 15:43:31 2005
@@ -37,13 +37,30 @@
#endif /* __cplusplus */


-/** Set up the locale for character conversion, and initialize APR.
+/**
+ *
+ * @since New in 1.2
+ *
+ * Set up the locale and initialize APR and gettext.
+ * Only set up LC_CTYPE when @a server_mode is true, LC_ALL otherwise.
* If @a error_stream is non-null, print error messages to the stream,
* using @a progname as the program name. Return @c EXIT_SUCCESS if
* successful, otherwise @c EXIT_FAILURE.
*
* @note This function should be called exactly once at program startup,
* before calling any other APR or Subversion functions.
+ *
+ */
+int svn_cmdline_init2 (const char *progname, FILE *error_stream,
+ svn_boolean_t server_mode);
+
+
+/**
+ *
+ * @deprecated Provided for backward compatibility with the 1.1 API.
+ *
+ * Same as svn_cmdline_init2, but with @a server_mode set to FALSE
+ *
*/
int svn_cmdline_init (const char *progname, FILE *error_stream);


Modified: trunk/subversion/libsvn_subr/cmdline.c
Url:
http://svn.collab.net/viewcvs/svn/trunk/subversion/libsvn_subr/cmdline.c?view=diff&rev=13182&p1=trunk/subversion/libsvn_subr/cmdline.c&r1=13181&p2=trunk/subversion/libsvn_subr/cmdline.c&r2=13182
==============================================================================
--- trunk/subversion/libsvn_subr/cmdline.c (original)
+++ trunk/subversion/libsvn_subr/cmdline.c Sun Feb 27 15:43:31 2005
@@ -58,7 +58,8 @@


int
-svn_cmdline_init (const char *progname, FILE *error_stream)
+svn_cmdline_init2 (const char *progname, FILE *error_stream,
+ svn_boolean_t server_mode)
{
apr_status_t status;
apr_pool_t *pool;
@@ -102,12 +103,13 @@
/* C programs default to the "C" locale. But because svn is supposed
to be i18n-aware, it should inherit the default locale of its
environment. */
- if (!setlocale(LC_ALL, ""))
+ if (!setlocale(server_mode ? LC_CTYPE : LC_ALL, ""))
{
if (error_stream)
{
const char *env_vars[] = { "LC_ALL", "LC_CTYPE", "LANG", NULL };
- const char **env_var = &env_vars[0], *env_val = NULL;
+ const char **env_var = &env_vars[server_mode ? 1 : 0];
+ const char *env_val = NULL;
while (*env_var)
{
env_val = getenv(*env_var);
@@ -124,10 +126,11 @@
}

fprintf(error_stream,
- "%s: error: cannot set LC_ALL locale\n"
+ "%s: error: cannot set %s locale\n"
"%s: error: environment variable %s is %s\n"
"%s: error: please check that your locale name is correct\n",
- progname, progname, *env_var, env_val, progname);
+ progname, server_mode ? "LC_CTYPE" : "LC_ALL",
+ progname, *env_var, env_val, progname);
}
return EXIT_FAILURE;
}
@@ -225,6 +228,13 @@
#endif

return EXIT_SUCCESS;
+}
+
+
+int
+svn_cmdline_init (const char *progname, FILE *error_stream)
+{
+ return svn_cmdline_init2 (progname, error_stream, FALSE);
}



Modified: trunk/subversion/svnadmin/main.c
Url:
http://svn.collab.net/viewcvs/svn/trunk/subversion/svnadmin/main.c?view=diff&rev=13182&p1=trunk/subversion/svnadmin/main.c&r1=13181&p2=trunk/subversion/svnadmin/main.c&r2=13182
==============================================================================
--- trunk/subversion/svnadmin/main.c (original)
+++ trunk/subversion/svnadmin/main.c Sun Feb 27 15:43:31 2005
@@ -987,7 +987,7 @@
int i, num_opts = 0;

/* Initialize the app. */
- if (svn_cmdline_init ("svnadmin", stderr) != EXIT_SUCCESS)
+ if (svn_cmdline_init2 ("svnadmin", stderr, FALSE) != EXIT_SUCCESS)
return EXIT_FAILURE;

/* Create our top-level pool. Use a seperate mutexless allocator,

Modified: trunk/subversion/svndumpfilter/main.c
Url:
http://svn.collab.net/viewcvs/svn/trunk/subversion/svndumpfilter/main.c?view=diff&rev=13182&p1=trunk/subversion/svndumpfilter/main.c&r1=13181&p2=trunk/subversion/svndumpfilter/main.c&r2=13182
==============================================================================
--- trunk/subversion/svndumpfilter/main.c (original)
+++ trunk/subversion/svndumpfilter/main.c Sun Feb 27 15:43:31 2005
@@ -1061,7 +1061,7 @@


/* Initialize the app. */
- if (svn_cmdline_init ("svndumpfilter", stderr) != EXIT_SUCCESS)
+ if (svn_cmdline_init2 ("svndumpfilter", stderr, FALSE) != EXIT_SUCCESS)
return EXIT_FAILURE;

/* Create our top-level pool. Use a seperate mutexless allocator,

Modified: trunk/subversion/svnlook/main.c
Url:
http://svn.collab.net/viewcvs/svn/trunk/subversion/svnlook/main.c?view=diff&rev=13182&p1=trunk/subversion/svnlook/main.c&r1=13181&p2=trunk/subversion/svnlook/main.c&r2=13182
==============================================================================
--- trunk/subversion/svnlook/main.c (original)
+++ trunk/subversion/svnlook/main.c Sun Feb 27 15:43:31 2005
@@ -1854,7 +1854,7 @@
int i, num_opts = 0;

/* Initialize the app. */
- if (svn_cmdline_init ("svnlook", stderr) != EXIT_SUCCESS)
+ if (svn_cmdline_init2 ("svnlook", stderr, FALSE) != EXIT_SUCCESS)
return EXIT_FAILURE;

/* Create our top-level pool. Use a seperate mutexless allocator,

Modified: trunk/subversion/svnserve/main.c
Url:
http://svn.collab.net/viewcvs/svn/trunk/subversion/svnserve/main.c?view=diff&rev=13182&p1=trunk/subversion/svnserve/main.c&r1=13181&p2=trunk/subversion/svnserve/main.c&r2=13182
==============================================================================
--- trunk/subversion/svnserve/main.c (original)
+++ trunk/subversion/svnserve/main.c Sun Feb 27 15:43:31 2005
@@ -123,14 +123,22 @@
};


+static void enable_message_translation()
+{
+ /* discard the result; if setlocale fails, we'll just be serving
+ the english text instead of the localized version. */
+ setlocale (LC_ALL, "");
+}
+
static void usage(const char *progname, apr_pool_t *pool)
{
if (!progname)
progname = "svnserve";

- svn_error_clear (svn_cmdline_fprintf(stderr, pool,
- _("Type '%s --help' for usage.\n"),
- progname));
+ enable_message_translation();
+ svn_error_clear (svn_cmdline_fprintf (stderr, pool,
+ _("Type '%s --help' for usage.\n"),
+ progname));
exit(1);
}

@@ -138,6 +146,7 @@
{
apr_size_t i;

+ enable_message_translation();
svn_error_clear (svn_cmdline_fputs(_("Usage: svnserve [options]\n"
"\n"
"Valid options:\n"),
@@ -154,6 +163,7 @@

static svn_error_t * version(apr_getopt_t *os, apr_pool_t *pool)
{
+ enable_message_translation();
return svn_opt_print_help(os, "svnserve", TRUE, FALSE, NULL, NULL,
NULL, NULL, NULL, pool);
}
@@ -248,7 +258,7 @@
const char *host = NULL;

/* Initialize the app. */
- if (svn_cmdline_init("svn", stderr) != EXIT_SUCCESS)
+ if (svn_cmdline_init2("svn", stderr, TRUE) != EXIT_SUCCESS)
return EXIT_FAILURE;

/* Create our top-level pool. */
@@ -258,6 +268,7 @@
err = check_lib_versions ();
if (err)
{
+ enable_message_translation();
svn_handle_error (err, stderr, FALSE);
svn_error_clear (err);
svn_pool_destroy (pool);
@@ -328,16 +339,18 @@

case 'R':
params.read_only = TRUE;
+ /* Don't translate the warning below: we may stay in
+ server mode (and thus don't want to translate messages) */
svn_error_clear
(svn_cmdline_fprintf
(stderr, pool,
- _("Warning: -R is deprecated.\n"
- "Anonymous access is now read-only by default.\n"
- "To change, use conf/svnserve.conf in repos:\n"
- " [general]\n"
- " anon-access = read|write|none (default read)\n"
- " auth-access = read|write|none (default write)\n"
- "Forcing all access to read-only for now\n")));
+ "Warning: -R is deprecated.\n"
+ "Anonymous access is now read-only by default.\n"
+ "To change, use conf/svnserve.conf in repos:\n"
+ " [general]\n"
+ " anon-access = read|write|none (default read)\n"
+ " auth-access = read|write|none (default write)\n"
+ "Forcing all access to read-only for now\n"));
break;

case 'T':
@@ -350,6 +363,7 @@

if (params.tunnel_user && run_mode != run_mode_tunnel)
{
+ enable_message_translation();
svn_error_clear
(svn_cmdline_fprintf
(stderr, pool,
@@ -359,9 +373,10 @@

if (run_mode == run_mode_none)
{
- svn_error_clear
- (svn_cmdline_fprintf
- (stderr, pool, _("You must specify one of -d, -i, -t or -X.\n")));
+ enable_message_translation();
+ svn_error_clear (svn_cmdline_fputs
+ (_("You must specify one of -d, -i, -t or -X.\n"),
+ stderr, pool));
usage(argv[0], pool);
}

@@ -386,10 +401,8 @@
#endif
if (status)
{
- svn_error_clear
- (svn_cmdline_fprintf
- (stderr, pool, _("Can't create server socket: %s\n"),
- apr_strerror(status, errbuf, sizeof(errbuf))));
+ fprintf (stderr, "Can't create server socket: %s\n",
+ apr_strerror(status, errbuf, sizeof(errbuf)));
exit(1);
}

@@ -400,32 +413,20 @@
status = apr_sockaddr_info_get(&sa, host, APR_INET, port, 0, pool);
if (status)
{
- svn_error_clear
- (svn_cmdline_fprintf
- (stderr, pool, _("Can't get address info: %s\n"),
- apr_strerror(status, errbuf, sizeof(errbuf))));
+ fprintf (stderr, "Can't get address info: %s\n",
+ apr_strerror(status, errbuf, sizeof(errbuf)));
exit(1);
}

status = apr_socket_bind(sock, sa);
if (status)
{
- svn_error_clear
- (svn_cmdline_fprintf
- (stderr, pool, _("Can't bind server socket: %s\n"),
- apr_strerror(status, errbuf, sizeof(errbuf))));
+ fprintf (stderr, "Can't bind server socket: %s\n",
+ apr_strerror(status, errbuf, sizeof(errbuf)));
exit(1);
}

apr_socket_listen(sock, 7);
-
- /* svn_cmdline_init() sets up the locale, but when we serve clients, we
- always want the "C" locale for messages. */
- /* ### LC_MESSAGES isn't available on all platforms. TEMPORARILY disable
- this call on those platforms. ### */
-#ifdef LC_MESSAGES
- setlocale (LC_MESSAGES, "C");
-#endif

#if APR_HAS_FORK
if (run_mode != run_mode_listen_once && !foreground)


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise