Dear Patch Manager,

 
i would like to submit the attached patch. When comparing tags/branches with 
trunk it is very useful to see which branch has actually been modified. The 
original implementation shows always the left side of the comparison as 
modified. The above patch displays at least the left and right revision numbers 
so that is easier to localize changes in the repository.

 
I hope you will find this contribution as useful.

 
With kind regards,

 
Peter Nagy (from Budapest)

Index: subversion/include/svn_client.h
===================================================================
--- subversion/include/svn_client.h     (revision 1819572)
+++ subversion/include/svn_client.h     (working copy)
@@ -46,6 +46,7 @@
 #include "svn_ra.h"
 #include "svn_diff.h"
 #include "svn_auth.h"
+#include "private/svn_wc_private.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -870,6 +871,10 @@ typedef struct svn_client_diff_summarize_t
 
   /** File or dir */
   svn_node_kind_t node_kind;
+
+  /** For beeing able to display revision numbers */
+  svn_diff_source_t *left_source;
+  svn_diff_source_t *right_source;
 } svn_client_diff_summarize_t;
 
 /**
Index: subversion/libsvn_client/diff_summarize.c
===================================================================
--- subversion/libsvn_client/diff_summarize.c   (revision 1819572)
+++ subversion/libsvn_client/diff_summarize.c   (working copy)
@@ -55,6 +55,8 @@ struct summarize_baton_t {
 static svn_error_t *
 send_summary(struct summarize_baton_t *b,
              const char *path,
+             const svn_diff_source_t *left_source,
+             const svn_diff_source_t *right_source,
              svn_client_diff_summarize_kind_t summarize_kind,
              svn_boolean_t prop_changed,
              svn_node_kind_t node_kind,
@@ -73,6 +75,8 @@ send_summary(struct summarize_baton_t *b,
       || summarize_kind == svn_client_diff_summarize_kind_normal)
     sum->prop_changed = prop_changed;
   sum->node_kind = node_kind;
+  sum->left_source = left_source;
+  sum->right_source = right_source;
 
   SVN_ERR(b->summarize_func(sum, b->summarize_func_baton, scratch_pool));
   return SVN_NO_ERROR;
@@ -153,7 +157,7 @@ diff_dir_changed(const char *relpath,
 {
   struct summarize_baton_t *b = processor->baton;
 
-  SVN_ERR(send_summary(b, relpath, svn_client_diff_summarize_kind_normal,
+  SVN_ERR(send_summary(b, relpath, left_source, right_source, 
svn_client_diff_summarize_kind_normal,
                        TRUE, svn_node_dir, scratch_pool));
 
   return SVN_NO_ERROR;
@@ -173,7 +177,7 @@ diff_dir_added(const char *relpath,
   struct summarize_baton_t *b = processor->baton;
 
   /* ### Send from dir_opened without prop info? */
-  SVN_ERR(send_summary(b, relpath, svn_client_diff_summarize_kind_added,
+  SVN_ERR(send_summary(b, relpath, copyfrom_source, right_source, 
svn_client_diff_summarize_kind_added,
                        props_changed_hash(right_props, scratch_pool),
                        svn_node_dir, scratch_pool));
 
@@ -191,7 +195,7 @@ diff_dir_deleted(const char *relpath,
 {
   struct summarize_baton_t *b = processor->baton;
 
-  SVN_ERR(send_summary(b, relpath, svn_client_diff_summarize_kind_deleted,
+  SVN_ERR(send_summary(b, relpath, left_source, NULL, 
svn_client_diff_summarize_kind_deleted,
                        FALSE, svn_node_dir, scratch_pool));
 
   return SVN_NO_ERROR;
@@ -212,7 +216,7 @@ diff_file_added(const char *relpath,
 {
   struct summarize_baton_t *b = processor->baton;
 
-  SVN_ERR(send_summary(b, relpath, svn_client_diff_summarize_kind_added,
+  SVN_ERR(send_summary(b, relpath, copyfrom_source, right_source, 
svn_client_diff_summarize_kind_added,
                        props_changed_hash(right_props, scratch_pool),
                        svn_node_file, scratch_pool));
 
@@ -236,7 +240,7 @@ diff_file_changed(const char *relpath,
 {
   struct summarize_baton_t *b = processor->baton;
 
-  SVN_ERR(send_summary(b, relpath,
+  SVN_ERR(send_summary(b, relpath, left_source, right_source,
                        file_modified ? svn_client_diff_summarize_kind_modified
                                      : svn_client_diff_summarize_kind_normal,
                        props_changed(prop_changes, scratch_pool),
@@ -257,7 +261,7 @@ diff_file_deleted(const char *relpath,
 {
   struct summarize_baton_t *b = processor->baton;
 
-  SVN_ERR(send_summary(b, relpath, svn_client_diff_summarize_kind_deleted,
+  SVN_ERR(send_summary(b, relpath, left_source, NULL, 
svn_client_diff_summarize_kind_deleted,
                        FALSE, svn_node_file, scratch_pool));
 
   return SVN_NO_ERROR;
Index: subversion/svn/diff-cmd.c
===================================================================
--- subversion/svn/diff-cmd.c   (revision 1819572)
+++ subversion/svn/diff-cmd.c   (working copy)
@@ -170,14 +170,23 @@ summarize_regular(const svn_client_diff_summarize_
    *       thus the blank spaces where information that is not relevant to
    *       a diff summary would go. */
 
-  prop_change = summary->prop_changed ? 'M' : ' ';
+  prop_change = summary->prop_changed ? 'P' : ' ';
   if (b->ignore_properties)
     prop_change = ' ';
 
+  /* original
   SVN_ERR(svn_cmdline_printf(pool, "%c%c      %s\n",
                              kind_to_char(summary->summarize_kind),
                              prop_change, path));
+  */
 
+  SVN_ERR(svn_cmdline_printf(pool, "%c%c      %-60s | %10d | %10d |\n",
+                             kind_to_char(summary->summarize_kind),
+                             prop_change, summary->path, 
+                             summary->left_source != NULL ? 
summary->left_source->revision : -1,
+                             summary->right_source != NULL ? 
summary->right_source->revision : -1
+                             ));
+
   return svn_cmdline_fflush(stdout);
 }
 

Reply via email to