Log: [[[ Fix issue #2426: revert_tests.py test 1 fails. * subversion/libsvn_wc/adm_files.h * subversion/libsvn_wc/adm_files.c (svn_wc__wcprop_path, svn_wc__prop_path, svn_wc__prop_base_path, svn_wc__prop_revert_path): Change function signature to take an explicitly specified node kind, indicating which property file we want, instead of deducing that from path and adm_access. * subversion/libsvn_wc/props.c * subversion/libsvn_wc/diff.c * subversion/libsvn_wc/copy.c * subversion/libsvn_wc/adm_crawler.c * subversion/libsvn_wc/log.c * subversion/libsvn_wc/adm_ops.c * subversion/libsvn_wc/update_editor.c * subversion/libsvn_wc/questions.c: Adjust callers. ]]] Index: subversion/libsvn_wc/props.c =================================================================== --- subversion/libsvn_wc/props.c (revision 17039) +++ subversion/libsvn_wc/props.c (working copy) @@ -217,9 +217,11 @@ svn_boolean_t is_dir, apr_pool_t *pool) { const char *tmp_path, *tmp_name; + const svn_wc_entry_t *entry; /* Get path to /temporary/ local prop file */ - SVN_ERR (svn_wc__prop_path (&tmp_path, full_path, adm_access, TRUE, pool)); + SVN_ERR (svn_wc_entry (&entry, full_path, adm_access, FALSE, pool)); + SVN_ERR (svn_wc__prop_path (&tmp_path, full_path, entry->kind, TRUE, pool)); /* Reserve a .prej file based on it. */ SVN_ERR (svn_io_open_unique_file (fp, reject_tmp_path, tmp_path, @@ -409,9 +411,11 @@ /* Load the base & working property files into hashes */ working_props = apr_hash_make (pool); base_props = apr_hash_make (pool); - SVN_ERR (svn_wc__prop_path (&local_propfile_path, full_path, adm_access, - FALSE, pool)); - SVN_ERR (svn_wc__prop_base_path (&base_propfile_path, full_path, adm_access, + SVN_ERR (svn_wc__prop_path (&local_propfile_path, full_path, + is_dir ? svn_node_dir : svn_node_file, + FALSE, pool)); + SVN_ERR (svn_wc__prop_base_path (&base_propfile_path, full_path, + is_dir ? svn_node_dir : svn_node_file, FALSE, pool)); SVN_ERR (svn_wc__load_prop_file (base_propfile_path, base_props, pool)); SVN_ERR (svn_wc__load_prop_file (local_propfile_path, working_props, pool)); @@ -590,8 +594,9 @@ paths computed are ABSOLUTE pathnames, which is what our disk routines require.*/ SVN_ERR (svn_wc__prop_path (&local_prop_tmp_path, full_path, - adm_access, TRUE, pool)); - + is_dir ? svn_node_dir : svn_node_file, + TRUE, pool)); + /* Write the merged working prop hash to path/.svn/tmp/props/name or path/.svn/tmp/dir-props */ SVN_ERR (svn_wc__save_prop_file (local_prop_tmp_path, working_props, pool)); @@ -617,7 +622,8 @@ const char *tmp_prop_base, *real_prop_base; SVN_ERR (svn_wc__prop_base_path (&base_prop_tmp_path, full_path, - adm_access, TRUE, pool)); + is_dir ? svn_node_dir : svn_node_file, + TRUE, pool)); SVN_ERR (svn_wc__save_prop_file (base_prop_tmp_path, base_props, pool)); tmp_prop_base = apr_pstrdup (pool, base_prop_tmp_path + access_len); @@ -764,10 +770,12 @@ } /* Get paths to the local and pristine property files. */ - SVN_ERR (svn_wc__prop_path (&local_propfile_path, full_path, adm_access, + SVN_ERR (svn_wc__prop_path (&local_propfile_path, full_path, + is_dir ? svn_node_dir : svn_node_file, FALSE, pool)); - SVN_ERR (svn_wc__prop_base_path (&base_propfile_path, full_path, adm_access, + SVN_ERR (svn_wc__prop_base_path (&base_propfile_path, full_path, + is_dir ? svn_node_dir : svn_node_file, FALSE, pool)); /* Load the base & working property files into hashes */ @@ -893,8 +901,9 @@ paths computed are ABSOLUTE pathnames, which is what our disk routines require.*/ - SVN_ERR (svn_wc__prop_path (&local_prop_tmp_path, full_path, adm_access, TRUE, - pool)); + SVN_ERR (svn_wc__prop_path (&local_prop_tmp_path, full_path, + is_dir ? svn_node_dir : svn_node_file, + TRUE, pool)); /* Write the merged local prop hash to path/.svn/tmp/props/name or path/.svn/tmp/dir-props */ @@ -918,7 +927,8 @@ if (base_merge) { SVN_ERR (svn_wc__prop_base_path (&base_prop_tmp_path, full_path, - adm_access, TRUE, pool)); + is_dir ? svn_node_dir : svn_node_file, + TRUE, pool)); SVN_ERR (svn_wc__save_prop_file (base_prop_tmp_path, basehash, pool)); tmp_prop_base = apr_pstrdup (pool, base_prop_tmp_path + access_len); @@ -1081,7 +1091,8 @@ { svn_node_kind_t kind, pkind; const char *prop_path; - + const svn_wc_entry_t *entry; + *props = apr_hash_make (pool); /* Check validity of PATH */ @@ -1100,10 +1111,11 @@ #endif /* Construct a path to the relevant property file */ - SVN_ERR( svn_wc__wcprop_path (&prop_path, path, adm_access, FALSE, pool) ); + SVN_ERR (svn_wc_entry (&entry, path, adm_access, FALSE, pool)); + SVN_ERR (svn_wc__wcprop_path (&prop_path, path, entry->kind, FALSE, pool)); /* Does the property file exist? */ - SVN_ERR( svn_io_check_path (prop_path, &pkind, pool) ); + SVN_ERR (svn_io_check_path (prop_path, &pkind, pool)); if (pkind == svn_node_none) /* No property file exists. Just go home, with an empty hash. */ @@ -1111,7 +1123,7 @@ /* else... */ - SVN_ERR( svn_wc__load_prop_file (prop_path, *props, pool) ); + SVN_ERR (svn_wc__load_prop_file (prop_path, *props, pool)); return SVN_NO_ERROR; } @@ -1195,12 +1207,20 @@ apr_pool_t *pool) { const char *prop_path; + const svn_wc_entry_t *entry; *props = apr_hash_make (pool); /* Construct a path to the relevant property file */ - SVN_ERR (svn_wc__prop_path (&prop_path, path, adm_access, FALSE, pool)); + SVN_ERR (svn_wc_entry (&entry, path, adm_access, TRUE, pool)); + /* if there is no entry, 'path' is not under version control and + therefore has no props */ + if (! entry) + return SVN_NO_ERROR; + + SVN_ERR (svn_wc__prop_path (&prop_path, path, entry->kind, FALSE, pool)); + /* svn_wc__load_prop_file checks if the prop file exists */ return svn_wc__load_prop_file (prop_path, *props, pool); } @@ -1634,8 +1654,10 @@ { svn_boolean_t is_empty; const char *prop_path; + const svn_wc_entry_t *entry; - SVN_ERR (svn_wc__prop_path (&prop_path, path, adm_access, FALSE, pool)); + SVN_ERR (svn_wc_entry (&entry, path, adm_access, FALSE, pool)); + SVN_ERR (svn_wc__prop_path (&prop_path, path, entry->kind, FALSE, pool)); SVN_ERR (empty_props_p (&is_empty, prop_path, pool)); if (is_empty) @@ -1660,9 +1682,18 @@ const svn_wc_entry_t *entry; apr_pool_t *subpool = svn_pool_create (pool); + SVN_ERR (svn_wc_entry (&entry, path, adm_access, TRUE, subpool)); + + if (! entry) + { + /* There's no entry: the props cannot be modified! */ + *modified_p = FALSE; + goto cleanup; + } + /* First, get the paths of the working and 'base' prop files. */ - SVN_ERR (svn_wc__prop_path (&prop_path, path, adm_access, FALSE, subpool)); - SVN_ERR (svn_wc__prop_base_path (&prop_base_path, path, adm_access, FALSE, + SVN_ERR (svn_wc__prop_path (&prop_path, path, entry->kind, FALSE, subpool)); + SVN_ERR (svn_wc__prop_base_path (&prop_base_path, path, entry->kind, FALSE, subpool)); /* Decide if either path is "empty" of properties. */ @@ -1672,7 +1703,6 @@ /* If something is scheduled for replacement, we do *not* want to pay attention to any base-props; they might be residual from the old deleted file. */ - SVN_ERR (svn_wc_entry (&entry, path, adm_access, TRUE, subpool)); if (entry && (entry->schedule == svn_wc_schedule_replace)) { *modified_p = wempty ? FALSE : TRUE; @@ -1810,12 +1840,13 @@ { const char *prop_path, *prop_base_path; apr_array_header_t *local_propchanges; + const svn_wc_entry_t *entry; apr_hash_t *localprops = apr_hash_make (pool); apr_hash_t *baseprops = apr_hash_make (pool); - - SVN_ERR (svn_wc__prop_path (&prop_path, path, adm_access, FALSE, pool)); - SVN_ERR (svn_wc__prop_base_path (&prop_base_path, path, adm_access, FALSE, + SVN_ERR (svn_wc_entry (&entry, path, adm_access, FALSE, pool)); + SVN_ERR (svn_wc__prop_path (&prop_path, path, entry->kind, FALSE, pool)); + SVN_ERR (svn_wc__prop_base_path (&prop_base_path, path, entry->kind, FALSE, pool)); SVN_ERR (svn_wc__load_prop_file (prop_path, localprops, pool)); Index: subversion/libsvn_wc/diff.c =================================================================== --- subversion/libsvn_wc/diff.c (revision 17039) +++ subversion/libsvn_wc/diff.c (working copy) @@ -351,8 +351,11 @@ /* also notice we're ignoring error here; there's a chance that this path might not exist in the working copy, in which case the baseprops remains an empty hash. */ - svn_error_t *err = svn_wc_prop_list (&(b->baseprops), b->path, - b->edit_baton->anchor, b->pool); + svn_error_t *err = svn_wc_prop_list + (&(b->baseprops), + svn_path_join (svn_wc_adm_access_path (b->edit_baton->anchor), + b->path, b->pool), + b->edit_baton->anchor, b->pool); if (err) svn_error_clear (err); b->fetched_baseprops = TRUE; @@ -384,6 +387,7 @@ apr_pool_t *pool) { const svn_string_t *working_val; + const svn_wc_entry_t *entry; if (working_mimetype) { @@ -432,8 +436,15 @@ const char *props_base_path; apr_hash_t *baseprops = apr_hash_make (pool); - SVN_ERR (svn_wc__prop_base_path (&props_base_path, path, adm_access, - FALSE, pool)); + SVN_ERR (svn_wc_entry (&entry, path, adm_access, TRUE, pool)); + if (! entry) + { + *pristine_mimetype = NULL; + return SVN_NO_ERROR; + } + + SVN_ERR (svn_wc__prop_base_path (&props_base_path, path, + entry->kind, FALSE, pool)); SVN_ERR (svn_wc__load_prop_file (props_base_path, baseprops, pool)); pristine_val = apr_hash_get (baseprops, SVN_PROP_MIME_TYPE, strlen(SVN_PROP_MIME_TYPE)); Index: subversion/libsvn_wc/copy.c =================================================================== --- subversion/libsvn_wc/copy.c (revision 17039) +++ subversion/libsvn_wc/copy.c (working copy) @@ -49,6 +49,7 @@ const char *wcprop_path; apr_pool_t *subpool = svn_pool_create (pool); svn_error_t *err; + const svn_wc_entry_t *entry; /* Read PATH's entries. */ SVN_ERR (svn_wc_entries_read (&entries, adm_access, FALSE, subpool)); @@ -56,7 +57,7 @@ /* Remove this_dir's wcprops */ SVN_ERR (svn_wc__wcprop_path (&wcprop_path, svn_wc_adm_access_path (adm_access), - adm_access, FALSE, subpool)); + svn_node_dir, FALSE, subpool)); err = svn_io_remove_file (wcprop_path, subpool); if (err) svn_error_clear (err); @@ -84,8 +85,8 @@ /* If a file, remove it from wcprops. */ if (current_entry->kind == svn_node_file) { - SVN_ERR (svn_wc__wcprop_path (&wcprop_path, child_path, adm_access, - FALSE, subpool)); + SVN_ERR (svn_wc__wcprop_path (&wcprop_path, child_path, + svn_node_file, FALSE, subpool)); err = svn_io_remove_file (wcprop_path, subpool); if (err) svn_error_clear (err); @@ -145,14 +146,6 @@ const char *src_txtb = svn_wc__text_base_path (src_path, FALSE, pool); const char *tmp_txtb = svn_wc__text_base_path (dst_path, TRUE, pool); - /* Discover the paths to the four prop files */ - SVN_ERR (svn_wc__prop_path (&src_wprop, src_path, - src_access, FALSE, pool)); - SVN_ERR (svn_wc__prop_base_path (&src_bprop, src_path, - src_access, FALSE, pool)); - SVN_ERR (svn_wc__prop_path (&dst_wprop, dst_path, - dst_parent, FALSE, pool)); - /* Sanity check: if dst file exists already, don't allow overwrite. */ SVN_ERR (svn_io_check_path (dst_path, &dst_kind, pool)); if (dst_kind != svn_node_none) @@ -192,6 +185,14 @@ svn_path_local_style (src_path, pool)); + /* Discover the paths to the four prop files */ + SVN_ERR (svn_wc__prop_path (&src_wprop, src_path, + src_entry->kind, FALSE, pool)); + SVN_ERR (svn_wc__prop_base_path (&src_bprop, src_path, + src_entry->kind, FALSE, pool)); + SVN_ERR (svn_wc__prop_path (&dst_wprop, dst_path, + src_entry->kind, FALSE, pool)); + /* Schedule the new file for addition in its parent, WITH HISTORY. */ { char *copyfrom_url; Index: subversion/libsvn_wc/adm_crawler.c =================================================================== --- subversion/libsvn_wc/adm_crawler.c (revision 17039) +++ subversion/libsvn_wc/adm_crawler.c (working copy) @@ -898,7 +898,7 @@ SVN_ERR (svn_wc_adm_probe_retrieve (&adm_access, adm_access, path, pool)); /* First, get the prop_path from the original path */ - SVN_ERR (svn_wc__prop_path (&props, path, adm_access, FALSE, pool)); + SVN_ERR (svn_wc__prop_path (&props, path, entry->kind, FALSE, pool)); /* Get the full path of the prop-base `pristine' file */ if (entry->schedule == svn_wc_schedule_replace) @@ -910,11 +910,11 @@ } else /* the real prop-base hash */ - SVN_ERR (svn_wc__prop_base_path (&props_base, path, adm_access, FALSE, + SVN_ERR (svn_wc__prop_base_path (&props_base, path, entry->kind, FALSE, pool)); /* Copy the local prop file to the administrative temp area */ - SVN_ERR (svn_wc__prop_path (&props_tmp, path, adm_access, TRUE, pool)); + SVN_ERR (svn_wc__prop_path (&props_tmp, path, entry->kind, TRUE, pool)); SVN_ERR (svn_io_copy_file (props, props_tmp, FALSE, pool)); /* Alert the caller that we have created a temporary file that might Index: subversion/libsvn_wc/log.c =================================================================== --- subversion/libsvn_wc/log.c (revision 17039) +++ subversion/libsvn_wc/log.c (working copy) @@ -705,8 +705,15 @@ const char *pfile; svn_node_kind_t pfile_kind; apr_time_t prop_time; + const svn_wc_entry_t *tfile_entry; - err = svn_wc__prop_path (&pfile, tfile, loggy->adm_access, FALSE, + err = svn_wc_entry (&tfile_entry, tfile, loggy->adm_access, + FALSE, loggy->pool); + + if (err) + signal_error (loggy, err); + + err = svn_wc__prop_path (&pfile, tfile, tfile_entry->kind, FALSE, loggy->pool); if (err) signal_error (loggy, err); @@ -1119,12 +1126,12 @@ (&wf, is_this_dir ? svn_wc_adm_access_path (loggy->adm_access) : full_path, - loggy->adm_access, FALSE, pool)); + entry->kind , FALSE, pool)); SVN_ERR (svn_wc__prop_base_path (&basef, is_this_dir ? svn_wc_adm_access_path (loggy->adm_access) : full_path, - loggy->adm_access, FALSE, pool)); + entry->kind, FALSE, pool)); /* If this file was replaced in the commit, then we definitely need to begin by removing any old residual prop-base file. */ @@ -1140,7 +1147,7 @@ (&tmpf, is_this_dir ? svn_wc_adm_access_path (loggy->adm_access) : full_path, - loggy->adm_access, TRUE, pool)); + entry->kind, TRUE, pool)); if ((err = svn_io_check_path (tmpf, &kind, pool))) return svn_error_createf (pick_error_code (loggy), err, _("Error checking existence of '%s'"), Index: subversion/libsvn_wc/adm_ops.c =================================================================== --- subversion/libsvn_wc/adm_ops.c (revision 17039) +++ subversion/libsvn_wc/adm_ops.c (working copy) @@ -178,10 +178,16 @@ apr_pool_t * pool) { const char * revert_file; + const svn_wc_entry_t *entry; svn_node_kind_t kind; - + + SVN_ERR (svn_wc_entry (&entry, base_name, adm_access, FALSE, pool)); + + if (! entry) + return SVN_NO_ERROR; + if (is_prop) - SVN_ERR (svn_wc__prop_revert_path (&revert_file, base_name, adm_access, + SVN_ERR (svn_wc__prop_revert_path (&revert_file, base_name, entry->kind, FALSE, pool)); else revert_file = svn_wc__text_revert_path (base_name, FALSE, pool); @@ -913,9 +919,9 @@ const char *prop_base, *prop_revert; SVN_ERR (svn_wc__prop_base_path (&prop_base, base_name, - adm_access, FALSE, pool)); + was_kind, FALSE, pool)); SVN_ERR (svn_wc__prop_revert_path (&prop_revert, base_name, - adm_access, FALSE, pool)); + was_kind, FALSE, pool)); if (was_kind != svn_node_dir) /* Dirs don't have text-bases */ /* Restore the original text-base */ @@ -1132,7 +1138,8 @@ if (orig_entry && (! copyfrom_url)) { const char *prop_path; - SVN_ERR (svn_wc__prop_path (&prop_path, path, adm_access, FALSE, pool)); + SVN_ERR (svn_wc__prop_path (&prop_path, path, + orig_entry->kind, FALSE, pool)); SVN_ERR (remove_file_if_present (prop_path, pool)); } @@ -1329,7 +1336,6 @@ apr_hash_t *modify_entry_atts = apr_hash_make (pool); svn_stringbuf_t *log_accum = svn_stringbuf_create ("", pool); const char *bprop, *rprop, *wprop; /* full paths */ - const char *local_bprop, *local_rprop, *local_wprop; /* relative paths */ const char *adm_path = svn_wc_adm_access_path (adm_access); int access_len = strlen (adm_path) + 1; @@ -1338,22 +1344,18 @@ if (strcmp (name, SVN_WC_ENTRY_THIS_DIR) != 0) fullpath = svn_path_join (fullpath, name, pool); - SVN_ERR (svn_wc__prop_base_path (&bprop, fullpath, adm_access, FALSE, pool)); - local_bprop = apr_pstrdup(pool, bprop + access_len); + SVN_ERR (svn_wc__prop_base_path (&bprop, name, entry->kind, FALSE, pool)); - SVN_ERR (svn_wc__prop_revert_path (&rprop, fullpath, - adm_access, FALSE, pool)); - local_rprop = apr_pstrdup(pool, rprop + access_len); + SVN_ERR (svn_wc__prop_revert_path (&rprop, name, entry->kind, FALSE, pool)); - SVN_ERR (svn_wc__prop_path (&wprop, fullpath, adm_access, FALSE, pool)); - local_wprop = apr_pstrdup(pool, wprop + access_len); + SVN_ERR (svn_wc__prop_path (&wprop, name, entry->kind, FALSE, pool)); /* Look for a revert base file. If it exists use it for * the prop base for the file. If it doesn't use the normal * prop base. */ SVN_ERR (svn_wc__loggy_move (&log_accum, NULL, adm_access, - local_rprop, local_bprop, FALSE, pool)); + rprop, bprop, FALSE, pool)); /* Check for prop changes. */ SVN_ERR (svn_wc_props_modified_p (&modified_p, fullpath, adm_access, pool)); @@ -1379,7 +1381,7 @@ file. */ SVN_ERR (svn_wc__loggy_copy (&log_accum, NULL, adm_access, svn_wc__copy_normal, - local_bprop, local_wprop, TRUE, pool)); + bprop, wprop, TRUE, pool)); /* Log to update prop-time attribute */ apr_hash_set (modify_entry_atts, SVN_WC__ENTRY_ATTR_PROP_TIME, @@ -1409,7 +1411,7 @@ then we need to restore them. */ SVN_ERR (svn_wc__loggy_copy (&log_accum, &tgt_modified, adm_access, svn_wc__copy_normal, - local_bprop, local_wprop, FALSE, pool)); + bprop, wprop, FALSE, pool)); if (tgt_modified) { @@ -1854,18 +1856,22 @@ SVN_ERR (remove_file_if_present (svn_thang, pool)); /* Working prop file. */ - SVN_ERR (svn_wc__prop_path (&svn_thang, full_path, adm_access, FALSE, - pool)); + SVN_ERR (svn_wc__prop_path (&svn_thang, full_path, + is_file ? svn_node_file : svn_node_dir, + FALSE, pool)); SVN_ERR (remove_file_if_present (svn_thang, pool)); /* Prop base file. */ - SVN_ERR (svn_wc__prop_base_path (&svn_thang, full_path, adm_access, + SVN_ERR (svn_wc__prop_base_path (&svn_thang, full_path, + is_file ? svn_node_file + : svn_node_dir, FALSE, pool)); SVN_ERR (remove_file_if_present (svn_thang, pool)); /* wc-prop file. */ - SVN_ERR (svn_wc__wcprop_path (&svn_thang, full_path, adm_access, FALSE, - pool)); + SVN_ERR (svn_wc__wcprop_path (&svn_thang, full_path, + is_file ? svn_node_file : svn_node_dir, + FALSE, pool)); SVN_ERR (remove_file_if_present (svn_thang, pool)); } Index: subversion/libsvn_wc/adm_files.c =================================================================== --- subversion/libsvn_wc/adm_files.c (revision 17039) +++ subversion/libsvn_wc/adm_files.c (working copy) @@ -361,7 +361,7 @@ static svn_error_t * prop_path_internal (const char **prop_path, const char *path, - svn_wc_adm_access_t *adm_access, + svn_node_kind_t kind, prop_path_kind_t path_kind, svn_boolean_t tmp, apr_pool_t *pool) @@ -369,9 +369,7 @@ const svn_wc_entry_t *entry; const char *entry_name; - SVN_ERR (svn_wc_entry (&entry, path, adm_access, FALSE, pool)); - - if (entry && entry->kind == svn_node_dir) /* It's a working copy dir */ + if (kind == svn_node_dir) /* It's a working copy dir */ { static const char * names[] = { SVN_WC__ADM_DIR_PROP_BASE, /* prop_path_kind_base */ @@ -424,11 +422,11 @@ svn_error_t * svn_wc__wcprop_path (const char **wcprop_path, const char *path, - svn_wc_adm_access_t *adm_access, + svn_node_kind_t kind, svn_boolean_t tmp, apr_pool_t *pool) { - return prop_path_internal (wcprop_path, path, adm_access, + return prop_path_internal (wcprop_path, path, kind, prop_path_kind_wcprop, tmp, pool); } @@ -438,11 +436,11 @@ svn_error_t * svn_wc__prop_path (const char **prop_path, const char *path, - svn_wc_adm_access_t *adm_access, + svn_node_kind_t kind, svn_boolean_t tmp, apr_pool_t *pool) { - return prop_path_internal (prop_path, path, adm_access, + return prop_path_internal (prop_path, path, kind, prop_path_kind_working, tmp, pool); } @@ -450,11 +448,11 @@ svn_error_t * svn_wc__prop_base_path (const char **prop_path, const char *path, - svn_wc_adm_access_t *adm_access, + svn_node_kind_t kind, svn_boolean_t tmp, apr_pool_t *pool) { - return prop_path_internal (prop_path, path, adm_access, + return prop_path_internal (prop_path, path, kind, prop_path_kind_base, tmp, pool); } @@ -462,11 +460,11 @@ svn_error_t * svn_wc__prop_revert_path (const char **prop_path, const char *path, - svn_wc_adm_access_t *adm_access, + svn_node_kind_t kind, svn_boolean_t tmp, apr_pool_t *pool) { - return prop_path_internal (prop_path, path, adm_access, + return prop_path_internal (prop_path, path, kind, prop_path_kind_revert, tmp, pool); } Index: subversion/libsvn_wc/update_editor.c =================================================================== --- subversion/libsvn_wc/update_editor.c (revision 17039) +++ subversion/libsvn_wc/update_editor.c (working copy) @@ -1285,7 +1285,7 @@ /* Get the current pristine props. */ old_pristine_props = apr_hash_make (db->pool); SVN_ERR (svn_wc__prop_base_path (&pristine_prop_path, - db->path, adm_access, + db->path, svn_node_dir, FALSE, db->pool)); SVN_ERR (svn_wc__load_prop_file (pristine_prop_path, old_pristine_props, db->pool)); @@ -1911,12 +1911,13 @@ apr_array_header_t *propchanges; apr_hash_t *old_pristine_props, *new_pristine_props; const char *pristine_prop_path; + const svn_wc_entry_t *entry; int i; /* Get the current pristine props. */ - old_pristine_props = apr_hash_make (pool); + old_pristine_props = apr_hash_make (pool); SVN_ERR (svn_wc__prop_base_path (&pristine_prop_path, - file_path, adm_access, + file_path, svn_node_file, FALSE, pool)); SVN_ERR (svn_wc__load_prop_file (pristine_prop_path, old_pristine_props, pool)); @@ -2880,10 +2881,10 @@ svn_node_kind_t kind; SVN_ERR (svn_wc__prop_revert_path (&dst_rprop, base_name, - adm_access, FALSE, pool)); + svn_node_file, FALSE, pool)); SVN_ERR (svn_wc__prop_base_path (&dst_bprop, base_name, - adm_access, FALSE, pool)); + svn_node_file, FALSE, pool)); SVN_ERR (svn_wc__loggy_move (&log_accum, NULL, adm_access, dst_txtb, dst_rtext, @@ -2935,7 +2936,7 @@ SVN_ERR (svn_wc__save_prop_file (tmp_prop_path, new_props, pool)); /* Rename temporary props file to working props. */ - SVN_ERR (svn_wc__prop_path (&prop_path, base_name, adm_access, + SVN_ERR (svn_wc__prop_path (&prop_path, base_name, svn_node_file, FALSE, pool)); SVN_ERR (svn_wc__loggy_move (&log_accum, NULL, adm_access, tmp_prop_path + adm_path_len, prop_path, Index: subversion/libsvn_wc/adm_files.h =================================================================== --- subversion/libsvn_wc/adm_files.h (revision 17039) +++ subversion/libsvn_wc/adm_files.h (working copy) @@ -83,7 +83,7 @@ ADM_ACCESS is an access baton set that contains PATH. */ svn_error_t *svn_wc__wcprop_path (const char **wcprop_path, const char *path, - svn_wc_adm_access_t *adm_access, + svn_node_kind_t kind, svn_boolean_t tmp, apr_pool_t *pool); @@ -95,7 +95,7 @@ that contains PATH. */ svn_error_t *svn_wc__prop_path (const char **prop_path, const char *path, - svn_wc_adm_access_t *adm_access, + svn_node_kind_t kind, svn_boolean_t tmp, apr_pool_t *pool); @@ -107,7 +107,7 @@ that contains PATH. */ svn_error_t *svn_wc__prop_base_path (const char **prop_path, const char *path, - svn_wc_adm_access_t *adm_access, + svn_node_kind_t kind, svn_boolean_t tmp, apr_pool_t *pool); @@ -119,7 +119,7 @@ that contains PATH. */ svn_error_t *svn_wc__prop_revert_path (const char **prop_path, const char *path, - svn_wc_adm_access_t *adm_access, + svn_node_kind_t kind, svn_boolean_t tmp, apr_pool_t *pool); Index: subversion/libsvn_wc/questions.c =================================================================== --- subversion/libsvn_wc/questions.c (revision 17039) +++ subversion/libsvn_wc/questions.c (working copy) @@ -182,7 +182,7 @@ { const char *prop_path; - SVN_ERR (svn_wc__prop_path (&prop_path, path, adm_access, FALSE, pool)); + SVN_ERR (svn_wc__prop_path (&prop_path, path, entry->kind, FALSE, pool)); SVN_ERR (svn_io_file_affected_time (&wfile_time, prop_path, pool)); entrytime = entry->prop_time; }