You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2015/10/28 15:56:44 UTC
svn commit: r1711025 - in /subversion/branches/move-tracking-2/subversion:
include/private/svn_cmdline_private.h libsvn_subr/cmdline.c
svnmover/svnmover.c
Author: julianfoad
Date: Wed Oct 28 14:56:43 2015
New Revision: 1711025
URL: http://svn.apache.org/viewvc?rev=1711025&view=rev
Log:
On the 'move-tracking-2' branch: Let the use of coloured output in
'svnmover' be controllable by an option, and let the default depend on
whether standard output is connected to a terminal.
This unbreaks the tests, following r1711012.
* subversion/include/private/svn_cmdline_private.h,
subversion/libsvn_subr/cmdline.c
(svn_cmdline__stdin_is_a_terminal,
svn_cmdline__stdout_is_a_terminal,
svn_cmdline__stderr_is_a_terminal): New.
* subversion/svnmover/svnmover.c
(use_coloured_output): New global variable.
(settext,
settext_stderr): Operate only if 'use_coloured_output' is true.
(usage): Describe the new '--colour' (and '--color') option.
(sub_main): Implement the new '--colour' (and '--color') option.
Modified:
subversion/branches/move-tracking-2/subversion/include/private/svn_cmdline_private.h
subversion/branches/move-tracking-2/subversion/libsvn_subr/cmdline.c
subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c
Modified: subversion/branches/move-tracking-2/subversion/include/private/svn_cmdline_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/include/private/svn_cmdline_private.h?rev=1711025&r1=1711024&r2=1711025&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/include/private/svn_cmdline_private.h (original)
+++ subversion/branches/move-tracking-2/subversion/include/private/svn_cmdline_private.h Wed Oct 28 14:56:43 2015
@@ -213,6 +213,18 @@ svn_cmdline__getopt_init(apr_getopt_t **
const char *argv[],
apr_pool_t *pool);
+/* */
+svn_boolean_t
+svn_cmdline__stdin_is_a_terminal(void);
+
+/* */
+svn_boolean_t
+svn_cmdline__stdout_is_a_terminal(void);
+
+/* */
+svn_boolean_t
+svn_cmdline__stderr_is_a_terminal(void);
+
/* Determine whether interactive mode should be enabled, based on whether
* the user passed the --non-interactive or --force-interactive options.
* If neither option was passed, interactivity is enabled if standard
Modified: subversion/branches/move-tracking-2/subversion/libsvn_subr/cmdline.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_subr/cmdline.c?rev=1711025&r1=1711024&r2=1711025&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_subr/cmdline.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_subr/cmdline.c Wed Oct 28 14:56:43 2015
@@ -1171,6 +1171,36 @@ svn_cmdline__print_xml_prop_hash(svn_str
}
svn_boolean_t
+svn_cmdline__stdin_is_a_terminal(void)
+{
+#ifdef WIN32
+ return (_isatty(STDIN_FILENO) != 0);
+#else
+ return (isatty(STDIN_FILENO) != 0);
+#endif
+}
+
+svn_boolean_t
+svn_cmdline__stdout_is_a_terminal(void)
+{
+#ifdef WIN32
+ return (_isatty(STDOUT_FILENO) != 0);
+#else
+ return (isatty(STDOUT_FILENO) != 0);
+#endif
+}
+
+svn_boolean_t
+svn_cmdline__stderr_is_a_terminal(void)
+{
+#ifdef WIN32
+ return (_isatty(STDERR_FILENO) != 0);
+#else
+ return (isatty(STDERR_FILENO) != 0);
+#endif
+}
+
+svn_boolean_t
svn_cmdline__be_interactive(svn_boolean_t non_interactive,
svn_boolean_t force_interactive)
{
Modified: subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c?rev=1711025&r1=1711024&r2=1711025&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c Wed Oct 28 14:56:43 2015
@@ -120,8 +120,18 @@ static const svn_token_map_t ui_mode_map
#define TEXT_BG_CYAN "\x1b[46m"
#define TEXT_BG_WHITE "\x1b[47m"
-#define settext(text_attr) (fputs(text_attr, stdout), fflush(stdout))
-#define settext_stderr(text_attr) (fputs(text_attr, stderr), fflush(stderr))
+static svn_boolean_t use_coloured_output = FALSE;
+
+#define settext(text_attr) \
+ do { \
+ if (use_coloured_output) \
+ { fputs(text_attr, stdout); fflush(stdout); } \
+ } while (0)
+#define settext_stderr(text_attr) \
+ do { \
+ if (use_coloured_output) \
+ { fputs(text_attr, stderr); fflush(stderr); } \
+ } while (0)
#else
@@ -3176,6 +3186,9 @@ usage(FILE *stream, apr_pool_t *pool)
_("\n"
"Valid options:\n"
" --ui={eids|e|paths|p} : display information as elements or as paths\n"
+ " --colo[u]r={always|never|auto}\n"
+ " : use coloured output; 'auto' (the default)\n"
+ " means when standard output goes to a terminal\n"
" -h, -? [--help] : display this text\n"
" -v [--verbose] : display debugging messages\n"
" -q [--quiet] : suppress notifications\n"
@@ -3513,7 +3526,8 @@ sub_main(int *exit_code, int argc, const
force_interactive_opt,
trust_server_cert_opt,
trust_server_cert_failures_opt,
- ui_opt
+ ui_opt,
+ colour_opt
};
static const apr_getopt_option_t options[] = {
{"verbose", 'v', 0, ""},
@@ -3538,6 +3552,8 @@ sub_main(int *exit_code, int argc, const
{"no-auth-cache", no_auth_cache_opt, 0, ""},
{"version", version_opt, 0, ""},
{"ui", ui_opt, 1, ""},
+ {"colour", colour_opt, 1, ""},
+ {"color", colour_opt, 1, ""},
{NULL, 0, 0, NULL}
};
const char *message = NULL;
@@ -3564,6 +3580,7 @@ sub_main(int *exit_code, int argc, const
svn_config_t *cfg_config;
svn_client_ctx_t *ctx;
const char *log_msg;
+ svn_tristate_t coloured_output = svn_tristate_unknown;
svnmover_wc_t *wc;
/* Check library versions */
@@ -3681,6 +3698,19 @@ sub_main(int *exit_code, int argc, const
SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, arg, pool));
SVN_ERR(svn_token__from_word_err(&the_ui_mode, ui_mode_map, opt_arg));
break;
+ case colour_opt:
+ if (strcmp(arg, "always") == 0)
+ coloured_output = svn_tristate_true;
+ else if (strcmp(arg, "never") == 0)
+ coloured_output = svn_tristate_false;
+ else if (strcmp(arg, "auto") == 0)
+ coloured_output = svn_tristate_unknown;
+ else
+ return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Bad argument in '--colour=%s': "
+ "use one of 'always', 'never', 'auto'"),
+ arg);
+ break;
case 'h':
case '?':
usage(stdout, pool);
@@ -3694,6 +3724,14 @@ sub_main(int *exit_code, int argc, const
return SVN_NO_ERROR;
}
+ if (coloured_output == svn_tristate_true)
+ use_coloured_output = TRUE;
+ else if (coloured_output == svn_tristate_false)
+ use_coloured_output = FALSE;
+ else
+ use_coloured_output = (svn_cmdline__stdout_is_a_terminal()
+ && svn_cmdline__stderr_is_a_terminal());
+
if (non_interactive && force_interactive)
{
return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,