Author: stefan2
Date: Mon May 16 14:28:45 2011
New Revision: 1103749

URL: http://svn.apache.org/viewvc?rev=1103749&view=rev
Log:
SVN status will try to read the .format file for every folder in
the working copy.  That is very expensive, so do a stat call
to check whether the .format file exists - which it won't for
wc-ng w/cs.

* subversion/libsvn_wc/wc_db_wcroot.c
  (get_old_version): early exit upon failed stat

Modified:
    subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c

Modified: subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c?rev=1103749&r1=1103748&r2=1103749&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c Mon May 16 14:28:45 
2011
@@ -50,10 +50,21 @@ get_old_version(int *version,
 {
   svn_error_t *err;
   const char *format_file_path;
+  svn_node_kind_t kind;
 
   /* Try reading the format number from the entries file.  */
   format_file_path = svn_wc__adm_child(abspath, SVN_WC__ADM_ENTRIES,
                                        scratch_pool);
+  
+  /* Since trying to open a non-existent file is quite expensive, try a
+     quick stat call first. In wc-ng w/cs, this will be an early exit. */
+  SVN_ERR(svn_io_check_path(format_file_path, &kind, scratch_pool));
+  if (kind == svn_node_none)
+    {
+      *version = 0;
+      return SVN_NO_ERROR;
+    }
+  
   err = svn_io_read_version_file(version, format_file_path, scratch_pool);
   if (err == NULL)
     return SVN_NO_ERROR;


Reply via email to