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,