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

[PATCH] prevent diff from extra/waste processing

From: Charles Acknin <charlesacknin_at_gmail.com>
Date: 2007-03-27 23:07:23 CEST

Hi,

Daniel and I had a little talk on #svn-dev about something that seemed
a bit weird in libsvn_wc/diff.c I noticed as running within gdb while
writing my GSoC proposal: for single-file diff on WC/WC (e.g. svn
diff foo), directory_elements_diff() would keep looping (line 692, rev
24199) until all files of foo's directory have been processed instead
of breaking when foo is done. Those few lines will ensure we 'break'
when files passed as argument are processed.

[[[
Prevent from some useless processing when performing single-file diff on WC/WC.

* subversion/libsvn_wc/diff.c
  (directory_elements_diff): add a boolean so that we know when the
file passed as argument is diffed
]]]

(a 'goto' statement might be simpler but I'm not sure about 'cleaner' : )

Cheers,

Charles

--- subversion/libsvn_wc/diff.c (revision 24199)
+++ subversion/libsvn_wc/diff.c (working copy)
@@ -697,6 +697,7 @@
       const svn_wc_entry_t *entry;
       struct dir_baton *subdir_baton;
       const char *name, *path;
+ svn_boolean_t file_diffed = FALSE;

       svn_pool_clear(subpool);

@@ -726,6 +727,7 @@
         {
         case svn_node_file:
           SVN_ERR(file_diff(dir_baton, path, entry, subpool));
+ file_diffed = TRUE;
           break;

         case svn_node_dir:
@@ -756,6 +758,9 @@
         default:
           break;
         }
+
+ if (file_diffed)
+ break;
     }

   svn_pool_destroy(subpool);

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Mar 27 23:07:34 2007

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