[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

[PATCH] fix conflict stats for externals during update

From: Stefan Sperling <stsp_at_elego.de>
Date: Wed, 24 Feb 2010 00:20:37 +0100

Hi,

conflict stats don't seem to be printed for externals during update.

Running the attached script gives this output at the end:

  + svn up --accept=postpone conflict-stats-externals/trunk2
  C conflict-stats-externals/trunk2/alpha
  
  Fetching external item into 'conflict-stats-externals/trunk2/ext'
  C conflict-stats-externals/trunk2/ext/zeta
  Updated external to revision 5.
  
  Updated to revision 5.
  Summary of conflicts:
    Text conflicts: 1
  + svn st conflict-stats-externals/trunk2
  X conflict-stats-externals/trunk2/ext
  C conflict-stats-externals/trunk2/alpha
  ? conflict-stats-externals/trunk2/alpha.r3
  ? conflict-stats-externals/trunk2/alpha.r5
  ? conflict-stats-externals/trunk2/alpha.mine
  
  Performing status on external item at 'conflict-stats-externals/trunk2/ext'
  C /tmp/conflict-stats-externals/trunk2/ext/zeta
  ? /tmp/conflict-stats-externals/trunk2/ext/zeta.r3
  ? /tmp/conflict-stats-externals/trunk2/ext/zeta.r5
  ? /tmp/conflict-stats-externals/trunk2/ext/zeta.mine
  Summary of conflicts:
    Text conflicts: 2
  
Note how the update never prints a conflict count for the external,
and how its summary only accounts for conflicts which happened outside
the external.
I think the new 'svn status' summary does what we want -- it prints
the summary for the entire operation, including externals.

With the patch below, the update output changes to:

  + svn up --accept=postpone conflict-stats-externals/trunk2
  C conflict-stats-externals/trunk2/alpha
  
  Fetching external item into 'conflict-stats-externals/trunk2/ext'
  C conflict-stats-externals/trunk2/ext/zeta
  Updated external to revision 5.
  
  Updated to revision 5.
  Summary of conflicts:
    Text conflicts: 2

Any objections? Does anyone remember what the rationale was for
treating externals separately?

I haven't run this through make check yet.

Stefan

Index: subversion/svn/notify.c
===================================================================
--- subversion/svn/notify.c (revision 915566)
+++ subversion/svn/notify.c (working copy)
@@ -58,12 +58,6 @@ struct notify_baton
   unsigned int tree_conflicts;
   unsigned int skipped_paths;
 
- /* Conflict stats for update and merge (for externals). */
- unsigned int ext_text_conflicts;
- unsigned int ext_prop_conflicts;
- unsigned int ext_tree_conflicts;
- unsigned int ext_skipped_paths;
-
   /* The cwd, for use in decomposing absolute paths. */
   const char *path_prefix;
 };
@@ -79,22 +73,11 @@ svn_cl__print_conflict_stats(void *notify_baton, a
   unsigned int tree_conflicts;
   unsigned int skipped_paths;
 
- if (nb->in_external)
- {
- header = _("Summary of conflicts in external item:\n");
- text_conflicts = nb->ext_text_conflicts;
- prop_conflicts = nb->ext_prop_conflicts;
- tree_conflicts = nb->ext_tree_conflicts;
- skipped_paths = nb->ext_skipped_paths;
- }
- else
- {
- header = _("Summary of conflicts:\n");
- text_conflicts = nb->text_conflicts;
- prop_conflicts = nb->prop_conflicts;
- tree_conflicts = nb->tree_conflicts;
- skipped_paths = nb->skipped_paths;
- }
+ header = _("Summary of conflicts:\n");
+ text_conflicts = nb->text_conflicts;
+ prop_conflicts = nb->prop_conflicts;
+ tree_conflicts = nb->tree_conflicts;
+ skipped_paths = nb->skipped_paths;
 
   if (text_conflicts > 0 || prop_conflicts > 0
     || tree_conflicts > 0 || skipped_paths > 0)
@@ -146,8 +129,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_
   switch (n->action)
     {
     case svn_wc_notify_skip:
- nb->in_external ? nb->ext_skipped_paths++
- : nb->skipped_paths++;
+ nb->skipped_paths++;
       if (n->content_state == svn_wc_notify_state_missing)
         {
           if ((err = svn_cmdline_printf
@@ -194,8 +176,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_
       nb->received_some_change = TRUE;
       if (n->content_state == svn_wc_notify_state_conflicted)
         {
- nb->in_external ? nb->ext_text_conflicts++
- : nb->text_conflicts++;
+ nb->text_conflicts++;
           if ((err = svn_cmdline_printf(pool, "C %s\n", path_local)))
             goto print_error;
         }
@@ -210,8 +191,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_
       nb->received_some_change = TRUE;
       if (n->content_state == svn_wc_notify_state_conflicted)
         {
- nb->in_external ? nb->ext_text_conflicts++
- : nb->text_conflicts++;
+ nb->text_conflicts++;
           statchar_buf[0] = 'C';
         }
       else
@@ -219,8 +199,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_
 
       if (n->prop_state == svn_wc_notify_state_conflicted)
         {
- nb->in_external ? nb->ext_prop_conflicts++
- : nb->prop_conflicts++;
+ nb->prop_conflicts++;
           statchar_buf[1] = 'C';
         }
       else if (n->prop_state == svn_wc_notify_state_merged)
@@ -286,8 +265,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_
         nb->received_some_change = TRUE;
         if (n->content_state == svn_wc_notify_state_conflicted)
           {
- nb->in_external ? nb->ext_text_conflicts++
- : nb->text_conflicts++;
+ nb->text_conflicts++;
             statchar_buf[0] = 'C';
           }
         else if (n->kind == svn_node_file)
@@ -391,8 +369,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_
       {
         if (n->content_state == svn_wc_notify_state_conflicted)
           {
- nb->in_external ? nb->ext_text_conflicts++
- : nb->text_conflicts++;
+ nb->text_conflicts++;
             statchar_buf[0] = 'C';
           }
         else if (n->kind == svn_node_file)
@@ -405,8 +382,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_
 
         if (n->prop_state == svn_wc_notify_state_conflicted)
           {
- nb->in_external ? nb->ext_prop_conflicts++
- : nb->prop_conflicts++;
+ nb->prop_conflicts++;
             statchar_buf[1] = 'C';
           }
         else if (n->prop_state == svn_wc_notify_state_merged)
@@ -451,8 +427,6 @@ notify(void *baton, const svn_wc_notify_t *n, apr_
         {
           svn_handle_warning2(stderr, n->err, "svn: ");
           nb->in_external = FALSE;
- nb->ext_text_conflicts = nb->ext_prop_conflicts
- = nb->ext_tree_conflicts = nb->ext_skipped_paths = 0;
           if ((err = svn_cmdline_printf(pool, "\n")))
             goto print_error;
         }
@@ -768,8 +742,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_
       break;
 
     case svn_wc_notify_tree_conflict:
- nb->in_external ? nb->ext_tree_conflicts++
- : nb->tree_conflicts++;
+ nb->tree_conflicts++;
       if ((err = svn_cmdline_printf(pool, " C %s\n", path_local)))
         goto print_error;
       break;
@@ -856,10 +829,6 @@ svn_cl__get_notifier(svn_wc_notify_func2_t *notify
   nb->prop_conflicts = 0;
   nb->tree_conflicts = 0;
   nb->skipped_paths = 0;
- nb->ext_text_conflicts = 0;
- nb->ext_prop_conflicts = 0;
- nb->ext_tree_conflicts = 0;
- nb->ext_skipped_paths = 0;
   SVN_ERR(svn_dirent_get_absolute(&nb->path_prefix, "", pool));
 
   *notify_func_p = notify;

Received on 2010-02-24 00:21:01 CET

This is an archived mail posted to the Subversion Dev mailing list.