You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2011/08/16 12:33:06 UTC
svn commit: r1158187 - /subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c
Author: rhuijben
Date: Tue Aug 16 10:33:06 2011
New Revision: 1158187
URL: http://svn.apache.org/viewvc?rev=1158187&view=rev
Log:
Resolve a few related issues (issue #2557, #3987) that all occur because we
assumed that a directly referenced symlink is never a working copy root, while
-as these issues show- it can be.
* subversion/libsvn_wc/wc_db_wcroot.c
(get_path_kind): Reorder arguments to match convention. Set kind to directory
for symlinks to check them to be a working copy root.
(svn_wc__db_wcroot_parse_local_abspath): Update caller.
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=1158187&r1=1158186&r2=1158187&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c Tue Aug 16 10:33:06 2011
@@ -100,11 +100,13 @@ get_old_version(int *version,
of LOCAL_ABSPATH, using DB and SCRATCH_POOL as needed.
This function may do strange things, but at long as it comes up with the
- Right Answer, we should be happy. */
+ Right Answer, we should be happy.
+
+ Sets *KIND to svn_node_dir for symlinks. */
static svn_error_t *
-get_path_kind(svn_wc__db_t *db,
+get_path_kind(svn_node_kind_t *kind,
+ svn_wc__db_t *db,
const char *local_abspath,
- svn_node_kind_t *kind,
apr_pool_t *scratch_pool)
{
svn_boolean_t special;
@@ -132,7 +134,11 @@ get_path_kind(svn_wc__db_t *db,
}
SVN_ERR(svn_io_check_special_path(local_abspath, &db->parse_cache.kind,
- &special /* unused */, scratch_pool));
+ &special, scratch_pool));
+
+ /* The wcroot could be a symlink to a directory. (Issue #2557, #3987) */
+ if (special)
+ db->parse_cache.kind = svn_node_dir;
*kind = db->parse_cache.kind;
return SVN_NO_ERROR;
@@ -395,7 +401,7 @@ svn_wc__db_wcroot_parse_local_abspath(sv
### rid of this stat() call. it is going to happen for EVERY call
### into wc_db which references a file. calls for directories could
### get an early-exit in the hash lookup just above. */
- SVN_ERR(get_path_kind(db, local_abspath, &kind, scratch_pool));
+ SVN_ERR(get_path_kind(&kind, db, local_abspath, scratch_pool));
if (kind != svn_node_dir)
{
/* If the node specified by the path is NOT present, then it cannot