You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2010/11/22 15:42:06 UTC

svn commit: r1037738 - in /subversion/trunk/subversion: include/ libsvn_client/ svn/ tests/cmdline/ tests/cmdline/svntest/

Author: cmpilato
Date: Mon Nov 22 14:42:05 2010
New Revision: 1037738

URL: http://svn.apache.org/viewvc?rev=1037738&view=rev
Log:
Issue #3693 - Multi-target update output is quite confusing.

Add notifications at the start of each performed update, and a summary
at the end of the whole mess.

* subversion/svn/update-cmd.c
  (print_update_summary): New helper function.
  (svn_cl__update): Capture the result revisions from
    svn_client_update4(), and feed them to print_update_summary().

* subversion/svn/notify.c
  (struct notify_baton): Replace 'suppress_final_line' member with
    'suppress_summary_lines' member.
  (notify): Handle the new 'svn_wc_notify_update_started' notification.
  (svn_cl__get_notifier): Replace 'suppress_final_line' parameter with
    'suppress_summary_lines' parameter, used to populate the
    same-named member of the notify_baton.

* subversion/include/svn_wc.h
  (svn_wc_notify_action_t): Add 'svn_wc_notify_update_started' value.

* subversion/libsvn_client/update.c
  (update_internal): Generate an 'svn_wc_notify_update_started' notification.

* subversion/tests/cmdline/svntest/actions.py
  (exp_noop_up_out): New function.

* subversion/tests/cmdline/import_tests.py,
* subversion/tests/cmdline/mergeinfo_tests.py,
* subversion/tests/cmdline/log_tests.py,
* subversion/tests/cmdline/copy_tests.py,
* subversion/tests/cmdline/merge_reintegrate_tests.py,
* subversion/tests/cmdline/schedule_tests.py
  (exp_noop_up_out): New abbreviation, now used everywhere a test was
    previously expecting output of ["At revision REV.\n"]

* subversion/tests/cmdline/update_tests.py
  (exp_noop_up_out): New abbreviation, now used everywhere a test was
    previously expecting output of ["At revision REV.\n"]
  (another_hudson_problem): Adjust expectations according to these changes.

* subversion/tests/cmdline/merge_tests.py
  (exp_noop_up_out): New abbreviation, now used everywhere a test was
    previously expecting output of ["At revision REV.\n"]
  (merge_range_prior_to_rename_source_existence): Adjust expectations
    according to these changes.

* subversion/tests/cmdline/redirect_tests.py
  (redirect_update): Adjust expectations according to these changes.

Modified:
    subversion/trunk/subversion/include/svn_wc.h
    subversion/trunk/subversion/libsvn_client/update.c
    subversion/trunk/subversion/svn/notify.c
    subversion/trunk/subversion/svn/update-cmd.c
    subversion/trunk/subversion/tests/cmdline/copy_tests.py
    subversion/trunk/subversion/tests/cmdline/import_tests.py
    subversion/trunk/subversion/tests/cmdline/log_tests.py
    subversion/trunk/subversion/tests/cmdline/merge_reintegrate_tests.py
    subversion/trunk/subversion/tests/cmdline/merge_tests.py
    subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py
    subversion/trunk/subversion/tests/cmdline/redirect_tests.py
    subversion/trunk/subversion/tests/cmdline/schedule_tests.py
    subversion/trunk/subversion/tests/cmdline/svntest/actions.py
    subversion/trunk/subversion/tests/cmdline/update_tests.py

Modified: subversion/trunk/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_wc.h?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_wc.h (original)
+++ subversion/trunk/subversion/include/svn_wc.h Mon Nov 22 14:42:05 2010
@@ -1039,6 +1039,9 @@ typedef enum svn_wc_notify_action_t
    * which is unable to be operated on.  @since New in 1.6. */
   svn_wc_notify_failed_external,
 
+  /** Starting an update operation.  @since New in 1.7. */
+  svn_wc_notify_update_started,
+
   /** An update tried to add a file or directory at path but an
    * unversioned obstruction was found.  @since New in 1.7. */
   svn_wc_notify_update_obstruction,

Modified: subversion/trunk/subversion/libsvn_client/update.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/update.c?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/update.c (original)
+++ subversion/trunk/subversion/libsvn_client/update.c Mon Nov 22 14:42:05 2010
@@ -156,6 +156,20 @@ update_internal(svn_revnum_t *result_rev
     ? svn_cstring_split(preserved_exts_str, "\n\r\t\v ", FALSE, pool)
     : NULL;
 
+  /* Let everyone know we're starting a real update (unless we're
+     asked not to). */
+  if (ctx->notify_func2 && notify_summary)
+    {
+      svn_wc_notify_t *notify
+        = svn_wc_create_notify(local_abspath, svn_wc_notify_update_started,
+                               pool);
+      notify->kind = svn_node_none;
+      notify->content_state = notify->prop_state
+        = svn_wc_notify_state_inapplicable;
+      notify->lock_state = svn_wc_notify_lock_state_inapplicable;
+      (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
+    }
+
   /* Open an RA session for the URL */
   SVN_ERR(svn_client__open_ra_session_internal(&ra_session, &corrected_url,
                                                anchor_url,

Modified: subversion/trunk/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/notify.c?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/notify.c (original)
+++ subversion/trunk/subversion/svn/notify.c Mon Nov 22 14:42:05 2010
@@ -46,7 +46,7 @@ struct notify_baton
   svn_boolean_t received_some_change;
   svn_boolean_t is_checkout;
   svn_boolean_t is_export;
-  svn_boolean_t suppress_final_line;
+  svn_boolean_t suppress_summary_lines;
   svn_boolean_t sent_first_txdelta;
   svn_boolean_t in_external;
   svn_boolean_t had_print_error; /* Used to not keep printing error messages
@@ -547,9 +547,21 @@ notify(void *baton, const svn_wc_notify_
         }
       break;
 
+    case svn_wc_notify_update_started:
+      if (! (nb->suppress_summary_lines || 
+             nb->in_external ||
+             nb->is_checkout ||
+             nb->is_export))
+        {
+          if ((err = svn_cmdline_printf(pool, _("Updating '%s'...\n"),
+                                        path_local)))
+            goto print_error;
+        }
+      break;
+
     case svn_wc_notify_update_completed:
       {
-        if (! nb->suppress_final_line)
+        if (! nb->suppress_summary_lines)
           {
             if (SVN_IS_VALID_REVNUM(n->revision))
               {
@@ -912,7 +924,7 @@ notify(void *baton, const svn_wc_notify_
 svn_error_t *
 svn_cl__get_notifier(svn_wc_notify_func2_t *notify_func_p,
                      void **notify_baton_p,
-                     svn_boolean_t suppress_final_line,
+                     svn_boolean_t suppress_summary_lines,
                      apr_pool_t *pool)
 {
   struct notify_baton *nb = apr_palloc(pool, sizeof(*nb));
@@ -921,7 +933,7 @@ svn_cl__get_notifier(svn_wc_notify_func2
   nb->sent_first_txdelta = FALSE;
   nb->is_checkout = FALSE;
   nb->is_export = FALSE;
-  nb->suppress_final_line = suppress_final_line;
+  nb->suppress_summary_lines = suppress_summary_lines;
   nb->in_external = FALSE;
   nb->had_print_error = FALSE;
   nb->text_conflicts = 0;

Modified: subversion/trunk/subversion/svn/update-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/update-cmd.c?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/update-cmd.c (original)
+++ subversion/trunk/subversion/svn/update-cmd.c Mon Nov 22 14:42:05 2010
@@ -39,6 +39,42 @@
 
 /*** Code. ***/
 
+/* Print an update summary when there's more than one target to report
+   about. */
+static svn_error_t *
+print_update_summary(apr_array_header_t *targets,
+                     apr_array_header_t *result_revs,
+                     apr_pool_t *scratch_pool)
+{
+  int i;
+
+  if (targets->nelts < 2)
+    return SVN_NO_ERROR;
+
+  SVN_ERR(svn_cmdline_printf(scratch_pool, _("Summary of updates:\n")));
+
+  for (i = 0; i < targets->nelts; i++)
+    {
+      const char *path = APR_ARRAY_IDX(targets, i, const char *);
+      
+      if (i < result_revs->nelts)
+        {
+          svn_revnum_t rev = APR_ARRAY_IDX(result_revs, i, const char *);
+
+          if (SVN_IS_VALID_REVNUM(rev))
+            SVN_ERR(svn_cmdline_printf(scratch_pool,
+                                       _("  Updated '%s' to r%ld.\n"),
+                                       path, rev));
+        }
+      else
+        {
+          /* ### Notify about targets for which there's no
+             ### result_rev?  Can we even get here?  */
+        }
+    }
+  return SVN_NO_ERROR;
+}
+
 /* This implements the `svn_opt_subcommand_t' interface. */
 svn_error_t *
 svn_cl__update(apr_getopt_t *os,
@@ -51,6 +87,7 @@ svn_cl__update(apr_getopt_t *os,
   svn_depth_t depth;
   svn_boolean_t depth_is_sticky;
   struct svn_cl__check_externals_failed_notify_baton nwb;
+  apr_array_header_t *result_revs;
 
   SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
                                                       opt_state->targets,
@@ -92,7 +129,7 @@ svn_cl__update(apr_getopt_t *os,
   ctx->notify_func2 = svn_cl__check_externals_failed_notify_wrapper;
   ctx->notify_baton2 = &nwb;
   
-  SVN_ERR(svn_client_update4(NULL, targets,
+  SVN_ERR(svn_client_update4(&result_revs, targets,
                              &(opt_state->start_revision),
                              depth, depth_is_sticky,
                              opt_state->ignore_externals,
@@ -100,7 +137,10 @@ svn_cl__update(apr_getopt_t *os,
                              ctx, scratch_pool));
 
   if (! opt_state->quiet)
-    SVN_ERR(svn_cl__print_conflict_stats(nwb.wrapped_baton, scratch_pool));
+    {
+      SVN_ERR(print_update_summary(targets, result_revs, scratch_pool));
+      SVN_ERR(svn_cl__print_conflict_stats(nwb.wrapped_baton, scratch_pool));
+    }
 
   if (nwb.had_externals_error)
     return svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS, NULL,

Modified: subversion/trunk/subversion/tests/cmdline/copy_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/copy_tests.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/copy_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/copy_tests.py Mon Nov 22 14:42:05 2010
@@ -38,7 +38,7 @@ SkipUnless = svntest.testcase.SkipUnless
 XFail = svntest.testcase.XFail
 Wimp = svntest.testcase.Wimp
 Item = svntest.wc.StateItem
-
+exp_noop_up_out = svntest.actions.expected_noop_update_output
 
 #
 #----------------------------------------------------------------------
@@ -4228,7 +4228,7 @@ def reverse_merge_move(sbox):
   rav_svn(None, None, [], 'co', sbox.repo_url, wc2_dir)
 
   # Update working directory and ensure that we are at revision 1.
-  rav_svn(None, ["At revision 1.\n"], [], 'up', wc_dir)
+  rav_svn(None, exp_noop_up_out(1), [], 'up', wc_dir)
 
   # Add new folder and file, later commit
   new_path = os.path.join(a_dir, 'New')
@@ -4237,12 +4237,12 @@ def reverse_merge_move(sbox):
   svntest.main.file_append(first_path, 'appended first text')
   svntest.main.run_svn(None, "add", new_path)
   rav_svn(None, None, [], 'ci', wc_dir, '-m', 'Add new folder %s' % new_path)
-  rav_svn(None, ["At revision 2.\n"], [], 'up', wc_dir)
+  rav_svn(None, exp_noop_up_out(2), [], 'up', wc_dir)
 
   # Reverse merge to revert previous changes and commit
   rav_svn(None, None, [], 'merge', '-c', '-2', a_repo_url, a_dir)
   rav_svn(None, None, [], 'ci', '-m', 'Reverting svn merge -c -2.', a_dir)
-  rav_svn(None, ["At revision 3.\n"], [], 'up', wc_dir)
+  rav_svn(None, exp_noop_up_out(3), [], 'up', wc_dir)
 
   # Reverse merge again to undo last revert.
   rav_svn(None, None, [], 'merge', '-c', '-3', a_repo_url, a_dir)

Modified: subversion/trunk/subversion/tests/cmdline/import_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/import_tests.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/import_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/import_tests.py Mon Nov 22 14:42:05 2010
@@ -36,6 +36,7 @@ Skip = svntest.testcase.Skip
 SkipUnless = svntest.testcase.SkipUnless
 XFail = svntest.testcase.XFail
 Item = wc.StateItem
+exp_noop_up_out = svntest.actions.expected_noop_update_output
 
 ######################################################################
 # Tests
@@ -286,7 +287,8 @@ def import_avoid_empty_revision(sbox):
   svntest.main.safe_rmtree(empty_dir)
 
   # Verify that an empty revision has not been created
-  svntest.actions.run_and_verify_svn(None, [ "At revision 1.\n"],
+  svntest.actions.run_and_verify_svn(None,
+                                     exp_noop_up_out(1),
                                      [], "update",
                                      empty_dir)
 #----------------------------------------------------------------------

Modified: subversion/trunk/subversion/tests/cmdline/log_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/log_tests.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/log_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/log_tests.py Mon Nov 22 14:42:05 2010
@@ -35,6 +35,9 @@ from svntest.main import server_has_merg
 from svntest.main import SVN_PROP_MERGEINFO
 from merge_tests import set_up_branch
 
+# (abbreviation)
+exp_noop_up_out = svntest.actions.expected_noop_update_output
+
 ######################################################################
 #
 # The Plan:
@@ -1564,7 +1567,8 @@ def merge_sensitive_log_added_mergeinfo_
   # Reverse merge r3 from 'A/D/H' to 'A_COPY/D/H' and commit as r8.
   # First update the wc so mergeinfo inheritance can occur.  This is
   # necessary so A_COPY/D/H 'knows' that r3 has been merged into it.
-  svntest.actions.run_and_verify_svn(None, ["At revision 7.\n"], [],
+  svntest.actions.run_and_verify_svn(None,
+                                     exp_noop_up_out(7), [],
                                      'up', wc_dir)
   wc_status.tweak(wc_rev=7)
   expected_output = wc.State(H_COPY_path, {

Modified: subversion/trunk/subversion/tests/cmdline/merge_reintegrate_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_reintegrate_tests.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_reintegrate_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/merge_reintegrate_tests.py Mon Nov 22 14:42:05 2010
@@ -37,6 +37,7 @@ Item = wc.StateItem
 XFail = svntest.testcase.XFail
 Skip = svntest.testcase.Skip
 SkipUnless = svntest.testcase.SkipUnless
+exp_noop_up_out = svntest.actions.expected_noop_update_output
 
 from svntest.main import SVN_PROP_MERGEINFO
 from svntest.main import server_has_mergeinfo
@@ -1005,7 +1006,7 @@ def reintegrate_with_subtree_mergeinfo(s
   # r10 - Merge r9 from A_COPY_3/D to A/D, creating explicit subtree
   # mergeinfo under A.  For this and every subsequent merge we update the WC
   # first to allow full inheritance and elision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [], 'up',
                                      wc_dir)
   expected_status.tweak(wc_rev=9)
   svntest.actions.run_and_verify_svn(
@@ -1032,7 +1033,7 @@ def reintegrate_with_subtree_mergeinfo(s
   expected_disk.tweak('A_COPY_2/mu', contents="New content")
 
   # r12 - Merge r11 from A_COPY_2/mu to A_COPY/mu
-  svntest.actions.run_and_verify_svn(None, ["At revision 11.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(11), [], 'up',
                                      wc_dir)
   expected_status.tweak(wc_rev=11)
   svntest.actions.run_and_verify_svn(
@@ -1050,7 +1051,7 @@ def reintegrate_with_subtree_mergeinfo(s
 
   # r13 - Do a 'synch' cherry harvest merge of all available revisions
   # from A to A_COPY
-  svntest.actions.run_and_verify_svn(None, ["At revision 12.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(12), [], 'up',
                                      wc_dir)
   expected_status.tweak(wc_rev=12)
   svntest.actions.run_and_verify_svn(
@@ -1105,7 +1106,7 @@ def reintegrate_with_subtree_mergeinfo(s
   expected_disk.tweak('A_COPY/B/E/alpha', contents="New content")
 
   # Now, reintegrate A_COPY to A.  This should succeed.
-  svntest.actions.run_and_verify_svn(None, ["At revision 14.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(14), [], 'up',
                                      wc_dir)
   expected_status.tweak(wc_rev=14)
   expected_output = wc.State(A_path, {
@@ -1341,7 +1342,7 @@ def reintegrate_with_subtree_mergeinfo(s
   #   /A_COPY/D/gamma_moved:17-19
   #
   # shows that it is fully synched up with trunk.
-  svntest.actions.run_and_verify_svn(None, ["At revision 19.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(19), [], 'up',
                                      wc_dir)
   expected_output = wc.State(A_path, {
     'B/E/alpha'     : Item(status='U '),
@@ -1638,7 +1639,7 @@ def reintegrate_with_self_referential_me
 
   # r6 Copy A to A2 and then manually set some self-referential mergeinfo on
   # A2/B and A2.
-  svntest.actions.run_and_verify_svn(None, ["At revision 5.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(5), [],
                                      'up', wc_dir)
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'copy', A_path, A2_path)
@@ -1669,7 +1670,7 @@ def reintegrate_with_self_referential_me
   # Update to uniform revision and reintegrate A2.1 back to A2.
   # Note that the mergeinfo on A2/B is not changed by the reintegration
   # and so is not expected to by updated to describe the merge.
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [],
                                      'up', wc_dir)
   expected_output = wc.State(A2_path, {
     'mu' : Item(status='U '),

Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tests.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Mon Nov 22 14:42:05 2010
@@ -38,6 +38,7 @@ XFail = svntest.testcase.XFail
 Skip = svntest.testcase.Skip
 SkipUnless = svntest.testcase.SkipUnless
 Wimp = svntest.testcase.Wimp
+exp_noop_up_out = svntest.actions.expected_noop_update_output
 
 from svntest.main import SVN_PROP_MERGEINFO
 from svntest.main import server_has_mergeinfo
@@ -4843,7 +4844,7 @@ def mergeinfo_inheritance(sbox):
 
   # Update the disconnected WC it so it will get the most recent mergeinfo
   # from the repos when merging.
-  svntest.actions.run_and_verify_svn(None, ["At revision 7.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [], 'up',
                                      other_wc)
 
   # Merge r5:4 into the root of the disconnected WC.
@@ -4942,7 +4943,7 @@ def mergeinfo_elision(sbox):
                                         wc_dir)
 
   # Update A_COPY to get all paths to the same working revision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 7.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [],
                                      'up', wc_dir)
   wc_status.tweak(wc_rev=7)
 
@@ -5406,7 +5407,7 @@ def merge_to_switched_path(sbox):
                                         None, None, None, None, None, 1)
 
   # Update working copy to allow elision (if any).
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [],
                                      'up', wc_dir)
 
   # Set some mergeinfo on a working copy parent of our switched subtree
@@ -5551,7 +5552,7 @@ def merge_to_path_with_switched_children
   A_COPY_gamma_path = os.path.join(wc_dir, "A_COPY", "D", "gamma")
   H_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "D", "H")
 
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [], 'up',
                                      wc_dir)
   wc_status.tweak(wc_rev=8)
 
@@ -5953,7 +5954,7 @@ def merge_to_path_with_switched_children
 
   # Update merge target so working revisions are uniform and all
   # possible elision occurs.
-  svntest.actions.run_and_verify_svn(None, ["At revision 10.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(10), [],
                                      'up', A_COPY_path)
 
   #  Do the reverse merge.
@@ -7194,7 +7195,7 @@ def merge_away_subtrees_noninheritable_r
   nu_COPY_path  = os.path.join(wc_dir, "A_COPY", "nu")
 
   # Make a change to directory A/D/H and commit as r8.
-  svntest.actions.run_and_verify_svn(None, ['At revision 7.\n'], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [],
                                      'update', wc_dir)
 
   svntest.actions.run_and_verify_svn(
@@ -7633,7 +7634,7 @@ def merge_to_sparse_directories(sbox):
   wc_disk.tweak('A/mu', contents="New content")
 
   # r8 - Add a prop to A/D and commit.
-  svntest.actions.run_and_verify_svn(None, ["At revision 7.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [],
                                      'up', wc_dir)
   svntest.actions.run_and_verify_svn(None,
                                      ["property 'prop:name' set on '" +
@@ -7648,7 +7649,7 @@ def merge_to_sparse_directories(sbox):
                                         None, wc_dir)
 
   # r9 - Add a prop to A and commit.
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [],
                                      'up', wc_dir)
   svntest.actions.run_and_verify_svn(None,
                                      ["property 'prop:name' set on '" +
@@ -9721,7 +9722,7 @@ def new_subtrees_should_not_break_merge(
   # Commit this merge as r9.
   #
   # Update the wc first to make setting the expected status a bit easier.
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [],
                                      'up', wc_dir)
   wc_status.tweak(wc_rev=8)
   expected_output = wc.State(wc_dir, {
@@ -9740,7 +9741,7 @@ def new_subtrees_should_not_break_merge(
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
                                         wc_status, None, wc_dir)
   # Update the WC.
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [],
                                      'up', wc_dir)
   wc_status.tweak(wc_rev=9)
 
@@ -9832,7 +9833,7 @@ def new_subtrees_should_not_break_merge(
   wc_status.tweak('A_COPY/D/G/rho', wc_rev=10)
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
                                         wc_status, None, wc_dir)
-  svntest.actions.run_and_verify_svn(None, ["At revision 10.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(10), [],
                                      'up', wc_dir)
   wc_status.tweak(wc_rev=10)
 
@@ -11612,7 +11613,7 @@ def subtree_merges_dont_intersect_with_t
   wc_disk.tweak('A/D/H/psi', contents="Even newer content")
 
   # Update the WC.
-  svntest.actions.run_and_verify_svn(None, ['At revision 8.\n'], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [],
                                      'update', wc_dir)
   wc_status.tweak(wc_rev=8)
 
@@ -11685,7 +11686,7 @@ def subtree_merges_dont_intersect_with_t
                                         wc_dir)
 
   # Update the WC.
-  svntest.actions.run_and_verify_svn(None, ['At revision 9.\n'], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [],
                                      'update', wc_dir)
 
   # Make sure we have mergeinfo that meets the two criteria set out above.
@@ -11941,7 +11942,7 @@ def subtree_source_missing_in_requested_
   svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
                                      'merge r6 to A_COPY',
                                      wc_dir)
-  svntest.actions.run_and_verify_svn(None, ["At revision 10.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(10), [], 'up',
                                      wc_dir)
 
   # r11 - Merge r8 to A_COPY.
@@ -11970,7 +11971,7 @@ def subtree_source_missing_in_requested_
   svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
                                      'merge r8 to A_COPY/D/H/omega',
                                      wc_dir)
-  svntest.actions.run_and_verify_svn(None, ["At revision 11.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(11), [], 'up',
                                      wc_dir)
 
   # r12 - modify A/D/H/omega yet again.
@@ -11990,7 +11991,7 @@ def subtree_source_missing_in_requested_
   svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
                                      'cherry harvest to A_COPY/D/H/omega',
                                      wc_dir)
-  svntest.actions.run_and_verify_svn(None, ["At revision 13.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(13), [], 'up',
                                      wc_dir)
 
   # Check that svn:mergeinfo is as expected.
@@ -12157,7 +12158,7 @@ def subtree_source_missing_in_requested_
   # Update A_COPY/D/H/rho back to r13 so it's mergeinfo doesn't include
   # r12.  Then merge a range, -r6:12 which should delete a subtree
   # (A_COPY/D/H/psi).
-  svntest.actions.run_and_verify_svn(None, ["At revision 14.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(14), [], 'up',
                                      wc_dir)
   expected_output = wc.State(A_COPY_path, {
     'D/H/psi'   : Item(status='D '),
@@ -12375,7 +12376,7 @@ def commit_to_subtree_added_by_merge(sbo
   # *did* succeed, but the wrong path ('A/D/H/nu' rather than 'A_COPY/D/H/nu')
   # is affected.  We can see this by running an update; since we just
   # committed there shouldn't be any incoming changes.
-  svntest.actions.run_and_verify_svn(None, ["At revision 5.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(5), [], 'up',
                                      wc_dir)
 
 
@@ -12557,7 +12558,7 @@ def subtree_merges_dont_cause_spurious_c
   wc_disk.tweak('A/D/G/rho', contents="Even *newer* content")
 
   # Update the WC to allow full mergeinfo inheritance and elision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [], 'up',
                                      wc_dir)
   wc_status.tweak(wc_rev=8)
 
@@ -12653,7 +12654,7 @@ def subtree_merges_dont_cause_spurious_c
                                         wc_status, None, wc_dir)
 
   # Update the WC to allow full mergeinfo inheritance and elision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [], 'up',
                                      wc_dir)
   wc_status.tweak(wc_rev=9)
 
@@ -12834,7 +12835,7 @@ def merge_target_and_subtrees_need_nonin
                                         None, wc_dir)
 
   # Update the WC to allow full mergeinfo inheritance and elision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [], 'up',
                                      wc_dir)
 
   # Merge all available revisions from A to A_COPY, the merge logic
@@ -13078,7 +13079,7 @@ def merge_adds_mergeinfo_correctly(sbox)
   D_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "D")
 
   # Update working copy to allow full inheritance and elision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 7.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [],
                                      'up', wc_dir)
   wc_status.tweak(wc_rev=7)
 
@@ -13216,7 +13217,7 @@ def merge_adds_mergeinfo_correctly(sbox)
   # the mergeinfo describing this merge '/A_COPY_2:9' should also be present
   # in A_COPY's explicit mergeinfo.
     # Update working copy to allow full inheritance and elision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [],
                                      'up', wc_dir)
   expected_output = wc.State(A_COPY_path, {
     'D'        : Item(status=' U'),
@@ -13437,7 +13438,7 @@ def natural_history_filtering(sbox):
 
   # r9: Merge all available revisions from A to A_COPY.  But first
   # update working copy to allow full inheritance and elision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [],
                                      'up', wc_dir)
   wc_status.tweak(wc_rev=8)
   expected_output = wc.State(A_COPY_path, {
@@ -13524,7 +13525,7 @@ def natural_history_filtering(sbox):
                                         None, wc_dir)
 
   # Again update the working copy to allow full inheritance and elision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [],
                                      'up', wc_dir)
   wc_status.tweak(wc_rev=9)
 
@@ -13761,7 +13762,7 @@ def no_self_referential_filtering_on_add
   # r9: Merge r8 from A_COPY to A.
   #
   # Update first to avoid an out of date error.
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [], 'up',
                                      wc_dir)
   wc_status.tweak(wc_rev=8)
   svntest.actions.run_and_verify_svn(
@@ -13934,7 +13935,7 @@ def merge_range_prior_to_rename_source_e
                                         wc_status, None, wc_dir)
 
   # r10 - Merge all available revisions (i.e. -r1:9) from A to A_COPY.
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [], 'up',
                                      wc_dir)
   wc_status.tweak(wc_rev=9)
   svntest.actions.run_and_verify_svn(
@@ -13968,7 +13969,7 @@ def merge_range_prior_to_rename_source_e
                                         wc_status, None, wc_dir)
 
   # r11 - Reverse merge -r9:1 from A/B to A_COPY/B
-  svntest.actions.run_and_verify_svn(None, ["At revision 10.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(10), [], 'up',
                                      wc_dir)
   wc_status.tweak(wc_rev=10)
   svntest.actions.run_and_verify_svn(
@@ -13995,7 +13996,8 @@ def merge_range_prior_to_rename_source_e
                                      sbox.repo_url + '/A/D/H/nu_moved',
                                      '-m', 'Move nu to nu_moved')
   svntest.actions.run_and_verify_svn(None,
-                                     ["D    " + nu_path + "\n",
+                                     ["Updating '%s'...\n" % (wc_dir),
+                                      "D    " + nu_path + "\n",
                                       "A    " + nu_moved_path + "\n",
                                       "Updated to revision 12.\n"],
                                      [], 'up', wc_dir)
@@ -14092,7 +14094,7 @@ def merge_range_prior_to_rename_source_e
   #   Properties on 'A_COPY_2\B':
   #     svn:mergeinfo
   #       /A/B:3-13
-  svntest.actions.run_and_verify_svn(None, ["At revision 13.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(13), [], 'up',
                                      wc_dir)
   svntest.actions.run_and_verify_svn(None,
                                      None, # Don't check stdout, we test this
@@ -14105,7 +14107,7 @@ def merge_range_prior_to_rename_source_e
     None, None, [], 'ci', '-m',
     'Merge all from A/B to A_COPY_2/B\nMerge -r2:9 from A to A_COPY_2',
     wc_dir)
-  svntest.actions.run_and_verify_svn(None, ["At revision 14.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(14), [], 'up',
                                      wc_dir)
 
   # Now reverse merge -r13:7 from A to A_COPY_2.
@@ -14284,7 +14286,7 @@ def set_up_natural_history_gap(sbox):
   # Update the WC to a uniform revision.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
                                         wc_status, None, wc_dir)
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [],
                                      'up', wc_dir)
   return wc_disk, wc_status
 
@@ -14668,7 +14670,7 @@ def noop_file_merge(sbox):
                                      wc_dir);
 
   # Update working copy to allow full inheritance and elision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 7.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [],
                                      'up', wc_dir)
 
   # Merge all available revisions from A/D/H/chi to A_COPY/D/H/chi.
@@ -14828,7 +14830,7 @@ def record_only_merge(sbox):
                                      wc_dir)
 
   # r10 - Merge r8 from A to A_COPY.
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [], 'up',
                                      wc_dir)
   svntest.actions.run_and_verify_svn(None,
                                      expected_merge_output(
@@ -14883,7 +14885,7 @@ def record_only_merge(sbox):
                                      'commit', '-m', 'Several subtree merges',
                                      wc_dir)
 
-  svntest.actions.run_and_verify_svn(None, ["At revision 11.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(11), [], 'up',
                                      wc_dir)
 
   # Now do a --record-only merge of r10 and r11 from A_COPY to A2.
@@ -15212,7 +15214,7 @@ def skipped_files_get_correct_mergeinfo(
   #
   # Issue #3440 occurred when empty mergeinfo was set on A_COPY/D/H, making
   # it appear that r3 was never merged.
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [],
                                      'up', wc_dir)
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'up', '--set-depth=empty', H_COPY_path)

Modified: subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py Mon Nov 22 14:42:05 2010
@@ -36,6 +36,7 @@ Item = wc.StateItem
 XFail = svntest.testcase.XFail
 Skip = svntest.testcase.Skip
 SkipUnless = svntest.testcase.SkipUnless
+exp_noop_up_out = svntest.actions.expected_noop_update_output
 
 from svntest.main import SVN_PROP_MERGEINFO
 from svntest.main import server_has_mergeinfo
@@ -169,7 +170,7 @@ def non_inheritable_mergeinfo(sbox):
 
   # Update the WC, then merge r4 from A to A_COPY and r6 from A to A_COPY
   # at --depth empty and commit the merges as r7.
-  svntest.actions.run_and_verify_svn(None, ["At revision 6.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(6), [], 'up',
                                      wc_dir)
   expected_status.tweak(wc_rev=6)
   svntest.actions.run_and_verify_svn(
@@ -195,7 +196,7 @@ def non_inheritable_mergeinfo(sbox):
                                         expected_status, None, wc_dir)
 
   # Update the WC a last time to ensure full inheritance.
-  svntest.actions.run_and_verify_svn(None, ["At revision 7.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [], 'up',
                                      wc_dir)
 
   # Despite being non-inheritable, r6 should still show as merged to A_COPY
@@ -248,7 +249,7 @@ def recursive_mergeinfo(sbox):
   nu2_path        = os.path.join(wc_dir, "A2", "C", "nu2")
 
   # Rename A to A2 in r7.
-  svntest.actions.run_and_verify_svn(None, ["At revision 6.\n"], [], 'up', wc_dir)
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(6), [], 'up', wc_dir)
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'ren', A_path, A2_path)
   svntest.actions.run_and_verify_svn(None, None, [],
@@ -264,7 +265,7 @@ def recursive_mergeinfo(sbox):
   # Do several merges to create varied subtree mergeinfo
 
   # Merge r4 from A2 to A_COPY at depth empty
-  svntest.actions.run_and_verify_svn(None, ["At revision 8.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [], 'up',
                                      wc_dir)
   svntest.actions.run_and_verify_svn(
     None,
@@ -318,7 +319,7 @@ def recursive_mergeinfo(sbox):
   # Commit everything this far as r9
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'ci', wc_dir, '-m', 'Many merges')
-  svntest.actions.run_and_verify_svn(None, ["At revision 9.\n"], [], 'up',
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(9), [], 'up',
                                      wc_dir)
 
   # Test svn mergeinfo -R / --depth infinity.

Modified: subversion/trunk/subversion/tests/cmdline/redirect_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/redirect_tests.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/redirect_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/redirect_tests.py Mon Nov 22 14:42:05 2010
@@ -129,7 +129,9 @@ def redirected_update(sbox):
   exit_code, out, err = svntest.main.run_svn(None, 'up', wc_dir)
   if err:
     raise svntest.Failure
-  if not redirect_regex.match(out[0]):
+  if not re.match("^Updating '.*'...", out[0]):
+    raise svntest.Failure
+  if not redirect_regex.match(out[1]):
     raise svntest.Failure
 
   # Verify that we have the expected URL.

Modified: subversion/trunk/subversion/tests/cmdline/schedule_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/schedule_tests.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/schedule_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/schedule_tests.py Mon Nov 22 14:42:05 2010
@@ -37,7 +37,7 @@ SkipUnless = svntest.testcase.SkipUnless
 XFail = svntest.testcase.XFail
 Wimp = svntest.testcase.Wimp
 Item = svntest.wc.StateItem
-
+exp_noop_up_out = svntest.actions.expected_noop_update_output
 
 ######################################################################
 # Tests
@@ -543,7 +543,7 @@ def status_add_deleted_directory(sbox):
 
   # Update will *not* remove the entry for A despite it being marked
   # deleted.
-  svntest.actions.run_and_verify_svn(None, ['At revision 2.\n'], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(2), [],
                                      'up', wc_dir)
   expected_status.tweak('', 'iota', wc_rev=2)
   svntest.actions.run_and_verify_status(wc_dir, expected_status)

Modified: subversion/trunk/subversion/tests/cmdline/svntest/actions.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/actions.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svntest/actions.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svntest/actions.py Mon Nov 22 14:42:05 2010
@@ -356,6 +356,13 @@ def load_repo(sbox, dumpfile_path = None
 
   return dump_str
 
+def expected_noop_update_output(rev):
+  """Return an ExpectedOutput object describing what we'd expect to
+  see from an update to revision REV that was effectively a no-op (no
+  server changes transmitted)."""
+  return verify.createExpectedOutput("Updating '.*'...|At revision %d."
+                                     % (rev),
+                                     "no-op update")
 
 ######################################################################
 # Subversion Actions

Modified: subversion/trunk/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/update_tests.py?rev=1037738&r1=1037737&r2=1037738&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/update_tests.py Mon Nov 22 14:42:05 2010
@@ -39,6 +39,7 @@ Skip = svntest.testcase.Skip
 SkipUnless = svntest.testcase.SkipUnless
 XFail = svntest.testcase.XFail
 Item = svntest.wc.StateItem
+exp_noop_up_out = svntest.actions.expected_noop_update_output
 
 from svntest.main import SVN_PROP_MERGEINFO, server_has_mergeinfo
 
@@ -1168,11 +1169,13 @@ def another_hudson_problem(sbox):
   # as 'deleted' and should not alter gamma's entry.
 
   if not svntest.main.wc_is_singledb(wc_dir):
-    expected_output = ['D    '+G_path+'\n',
+    expected_output = ["Updating '%s'...\n" % (G_path),
+                       'D    '+G_path+'\n',
                        'Updated to revision 3.\n',
                        ]
   else:
-    expected_output = ['Restored \'' + G_path + '\'\n',
+    expected_output = ["Updating '%s'...\n" % (G_path),
+                       'Restored \'' + G_path + '\'\n',
                        'Restored \'' + G_path + os.path.sep + 'pi\'\n',
                        'Restored \'' + G_path + os.path.sep + 'rho\'\n',
                        'Restored \'' + G_path + os.path.sep + 'tau\'\n',
@@ -1226,9 +1229,9 @@ def update_deleted_targets(sbox):
                                         None, wc_dir)
 
   # Explicit update must not remove the 'deleted=true' entries
-  svntest.actions.run_and_verify_svn(None, ['At revision 2.\n'], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(2), [],
                                      'update', gamma_path)
-  svntest.actions.run_and_verify_svn(None, ['At revision 2.\n'], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(2), [],
                                      'update', F_path)
 
   # Update to r1 to restore items, since the parent directory is already
@@ -3350,7 +3353,7 @@ def mergeinfo_update_elision(sbox):
                                         expected_status, None, wc_dir)
 
   # Update A to get all paths to the same working revision.
-  svntest.actions.run_and_verify_svn(None, ["At revision 7.\n"], [],
+  svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [],
                                      'up', wc_dir)
 
   # Merge r6:7 into A/B_COPY/E
@@ -3394,7 +3397,7 @@ def mergeinfo_update_elision(sbox):
 
   # r8 - Commit the merge
   svntest.actions.run_and_verify_svn(None,
-                                     ["At revision 7.\n"],
+                                     exp_noop_up_out(7),
                                      [], 'update', wc_dir)
 
   expected_output = wc.State(wc_dir,
@@ -3792,7 +3795,8 @@ def update_accept_conflicts(sbox):
   # Just leave the conflicts alone, since run_and_verify_svn already uses
   # the --non-interactive option.
   svntest.actions.run_and_verify_svn(None,
-                                     ['C    %s\n' % (iota_path_backup,),
+                                     ["Updating '%s'...\n" % (iota_path_backup),
+                                      'C    %s\n' % (iota_path_backup,),
                                       'Updated to revision 2.\n',
                                       'Summary of conflicts:\n',
                                       '  Text conflicts: 1\n'],
@@ -3802,7 +3806,8 @@ def update_accept_conflicts(sbox):
   # lambda: --accept=postpone
   # Just leave the conflicts alone.
   svntest.actions.run_and_verify_svn(None,
-                                     ['C    %s\n' % (lambda_path_backup,),
+                                     ["Updating '%s'...\n" % (lambda_path_backup),
+                                      'C    %s\n' % (lambda_path_backup,),
                                       'Updated to revision 2.\n',
                                       'Summary of conflicts:\n',
                                       '  Text conflicts: 1\n'],
@@ -3813,7 +3818,8 @@ def update_accept_conflicts(sbox):
   # mu: --accept=base
   # Accept the pre-update base file.
   svntest.actions.run_and_verify_svn(None,
-                                     ['G    %s\n' % (mu_path_backup,),
+                                     ["Updating '%s'...\n" % (mu_path_backup),
+                                      'G    %s\n' % (mu_path_backup,),
                                       'Updated to revision 2.\n'],
                                      [],
                                      'update', '--accept=base',
@@ -3822,7 +3828,8 @@ def update_accept_conflicts(sbox):
   # alpha: --accept=mine
   # Accept the user's working file.
   svntest.actions.run_and_verify_svn(None,
-                                     ['G    %s\n' % (alpha_path_backup,),
+                                     ["Updating '%s'...\n" % (alpha_path_backup),
+                                      'G    %s\n' % (alpha_path_backup,),
                                       'Updated to revision 2.\n'],
                                      [],
                                      'update', '--accept=mine-full',
@@ -3831,7 +3838,8 @@ def update_accept_conflicts(sbox):
   # beta: --accept=theirs
   # Accept their file.
   svntest.actions.run_and_verify_svn(None,
-                                     ['G    %s\n' % (beta_path_backup,),
+                                     ["Updating '%s'...\n" % (beta_path_backup),
+                                      'G    %s\n' % (beta_path_backup,),
                                       'Updated to revision 2.\n'],
                                      [],
                                      'update', '--accept=theirs-full',
@@ -3842,7 +3850,8 @@ def update_accept_conflicts(sbox):
   # conflicts in place, so expect a message on stderr, but expect
   # svn to exit with an exit code of 0.
   svntest.actions.run_and_verify_svn2(None,
-                                      ['G    %s\n' % (pi_path_backup,),
+                                      ["Updating '%s'...\n" % (pi_path_backup),
+                                       'G    %s\n' % (pi_path_backup,),
                                        'Updated to revision 2.\n'],
                                       "system(.*) returned.*", 0,
                                       'update', '--accept=edit',
@@ -3851,7 +3860,8 @@ def update_accept_conflicts(sbox):
   # rho: --accept=launch
   # Run the external merge tool, it should leave conflict markers in place.
   svntest.actions.run_and_verify_svn(None,
-                                     ['C    %s\n' % (rho_path_backup,),
+                                     ["Updating '%s'...\n" % (rho_path_backup),
+                                      'C    %s\n' % (rho_path_backup,),
                                       'Updated to revision 2.\n',
                                       'Summary of conflicts:\n',
                                       '  Text conflicts: 1\n'],



Re: svn commit: r1037738 - in /subversion/trunk/subversion: include/ libsvn_client/ svn/ tests/cmdline/ tests/cmdline/svntest/

Posted by "C. Michael Pilato" <cm...@apache.org>.
On 11/23/2010 09:24 AM, Hyrum K. Wright wrote:
> On Mon, Nov 22, 2010 at 7:10 PM, Daniel Shahaf <d....@daniel.shahaf.name> wrote:
>> subversion/svn/update-cmd.c: In function ‘print_update_summary’:
>> subversion/svn/update-cmd.c:62: warning: initialization makes integer from pointer without a cast
> 
> I fixed this last night.  (Hadn't seen the review, but noticed the
> Windows 'bots weren't building.)
> 
> -Hyrum

Thanks for cleaning up after me, guys.  Sorry about the mess.

Re: svn commit: r1037738 - in /subversion/trunk/subversion: include/ libsvn_client/ svn/ tests/cmdline/ tests/cmdline/svntest/

Posted by "Hyrum K. Wright" <hy...@mail.utexas.edu>.
On Mon, Nov 22, 2010 at 7:10 PM, Daniel Shahaf <d....@daniel.shahaf.name> wrote:
> cmpilato@apache.org wrote on Mon, Nov 22, 2010 at 14:42:06 -0000:
>> +++ subversion/trunk/subversion/svn/update-cmd.c Mon Nov 22 14:42:05 2010
>> @@ -39,6 +39,42 @@
>>
>>  /*** Code. ***/
>>
>> +/* Print an update summary when there's more than one target to report
>> +   about. */
>> +static svn_error_t *
>> +print_update_summary(apr_array_header_t *targets,
>> +                     apr_array_header_t *result_revs,
>> +                     apr_pool_t *scratch_pool)
>> +{
>> +  int i;
>> +
>> +  if (targets->nelts < 2)
>> +    return SVN_NO_ERROR;
>> +
>> +  SVN_ERR(svn_cmdline_printf(scratch_pool, _("Summary of updates:\n")));
>> +
>> +  for (i = 0; i < targets->nelts; i++)
>> +    {
>> +      const char *path = APR_ARRAY_IDX(targets, i, const char *);
>> +
>> +      if (i < result_revs->nelts)
>> +        {
>> +          svn_revnum_t rev = APR_ARRAY_IDX(result_revs, i, const char *);
>> +
>
> subversion/svn/update-cmd.c: In function ‘print_update_summary’:
> subversion/svn/update-cmd.c:62: warning: initialization makes integer from pointer without a cast

I fixed this last night.  (Hadn't seen the review, but noticed the
Windows 'bots weren't building.)

-Hyrum

Re: svn commit: r1037738 - in /subversion/trunk/subversion: include/ libsvn_client/ svn/ tests/cmdline/ tests/cmdline/svntest/

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
cmpilato@apache.org wrote on Mon, Nov 22, 2010 at 14:42:06 -0000:
> +++ subversion/trunk/subversion/svn/update-cmd.c Mon Nov 22 14:42:05 2010
> @@ -39,6 +39,42 @@
>  
>  /*** Code. ***/
>  
> +/* Print an update summary when there's more than one target to report
> +   about. */
> +static svn_error_t *
> +print_update_summary(apr_array_header_t *targets,
> +                     apr_array_header_t *result_revs,
> +                     apr_pool_t *scratch_pool)
> +{
> +  int i;
> +
> +  if (targets->nelts < 2)
> +    return SVN_NO_ERROR;
> +
> +  SVN_ERR(svn_cmdline_printf(scratch_pool, _("Summary of updates:\n")));
> +
> +  for (i = 0; i < targets->nelts; i++)
> +    {
> +      const char *path = APR_ARRAY_IDX(targets, i, const char *);
> +      
> +      if (i < result_revs->nelts)
> +        {
> +          svn_revnum_t rev = APR_ARRAY_IDX(result_revs, i, const char *);
> +

subversion/svn/update-cmd.c: In function ‘print_update_summary’:
subversion/svn/update-cmd.c:62: warning: initialization makes integer from pointer without a cast

Re: svn commit: r1037738 - in /subversion/trunk/subversion: include/ libsvn_client/ svn/ tests/cmdline/ tests/cmdline/svntest/

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
cmpilato@apache.org wrote on Mon, Nov 22, 2010 at 14:42:06 -0000:
> +++ subversion/trunk/subversion/svn/update-cmd.c Mon Nov 22 14:42:05 2010
> @@ -39,6 +39,42 @@
>  
>  /*** Code. ***/
>  
> +/* Print an update summary when there's more than one target to report
> +   about. */
> +static svn_error_t *
> +print_update_summary(apr_array_header_t *targets,
> +                     apr_array_header_t *result_revs,
> +                     apr_pool_t *scratch_pool)
> +{
> +  int i;
> +
> +  if (targets->nelts < 2)
> +    return SVN_NO_ERROR;
> +
> +  SVN_ERR(svn_cmdline_printf(scratch_pool, _("Summary of updates:\n")));
> +
> +  for (i = 0; i < targets->nelts; i++)
> +    {
> +      const char *path = APR_ARRAY_IDX(targets, i, const char *);
> +      
> +      if (i < result_revs->nelts)
> +        {
> +          svn_revnum_t rev = APR_ARRAY_IDX(result_revs, i, const char *);
> +

subversion/svn/update-cmd.c: In function ‘print_update_summary’:
subversion/svn/update-cmd.c:62: warning: initialization makes integer from pointer without a cast

Re: svn commit: r1037738 - "Summary of updates"

Posted by Stefan Sperling <st...@elego.de>.
On Mon, Nov 29, 2010 at 02:17:13PM -0500, C. Michael Pilato wrote:
> Not necessarily anything more.  I mean, test expectations reflect, to some
> degree, the expectations of Subversion users wrapping the command-line for
> output parsing.  I sense we're cool with some sane amount of change in that
> output so as to make the tool better without completely breaking the world.
>  :-)  ('Cause if we're cool with breaking the world, I have quite a few
> changes in mind that I'd like to make to the output!)

I've said this before, but, yes, break the world.
I'd say just propose these changes. I think we can afford to break compat in
the CLI output. The CLI is for interactive use. People can script against
it, sure. But they should be using XML output where possible, or use the
bindings, if they rely on their scripts for production rather than quick
run-once-and-throw-away hacks.

Stefan

Re: svn commit: r1037738 - "Summary of updates"

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
C. Michael Pilato wrote on Mon, Nov 29, 2010 at 14:17:13 -0500:
> On 11/26/2010 01:01 AM, Daniel Shahaf wrote:
> > Thanks for this :-).  It works as expected when the current directory is
> > entered by its name, but not when it's entered through a symlink:
> > 
> > [[[
> > % cd /tmp
> > 
> > % ln -s wc1 wcalias
> > 
> > % cd wc1
> > 
> > % $svn up /tmp/wc1/trunk/iota
> > Updating 'trunk/iota' ...
> > 
> > % cd /tmp/wcalias
> > 
> > % $svn up /tmp/wc1/trunk/iota11D
> > Updating 'trunk/iota' ...
> > 
> > % $svn up /tmp/wcalias/trunk/iota
> > Updating '/tmp/wcalias/trunk/iota' ...
> > ]]]
> > 
> > 
> > Ideally, the last output would have used the relative path 'trunk/iota',
> > too.  However, I'm not sure how to easily solve that --- is it as easy
> > as calling some "resolve symlinks" function on the absolute-cwd string?
> 
> Do we have a "resolve symlinks" function?

I don't see anything in APR or in svn_io.h.  Can we use realpath(3)?  Or
should we roll our own?

Daniel
(I rolled a prototype here)

Re: svn commit: r1037738 - "Summary of updates"

Posted by "C. Michael Pilato" <cm...@collab.net>.
On 11/26/2010 01:01 AM, Daniel Shahaf wrote:
> Thanks for this :-).  It works as expected when the current directory is
> entered by its name, but not when it's entered through a symlink:
> 
> [[[
> % cd /tmp
> 
> % ln -s wc1 wcalias
> 
> % cd wc1
> 
> % $svn up /tmp/wc1/trunk/iota
> Updating 'trunk/iota' ...
> 
> % cd /tmp/wcalias
> 
> % $svn up /tmp/wc1/trunk/iota11D
> Updating 'trunk/iota' ...
> 
> % $svn up /tmp/wcalias/trunk/iota
> Updating '/tmp/wcalias/trunk/iota' ...
> ]]]
> 
> 
> Ideally, the last output would have used the relative path 'trunk/iota',
> too.  However, I'm not sure how to easily solve that --- is it as easy
> as calling some "resolve symlinks" function on the absolute-cwd string?

Do we have a "resolve symlinks" function?

>> I'm wondering what would happen -- that is, how
>> much chaos would ensue -- if we changed subversion/svn/notify.c:notify() to,
>> in the case where n->path is not a URL, always first convert n->path to an
>> absolute path before doing the prefix removal stuff.
> 
> What chaos could ensure?  Just N+1 test expectations, or something more?

Not necessarily anything more.  I mean, test expectations reflect, to some
degree, the expectations of Subversion users wrapping the command-line for
output parsing.  I sense we're cool with some sane amount of change in that
output so as to make the tool better without completely breaking the world.
 :-)  ('Cause if we're cool with breaking the world, I have quite a few
changes in mind that I'd like to make to the output!)

-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand

Re: svn commit: r1037738 - "Summary of updates"

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
C. Michael Pilato wrote on Thu, Nov 25, 2010 at 10:33:37 -0500:
> On 11/25/2010 05:07 AM, Daniel Shahaf wrote:
> > C. Michael Pilato wrote on Wed, Nov 24, 2010 at 13:42:09 -0500:
> >>     when the targets are in or under ${CWD}, absolute paths otherwise, which
> >>     is the typical behavior of the command-line client notification code.)
> > 
> > But what if the user specified a target, which is under `pwd`, using an
> > absolute path?  Do we want to notify this using an absolute path or
> > a relative path?
> > 
> > If we go with "make it absolute whenever it's outside cwd", then I think
> > that (as you suggest, but not necessarily as it works right now) it
> > makes sense to also do the opposite --- convert abspath to cwd-relative
> > path if they happen to be under cwd.
> 
> I agree.  I (think) I've done this in r1039072.
> 

Thanks for this :-).  It works as expected when the current directory is
entered by its name, but not when it's entered through a symlink:

[[[
% cd /tmp

% ln -s wc1 wcalias

% cd wc1

% $svn up /tmp/wc1/trunk/iota
Updating 'trunk/iota' ...

% cd /tmp/wcalias

% $svn up /tmp/wc1/trunk/iota11D
Updating 'trunk/iota' ...

% $svn up /tmp/wcalias/trunk/iota
Updating '/tmp/wcalias/trunk/iota' ...
]]]


Ideally, the last output would have used the relative path 'trunk/iota',
too.  However, I'm not sure how to easily solve that --- is it as easy
as calling some "resolve symlinks" function on the absolute-cwd string?



> >> 2.  Should "Skipped" items follow suit?  (I say, "yes").
> > 
> > +1
> 
> I did *not* do this yet.  Right now, we get a mix of absolute and relative
> paths passed through the notification system by client layer.  I'm not
> convinced (at all!) that this "mix" has been well-thought-out.  I suspect
> it's just in whatever state naturally evolved from our internal conversion
> to abspaths everywhere.

> I'm wondering what would happen -- that is, how
> much chaos would ensue -- if we changed subversion/svn/notify.c:notify() to,
> in the case where n->path is not a URL, always first convert n->path to an
> absolute path before doing the prefix removal stuff.
> 

What chaos could ensure?  Just N+1 test expectations, or something more?

> -- 
> C. Michael Pilato <cm...@collab.net>
> CollabNet   <>   www.collab.net   <>   Distributed Development On Demand

Re: svn commit: r1037738 - "Summary of updates"

Posted by "C. Michael Pilato" <cm...@collab.net>.
On 11/25/2010 05:07 AM, Daniel Shahaf wrote:
> C. Michael Pilato wrote on Wed, Nov 24, 2010 at 13:42:09 -0500:
>>     when the targets are in or under ${CWD}, absolute paths otherwise, which
>>     is the typical behavior of the command-line client notification code.)
> 
> But what if the user specified a target, which is under `pwd`, using an
> absolute path?  Do we want to notify this using an absolute path or
> a relative path?
> 
> If we go with "make it absolute whenever it's outside cwd", then I think
> that (as you suggest, but not necessarily as it works right now) it
> makes sense to also do the opposite --- convert abspath to cwd-relative
> path if they happen to be under cwd.

I agree.  I (think) I've done this in r1039072.

>> 2.  Should "Skipped" items follow suit?  (I say, "yes").
> 
> +1

I did *not* do this yet.  Right now, we get a mix of absolute and relative
paths passed through the notification system by client layer.  I'm not
convinced (at all!) that this "mix" has been well-thought-out.  I suspect
it's just in whatever state naturally evolved from our internal conversion
to abspaths everywhere.  I'm wondering what would happen -- that is, how
much chaos would ensue -- if we changed subversion/svn/notify.c:notify() to,
in the case where n->path is not a URL, always first convert n->path to an
absolute path before doing the prefix removal stuff.

-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand

Re: svn commit: r1037738 - "Summary of updates"

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
C. Michael Pilato wrote on Wed, Nov 24, 2010 at 13:42:09 -0500:
> On 11/24/2010 01:12 PM, Julian Foad wrote:
> >> C. Michael Pilato wrote on Wed, Nov 24, 2010 at 10:36:31 -0500:
> >>> On 11/24/2010 05:41 AM, Julian Foad wrote:
> >>>> Sometimes the summary prints the abspath instead of the relpath
> >>>> specified on the command line.  Specifically, this happens if you
> >>>> specify a changelist.
> > 
> > C-Mike wrote:
> >> r1038650
> > 
> > Thanks, that looks good.
> > 
> > Daniel Shahaf wrote:
> >> Another case (with current HEAD, i.e., after the changelist patch):
> >>
> >> % $svn up  ../t2
> >> Updating '/home/daniel/src/svn/t2' ...
> >> ^C
> > 
> > That's a slightly different issue, the handling of "..".  A more
> > comprehensive transcript:
> > 
> > $ svn up ../readme.txt ../subversion-b
> > Skipped '../readme.txt'
> > Updating '/home/julianfoad/src/subversion-b' ...
> > G    /home/julianfoad/src/subversion-b/subversion/libsvn_subr/dirent_uri.c
> > Updated to revision 1038733.
> > Summary of updates:
> >   Updated '../subversion-b' to r1038733.
> > Summary of conflicts:
> >   Skipped paths: 1
> 
> So, I have a pair of questions:
> 
> 1.  Given the option of displaying either "../subversion-b" or
>     "/home/julianfoad/src/subversion-b", which is preferred?   NOTE that we

In general I think it's nice to preserve the relative path.

>     probably do *not* reasonably have that choice because at some point
>     we'll have converted into an abspath internally, and IMO it just isn't
>     worth it to pass around both an original path-as-the-user-specified-it
>     and the normalized abspath.  (I believe we should use relative paths

I'm not sure where the conversion to abspath occurs relative to
the generation of notifications, but I see what you mean.

>     when the targets are in or under ${CWD}, absolute paths otherwise, which
>     is the typical behavior of the command-line client notification code.)
> 

But what if the user specified a target, which is under `pwd`, using an
absolute path?  Do we want to notify this using an absolute path or
a relative path?

If we go with "make it absolute whenever it's outside cwd", then I think
that (as you suggest, but not necessarily as it works right now) it
makes sense to also do the opposite --- convert abspath to cwd-relative
path if they happen to be under cwd.

> 2.  Should "Skipped" items follow suit?  (I say, "yes").
> 

+1

> -- 
> C. Michael Pilato <cm...@collab.net>
> CollabNet   <>   www.collab.net   <>   Distributed Development On Demand
> 


Re: svn commit: r1037738 - "Summary of updates"

Posted by "C. Michael Pilato" <cm...@collab.net>.
On 11/24/2010 01:12 PM, Julian Foad wrote:
>> C. Michael Pilato wrote on Wed, Nov 24, 2010 at 10:36:31 -0500:
>>> On 11/24/2010 05:41 AM, Julian Foad wrote:
>>>> Sometimes the summary prints the abspath instead of the relpath
>>>> specified on the command line.  Specifically, this happens if you
>>>> specify a changelist.
> 
> C-Mike wrote:
>> r1038650
> 
> Thanks, that looks good.
> 
> Daniel Shahaf wrote:
>> Another case (with current HEAD, i.e., after the changelist patch):
>>
>> % $svn up  ../t2
>> Updating '/home/daniel/src/svn/t2' ...
>> ^C
> 
> That's a slightly different issue, the handling of "..".  A more
> comprehensive transcript:
> 
> $ svn up ../readme.txt ../subversion-b
> Skipped '../readme.txt'
> Updating '/home/julianfoad/src/subversion-b' ...
> G    /home/julianfoad/src/subversion-b/subversion/libsvn_subr/dirent_uri.c
> Updated to revision 1038733.
> Summary of updates:
>   Updated '../subversion-b' to r1038733.
> Summary of conflicts:
>   Skipped paths: 1

So, I have a pair of questions:

1.  Given the option of displaying either "../subversion-b" or
    "/home/julianfoad/src/subversion-b", which is preferred?   NOTE that we
    probably do *not* reasonably have that choice because at some point
    we'll have converted into an abspath internally, and IMO it just isn't
    worth it to pass around both an original path-as-the-user-specified-it
    and the normalized abspath.  (I believe we should use relative paths
    when the targets are in or under ${CWD}, absolute paths otherwise, which
    is the typical behavior of the command-line client notification code.)

2.  Should "Skipped" items follow suit?  (I say, "yes").

-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand


Re: svn commit: r1037738 - "Summary of updates"

Posted by Julian Foad <ju...@wandisco.com>.
> C. Michael Pilato wrote on Wed, Nov 24, 2010 at 10:36:31 -0500:
> > On 11/24/2010 05:41 AM, Julian Foad wrote:
> > > Sometimes the summary prints the abspath instead of the relpath
> > > specified on the command line.  Specifically, this happens if you
> > > specify a changelist.

C-Mike wrote:
> r1038650

Thanks, that looks good.

Daniel Shahaf wrote:
> Another case (with current HEAD, i.e., after the changelist patch):
> 
> % $svn up  ../t2
> Updating '/home/daniel/src/svn/t2' ...
> ^C

That's a slightly different issue, the handling of "..".  A more
comprehensive transcript:

$ svn up ../readme.txt ../subversion-b
Skipped '../readme.txt'
Updating '/home/julianfoad/src/subversion-b' ...
G    /home/julianfoad/src/subversion-b/subversion/libsvn_subr/dirent_uri.c
Updated to revision 1038733.
Summary of updates:
  Updated '../subversion-b' to r1038733.
Summary of conflicts:
  Skipped paths: 1


- Julian


Re: svn commit: r1037738 - "Summary of updates"

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
C. Michael Pilato wrote on Wed, Nov 24, 2010 at 10:36:31 -0500:
> On 11/24/2010 05:41 AM, Julian Foad wrote:
> > On Mon, 2010-11-22, cmpilato@apache.org wrote:
> >> Issue #3693 - Multi-target update output is quite confusing.
> >>
> >> Add notifications at the start of each performed update, and a summary
> >> at the end of the whole mess.
> > 
> > Hi Mike.  I like the direction of this.
> > 
> > Sometimes the summary prints the abspath instead of the relpath
> > specified on the command line.  Specifically, this happens if you
> > specify a changelist.
> 

Another case (with current HEAD, i.e., after the changelist patch):

% $svn up  ../t2
Updating '/home/daniel/src/svn/t2' ...
^C

> Thanks, Julian.  I'll look into this.
> 
> -- 
> C. Michael Pilato <cm...@collab.net>
> CollabNet   <>   www.collab.net   <>   Distributed Development On Demand
> 


Re: svn commit: r1037738 - "Summary of updates"

Posted by "C. Michael Pilato" <cm...@collab.net>.
On 11/24/2010 10:36 AM, C. Michael Pilato wrote:
> On 11/24/2010 05:41 AM, Julian Foad wrote:
>> On Mon, 2010-11-22, cmpilato@apache.org wrote:
>>> Issue #3693 - Multi-target update output is quite confusing.
>>>
>>> Add notifications at the start of each performed update, and a summary
>>> at the end of the whole mess.
>>
>> Hi Mike.  I like the direction of this.
>>
>> Sometimes the summary prints the abspath instead of the relpath
>> specified on the command line.  Specifically, this happens if you
>> specify a changelist.
> 
> Thanks, Julian.  I'll look into this.

r1038650

-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand


Re: svn commit: r1037738 - "Summary of updates"

Posted by "C. Michael Pilato" <cm...@collab.net>.
On 11/24/2010 05:41 AM, Julian Foad wrote:
> On Mon, 2010-11-22, cmpilato@apache.org wrote:
>> Issue #3693 - Multi-target update output is quite confusing.
>>
>> Add notifications at the start of each performed update, and a summary
>> at the end of the whole mess.
> 
> Hi Mike.  I like the direction of this.
> 
> Sometimes the summary prints the abspath instead of the relpath
> specified on the command line.  Specifically, this happens if you
> specify a changelist.

Thanks, Julian.  I'll look into this.

-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand


Re: svn commit: r1037738 - "Summary of updates"

Posted by Julian Foad <ju...@wandisco.com>.
On Mon, 2010-11-22, cmpilato@apache.org wrote:
> Issue #3693 - Multi-target update output is quite confusing.
> 
> Add notifications at the start of each performed update, and a summary
> at the end of the whole mess.

Hi Mike.  I like the direction of this.

Sometimes the summary prints the abspath instead of the relpath
specified on the command line.  Specifically, this happens if you
specify a changelist.  However, the "Updating..." line manages to print
the relpath.  In the following transcript, the debug marked (1) shows
targets[0] near the start of svn_cl__update(), and (2) shows that
targets[0] has been converted to an abspath after changelist processing.

[[[
$ ~/src/subversion-c/subversion/tests/cmdline/changelist_tests.py
--bin=/home/julianfoad/src/subversion-c/bin 8
PASS:  changelist_tests.py 8: update --changelist

julianfoad@edith ~/src/subversion-c/obj-dir/subversion/tests/cmdline
$ svn up -r1 svn-test-work/working_copies/changelist_tests-8/A/muDBG:
update-cmd.c:  95: (1)
'svn-test-work/working_copies/changelist_tests-8/A/mu'
DBG: update-cmd.c: 133: (2)
'svn-test-work/working_copies/changelist_tests-8/A/mu'
Updating 'svn-test-work/working_copies/changelist_tests-8/A/mu' ...
U    svn-test-work/working_copies/changelist_tests-8/A/mu
Updated to revision 1.

julianfoad@edith ~/src/subversion-c/obj-dir/subversion/tests/cmdline
$ svn up --cl u svn-test-work/working_copies/changelist_tests-8/DBG:
update-cmd.c:  95: (1) 'svn-test-work/working_copies/changelist_tests-8'
DBG: update-cmd.c: 133: (2)
'/home/julianfoad/build/subversion-c/subversion/tests/cmdline/svn-test-work/working_copies/changelist_tests-8/A/mu'
Updating 'svn-test-work/working_copies/changelist_tests-8/A/mu' ...
U    svn-test-work/working_copies/changelist_tests-8/A/mu
Updated to revision 2.
Updating 'svn-test-work/working_copies/changelist_tests-8/A/D/G/tau' ...
Updated to revision 2.
Summary of updates:
  Updated
'/home/julianfoad/build/subversion-c/subversion/tests/cmdline/svn-test-work/working_copies/changelist_tests-8/A/mu' to r2.
  Updated
'/home/julianfoad/build/subversion-c/subversion/tests/cmdline/svn-test-work/working_copies/changelist_tests-8/A/D/G/tau' to r2.
]]]

- Julian