You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2017/08/10 23:39:48 UTC

svn commit: r1804744 - /subversion/trunk/subversion/svn/notify.c

Author: philip
Date: Thu Aug 10 23:39:48 2017
New Revision: 1804744

URL: http://svn.apache.org/viewvc?rev=1804744&view=rev
Log:
Avoid the extra blank progress notifications in most cases.

* subversion/svn/notify.c
  (struct notify_baton): Add progress_revision.
  (notify_body): Use progress_revision to avoid many of the blanking prints.
  (svn_cl__get_notifier): Initialise progress_revision.

Modified:
    subversion/trunk/subversion/svn/notify.c

Modified: subversion/trunk/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/notify.c?rev=1804744&r1=1804743&r2=1804744&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/notify.c (original)
+++ subversion/trunk/subversion/svn/notify.c Thu Aug 10 23:39:48 2017
@@ -54,6 +54,7 @@ struct notify_baton
   svn_boolean_t is_wc_to_repos_copy;
   svn_boolean_t sent_first_txdelta;
   int in_external;
+  svn_revnum_t progress_revision;
   svn_boolean_t had_print_error; /* Used to not keep printing error messages
                                     when we've already had one print error. */
 
@@ -477,18 +478,27 @@ notify_body(struct notify_baton *nb,
                                  _("Searching tree conflict details for '%s' "
                                    "in repository:\n"),
                                  path_local));
+      nb->progress_revision = 0;
       break;
 
     case svn_wc_notify_tree_conflict_details_progress:
       /* First printf is to obliterate any previous progress printf,
          assuming no more than 10 digit revisions.  Avoid i18n so the
-         text length is known. */
-      SVN_ERR(svn_cmdline_printf(pool, "\rChecking r             "));
+         text length is known.  We only need to do this if the new
+         revision is 4 digits less than the previous revision but that
+         requires counting digits.  Dividing by 1000 works well
+         enough: it triggers when needed, it sometimes triggers when
+         not needed, but in typical cases it doesn't trigger as the
+         revisions don't vary much. */
+      if (n->revision < nb->progress_revision / 1000)
+        SVN_ERR(svn_cmdline_printf(pool, "\rChecking r             "));
       SVN_ERR(svn_cmdline_printf(pool, "\rChecking r%ld...", n->revision));
+      nb->progress_revision = n->revision;
       break;
 
     case svn_wc_notify_end_search_tree_conflict_details:
       SVN_ERR(svn_cmdline_printf(pool, _(" done\n")));
+      nb->progress_revision = 0;
       break;
 
     case svn_wc_notify_add:
@@ -1239,6 +1249,7 @@ svn_cl__get_notifier(svn_wc_notify_func2
   nb->is_export = FALSE;
   nb->is_wc_to_repos_copy = FALSE;
   nb->in_external = 0;
+  nb->progress_revision = 0;
   nb->had_print_error = FALSE;
   nb->conflict_stats = conflict_stats;
   SVN_ERR(svn_dirent_get_absolute(&nb->path_prefix, "", pool));