You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Josef Wolf <jw...@raven.inka.de> on 2003/01/08 23:37:38 UTC
[PATCH] make symlinked hook-scripts work again
Hello!
Here comes the patch to the symlink-issue discussed in the thread
"CGI for repository administration". This patch is relative to r4296.
It passes the "make check" with no errors and behaves exactly the same
as unpatched r4296 on the three cases mentioned by Philip.
Log entry:
* subversion/libsvn_subr/io.c
(svn_io_check_path): Add boolean parameter 'resolve_symlinks' to
decide whether the target of a symlink or the symlink itself should
be checked.
* subversion/include/svn_io.h
(svn_io_check_path): Add boolean parameter 'resolve_symlinks' to prototype.
* subversion/libsvn_repos/hooks.c
(svn_repos__hooks_start_commit, svn_repos__hooks_pre_commit,
svn_repos__hooks_post_commit, svn_repos__hooks_pre_revprop_change,
svn_repos__hooks_post_revprop_change): changed callers of
svn_io_check_path to use target of symlink.
The following callers were updated to use the current semantics
which means to return svn_node_unknown when a symlink is passed:
* subversion/libsvn_client/add.c: (svn_client_add)
* subversion/libsvn_client/auth.c: (svn_client__default_auth_dir)
* subversion/libsvn_client/cleanup.c: (svn_client_cleanup)
* subversion/libsvn_client/commit.c
(import, svn_client_import, remove_tmpfiles)
* subversion/libsvn_client/copy.c
(wc_to_wc_copy, remove_tmpfiles, wc_to_repos_copy, repos_to_wc_copy)
* subversion/libsvn_client/delete.c: (svn_client__can_delete)
* subversion/libsvn_client/diff.c
(merge_file_added, merge_file_deleted, merge_dir_added, merge_dir_deleted,
do_diff)
* subversion/libsvn_client/prop_commands.c: (maybe_convert_to_url)
* subversion/libsvn_client/revert.c: (svn_client_revert)
* subversion/libsvn_client/update.c: (svn_client_update)
* subversion/libsvn_subr/config_file.c: (svn_config_ensure)
* subversion/libsvn_subr/io.c
(svn_io_copy_dir_recursively, svn_io_detect_mimetype)
* subversion/libsvn_wc/adm_files.c
(svn_wc__adm_path_exists, maybe_copy_file, prop_path_internal,
svn_wc__wcprop_path, svn_wc__open_props, svn_wc__close_props,
svn_wc__sync_props, check_adm_exists)
* subversion/libsvn_wc/adm_ops.c:
(remove_file_if_present, erase_unversioned_from_wc, erase_from_wc,
svn_wc_add, revert_admin_things, svn_wc_revert, attempt_deletion)
* subversion/libsvn_wc/copy.c: (copy_file_administratively, svn_wc_copy)
* subversion/libsvn_wc/entries.c: (svn_wc_entry)
* subversion/libsvn_wc/lock.c
(probe, svn_wc_adm_open, svn_wc_locked, svn_wc__adm_is_cleanup_required)
* subversion/libsvn_wc/log.c:
(install_committed_file, log_do_modify_entry, log_do_committed,
svn_wc_cleanup)
* subversion/libsvn_wc/props.c:
(svn_wc__load_prop_file, wcprop_list, svn_wc_prop_list, svn_wc_prop_set,
empty_props_p)
* subversion/libsvn_wc/questions.c
(svn_wc_check_wc, svn_wc__timestamps_equal_p, svn_wc_text_modified_p,
svn_wc_conflicted_p)
* subversion/libsvn_wc/status.c:
(assemble_status, get_dir_status, svn_wc_statuses)
* subversion/libsvn_wc/status_editor.c: (delete_entry)
* subversion/libsvn_wc/update_editor.c
(add_directory, add_or_open_file, svn_wc_install_file)
* subversion/libsvn_wc/util.c: (svn_wc__ensure_directory)
* subversion/svnlook/main.c: (open_writable_binary_file, do_diff)
Index: subversion/include/svn_io.h
===================================================================
--- subversion/include/svn_io.h (revision 4296)
+++ subversion/include/svn_io.h (working copy)
@@ -58,13 +58,19 @@
*
* If @a path is a directory, @a *kind is set to @c svn_node_dir.
*
+ * If @a path is a symbolic link, @a *kind is set to @c svn_node_link.
+ *
* If @a path does not exist in its final component, @a *kind is set to
* @c svn_node_none.
*
* If intermediate directories on the way to @a path don't exist, an
* error is returned, and @a *kind's value is undefined.
+ *
+ * If @a resolve_symlinks is true, symlinks are resolved and @a *kind
+ * is set according the kind of the object the symlink refers to.
*/
svn_error_t *svn_io_check_path (const char *path,
+ svn_boolean_t resolve_symlinks,
svn_node_kind_t *kind,
apr_pool_t *pool);
Index: subversion/libsvn_wc/props.c
===================================================================
--- subversion/libsvn_wc/props.c (revision 4296)
+++ subversion/libsvn_wc/props.c (working copy)
@@ -231,7 +231,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (propfile_path, &kind, pool));
+ SVN_ERR (svn_io_check_path (propfile_path, 0, &kind, pool));
if (kind == svn_node_file)
{
@@ -854,7 +854,7 @@
*props = apr_hash_make (pool);
/* Check validity of PATH */
- SVN_ERR( svn_io_check_path (path, &kind, pool) );
+ SVN_ERR( svn_io_check_path (path, 0, &kind, pool) );
#if 0
if (kind == svn_node_none)
@@ -872,7 +872,7 @@
SVN_ERR( svn_wc__wcprop_path (&prop_path, path, 0, pool) );
/* Does the property file exist? */
- SVN_ERR( svn_io_check_path (prop_path, &pkind, pool) );
+ SVN_ERR( svn_io_check_path (prop_path, 0, &pkind, pool) );
if (pkind == svn_node_none)
/* No property file exists. Just go home, with an empty hash. */
@@ -970,7 +970,7 @@
SVN_ERR (svn_wc__prop_path (&prop_path, path, 0, pool));
/* Does the property file exist? */
- SVN_ERR (svn_io_check_path (prop_path, &pkind, pool));
+ SVN_ERR (svn_io_check_path (prop_path, 0, &pkind, pool));
if (pkind == svn_node_none)
/* No property file exists. Just go home, with an empty hash. */
@@ -1123,7 +1123,7 @@
svn_node_kind_t kind;
enum svn_prop_kind prop_kind = svn_property_kind (NULL, name);
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (prop_kind == svn_prop_wc_kind)
return svn_wc__wcprop_set (name, value, path, pool);
@@ -1262,7 +1262,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path_to_prop_file, &kind, pool));
+ SVN_ERR (svn_io_check_path (path_to_prop_file, 0, &kind, pool));
if (kind == svn_node_none)
*empty_p = TRUE;
Index: subversion/libsvn_wc/entries.c
===================================================================
--- subversion/libsvn_wc/entries.c (revision 4296)
+++ subversion/libsvn_wc/entries.c (working copy)
@@ -612,7 +612,7 @@
*entry = NULL;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
/* ### todo:
Make an innocent way to discover that a dir/path is or is not
Index: subversion/libsvn_wc/copy.c
===================================================================
--- subversion/libsvn_wc/copy.c (revision 4296)
+++ subversion/libsvn_wc/copy.c (working copy)
@@ -136,7 +136,7 @@
= svn_path_join (svn_wc_adm_access_path (dst_parent), dst_basename, pool);
/* Sanity check: if dst file exists already, don't allow overwrite. */
- SVN_ERR (svn_io_check_path (dst_path, &dst_kind, pool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, &dst_kind, pool));
if (dst_kind != svn_node_none)
return svn_error_createf (SVN_ERR_ENTRY_EXISTS, NULL,
"'%s' already exists and is in the way.",
@@ -218,12 +218,12 @@
SVN_ERR (svn_io_copy_file (src_txtb, dst_txtb, TRUE, pool));
/* Copy the props over if they exist. */
- SVN_ERR (svn_io_check_path (src_wprop, &kind, pool));
+ SVN_ERR (svn_io_check_path (src_wprop, 0, &kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_io_copy_file (src_wprop, dst_wprop, TRUE, pool));
/* Copy the base-props over if they exist */
- SVN_ERR (svn_io_check_path (src_bprop, &kind, pool));
+ SVN_ERR (svn_io_check_path (src_bprop, 0, &kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_io_copy_file (src_bprop, dst_bprop, TRUE, pool));
}
@@ -344,7 +344,7 @@
SVN_ERR (svn_wc_adm_probe_open (&adm_access, NULL, src_path, FALSE, TRUE,
pool));
- SVN_ERR (svn_io_check_path (src_path, &src_kind, pool));
+ SVN_ERR (svn_io_check_path (src_path, 0, &src_kind, pool));
if (src_kind == svn_node_file)
SVN_ERR (copy_file_administratively (src_path, adm_access,
Index: subversion/libsvn_wc/util.c
===================================================================
--- subversion/libsvn_wc/util.c (revision 4296)
+++ subversion/libsvn_wc/util.c (working copy)
@@ -37,7 +37,7 @@
svn_wc__ensure_directory (const char *path, apr_pool_t *pool)
{
svn_node_kind_t kind;
- svn_error_t *err = svn_io_check_path (path, &kind, pool);
+ svn_error_t *err = svn_io_check_path (path, 0, &kind, pool);
if (err)
return err;
Index: subversion/libsvn_wc/log.c
===================================================================
--- subversion/libsvn_wc/log.c (revision 4296)
+++ subversion/libsvn_wc/log.c (working copy)
@@ -237,7 +237,7 @@
/* Is there a tmp_text_base that needs to be installed? */
tmp_text_base = svn_wc__text_base_path (filepath, 1, pool);
- SVN_ERR (svn_io_check_path (tmp_text_base, &kind, pool));
+ SVN_ERR (svn_io_check_path (tmp_text_base, 0, &kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_subst_copy_and_translate (tmp_text_base,
@@ -523,7 +523,7 @@
svn_node_kind_t tfile_kind;
apr_time_t text_time;
- err = svn_io_check_path (tfile, &tfile_kind, loggy->pool);
+ err = svn_io_check_path (tfile, 0, &tfile_kind, loggy->pool);
if (err)
return svn_error_createf
(SVN_ERR_WC_BAD_ADM_LOG, err,
@@ -553,7 +553,7 @@
if (err)
signal_error (loggy, err);
- err = svn_io_check_path (pfile, &pfile_kind, loggy->pool);
+ err = svn_io_check_path (pfile, 0, &pfile_kind, loggy->pool);
if (err)
return svn_error_createf
(SVN_ERR_WC_BAD_ADM_LOG, err,
@@ -833,7 +833,7 @@
/* Make sure our working file copy is present in the temp area. */
tmpf = svn_wc__text_base_path (wf, 1, pool);
- if ((err = svn_io_check_path (tmpf, &kind, pool)))
+ if ((err = svn_io_check_path (tmpf, 0, &kind, pool)))
return svn_error_createf (SVN_ERR_WC_BAD_ADM_LOG, err,
"error checking existence: %s", name);
if (kind == svn_node_file)
@@ -893,7 +893,7 @@
if (entry->schedule == svn_wc_schedule_replace)
{
svn_node_kind_t kinder;
- SVN_ERR (svn_io_check_path (basef, &kinder, pool));
+ SVN_ERR (svn_io_check_path (basef, 0, &kinder, pool));
if (kinder == svn_node_file)
SVN_ERR (svn_io_remove_file (basef, pool));
}
@@ -903,7 +903,7 @@
is_this_dir
? svn_wc_adm_access_path (loggy->adm_access) : full_path,
1, pool));
- if ((err = svn_io_check_path (tmpf, &kind, pool)))
+ if ((err = svn_io_check_path (tmpf, 0, &kind, pool)))
return svn_error_createf (SVN_ERR_WC_BAD_ADM_LOG, err,
"error checking existence: %s", name);
if (kind == svn_node_file)
@@ -1368,7 +1368,7 @@
{
/* Recurse */
const char *subdir = svn_path_join (path, key, pool);
- SVN_ERR (svn_io_check_path (subdir, &kind, pool));
+ SVN_ERR (svn_io_check_path (subdir, 0, &kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_wc_cleanup (subdir, adm_access, pool));
}
@@ -1382,7 +1382,7 @@
if (cleanup)
{
/* Is there a log? If so, run it. */
- SVN_ERR (svn_io_check_path (log_path, &kind, pool));
+ SVN_ERR (svn_io_check_path (log_path, 0, &kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_wc__run_log (adm_access, pool));
}
Index: subversion/libsvn_wc/adm_ops.c
===================================================================
--- subversion/libsvn_wc/adm_ops.c (revision 4296)
+++ subversion/libsvn_wc/adm_ops.c (working copy)
@@ -392,7 +392,7 @@
svn_node_kind_t kind;
/* Does this file exist? If not, get outta here. */
- SVN_ERR (svn_io_check_path (file, &kind, pool));
+ SVN_ERR (svn_io_check_path (file, 0, &kind, pool));
if (kind == svn_node_none)
return SVN_NO_ERROR;
@@ -509,7 +509,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
switch (kind)
{
case svn_node_none:
@@ -552,7 +552,7 @@
{
/* Check that the item exists in the wc. */
svn_node_kind_t wc_kind;
- SVN_ERR (svn_io_check_path (path, &wc_kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &wc_kind, pool));
if (wc_kind == svn_node_none)
return SVN_NO_ERROR;
@@ -777,7 +777,7 @@
svn_wc_adm_access_t *adm_access;
/* Make sure something's there. */
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_none)
return svn_error_createf (SVN_ERR_WC_PATH_NOT_FOUND, NULL,
"'%s' not found", path);
@@ -1101,12 +1101,12 @@
/* There may be a base props file but no working props file, if
the mod was that the working file was `R'eplaced by a new
file with no props. */
- SVN_ERR (svn_io_check_path (thing, &working_props_kind, pool));
+ SVN_ERR (svn_io_check_path (thing, 0, &working_props_kind, pool));
/* If there is a pristing property file, copy it out as the
working property file, else just remove the working property
file. */
- SVN_ERR (svn_io_check_path (base_thing, &kind, pool));
+ SVN_ERR (svn_io_check_path (base_thing, 0, &kind, pool));
if (kind == svn_node_file)
{
if ((working_props_kind == svn_node_file)
@@ -1143,7 +1143,7 @@
then we need to restore them. */
SVN_ERR (svn_wc__prop_path (&thing, fullpath, 0, pool));
SVN_ERR (svn_wc__prop_base_path (&base_thing, fullpath, 0, pool));
- SVN_ERR (svn_io_check_path (base_thing, &kind, pool));
+ SVN_ERR (svn_io_check_path (base_thing, 0, &kind, pool));
if ((err = svn_io_copy_file (base_thing, thing, FALSE, pool)))
return revert_error (err, fullpath, "restoring props", pool);
@@ -1155,7 +1155,7 @@
if (entry->kind == svn_node_file)
{
- SVN_ERR (svn_io_check_path (fullpath, &kind, pool));
+ SVN_ERR (svn_io_check_path (fullpath, 0, &kind, pool));
SVN_ERR (svn_wc_text_modified_p (&modified_p, fullpath, adm_access,
pool));
if ((modified_p) || (kind == svn_node_none))
@@ -1269,7 +1269,7 @@
if (entry->kind == svn_node_dir)
{
svn_node_kind_t disk_kind;
- SVN_ERR (svn_io_check_path (path, &disk_kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &disk_kind, pool));
if ((disk_kind != svn_node_dir)
&& (entry->schedule != svn_wc_schedule_add))
{
@@ -1298,7 +1298,7 @@
/* Safeguard 3: can we deal with the node kind of PATH current in
the working copy? */
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if ((kind != svn_node_none)
&& (kind != svn_node_file)
&& (kind != svn_node_dir))
@@ -1713,7 +1713,7 @@
const char *full_path = svn_path_join (parent_dir, base_name, pool);
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (full_path, &kind, pool));
+ SVN_ERR (svn_io_check_path (full_path, 0, &kind, pool));
*was_present = kind != svn_node_none;
if (! *was_present)
return SVN_NO_ERROR;
Index: subversion/libsvn_wc/status.c
===================================================================
--- subversion/libsvn_wc/status.c (revision 4296)
+++ subversion/libsvn_wc/status.c (working copy)
@@ -125,7 +125,7 @@
/* Check the path kind for PATH. */
if (path_kind == svn_node_unknown)
- SVN_ERR (svn_io_check_path (path, &path_kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &path_kind, pool));
if (! entry)
{
@@ -598,7 +598,7 @@
svn_node_kind_t fullpath_kind;
/* Get the entry's kind on disk. */
- SVN_ERR (svn_io_check_path (fullpath, &fullpath_kind, pool));
+ SVN_ERR (svn_io_check_path (fullpath, 0, &fullpath_kind, pool));
if (fullpath_kind == svn_node_dir)
{
@@ -667,7 +667,7 @@
const svn_wc_entry_t *entry;
/* Is PATH a directory or file? */
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
/* Read the appropriate entries file */
Index: subversion/libsvn_wc/adm_files.c
===================================================================
--- subversion/libsvn_wc/adm_files.c (revision 4296)
+++ subversion/libsvn_wc/adm_files.c (working copy)
@@ -138,7 +138,7 @@
path = v_extend_with_adm_name (path, NULL, tmp, pool, ap);
va_end (ap);
- err = svn_io_check_path (path, &kind, pool);
+ err = svn_io_check_path (path, 0, &kind, pool);
if (err)
svn_error_clear (err);
if (kind == svn_node_none)
@@ -214,7 +214,7 @@
apr_status_t apr_err;
/* First test if SRC exists. */
- SVN_ERR (svn_io_check_path (src, &kind, pool));
+ SVN_ERR (svn_io_check_path (src, 0, &kind, pool));
if (kind == svn_node_none)
{
/* SRC doesn't exist, create DST empty. */
@@ -319,7 +319,7 @@
int wc_format_version;
const char *entry_name;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
/* kff todo: some factorization can be done on most callers of
svn_wc_check_wc()? */
@@ -392,7 +392,7 @@
int is_wc;
const char *entry_name;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
/* kff todo: some factorization can be done on most callers of
svn_wc_check_wc()? */
@@ -716,7 +716,7 @@
int wc_format_version;
/* Check if path is a file or a dir. */
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_none)
{
/* Something changed, yet we can't find the local working directory
@@ -801,7 +801,7 @@
int wc_format_version;
/* Check if path is a file or a dir. */
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
/* If file, split the path. */
if (kind == svn_node_file)
@@ -870,7 +870,7 @@
svn_node_kind_t kind;
/* Check if path is a file or a dir. */
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
/* If file, split the path. */
if (kind == svn_node_file)
@@ -946,7 +946,7 @@
tmp_path = extend_with_adm_name (path, NULL, 0, pool, NULL);
- SVN_ERR (svn_io_check_path (tmp_path, &kind, pool));
+ SVN_ERR (svn_io_check_path (tmp_path, 0, &kind, pool));
if (kind != svn_node_none && kind != svn_node_dir)
{
/* If got an error other than dir non-existence, then
Index: subversion/libsvn_wc/lock.c
===================================================================
--- subversion/libsvn_wc/lock.c (revision 4296)
+++ subversion/libsvn_wc/lock.c (working copy)
@@ -202,7 +202,7 @@
svn_node_kind_t kind;
int is_wc;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_wc_check_wc (path, &is_wc, pool));
@@ -283,7 +283,7 @@
/* Since no physical lock gets created we must check PATH is not a
file. */
svn_node_kind_t node_kind;
- SVN_ERR (svn_io_check_path (path, &node_kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &node_kind, pool));
if (node_kind != svn_node_dir)
return svn_error_createf (SVN_ERR_WC_INVALID_LOCK, NULL,
"lock path is not a directory (%s)",
@@ -329,7 +329,7 @@
/* If this is not physically a directory, it may have been
deleted say, then ignore it. */
- SVN_ERR (svn_io_check_path (entry_path, &kind, pool));
+ SVN_ERR (svn_io_check_path (entry_path, 0, &kind, pool));
if (kind != svn_node_dir)
continue;
@@ -561,7 +561,7 @@
const char *lockfile
= svn_wc__adm_path (path, 0, pool, SVN_WC__ADM_LOCK, NULL);
- SVN_ERR (svn_io_check_path (lockfile, &kind, pool));
+ SVN_ERR (svn_io_check_path (lockfile, 0, &kind, pool));
if (kind == svn_node_file)
*locked = TRUE;
else if (kind == svn_node_none)
@@ -600,7 +600,7 @@
FALSE, pool, SVN_WC__ADM_LOG, NULL);
/* The presence of a log file demands cleanup */
- SVN_ERR (svn_io_check_path (log_path, &kind, pool));
+ SVN_ERR (svn_io_check_path (log_path, 0, &kind, pool));
*cleanup = (kind == svn_node_file);
return SVN_NO_ERROR;
Index: subversion/libsvn_wc/update_editor.c
===================================================================
--- subversion/libsvn_wc/update_editor.c (revision 4296)
+++ subversion/libsvn_wc/update_editor.c (working copy)
@@ -637,7 +637,7 @@
/* The directory may exist if this is a checkout, otherwise there should
be nothing with this name. */
- SVN_ERR (svn_io_check_path (db->path, &kind, db->pool));
+ SVN_ERR (svn_io_check_path (db->path, 0, &kind, db->pool));
if (kind != svn_node_none
&& !(pb->edit_baton->is_checkout && kind == svn_node_dir))
return svn_error_createf
@@ -1029,7 +1029,7 @@
### Are editor drives guaranteed not to mention the same name
### twice in the same dir baton? Don't know. */
- SVN_ERR (svn_io_check_path (fb->path, &kind, subpool));
+ SVN_ERR (svn_io_check_path (fb->path, 0, &kind, subpool));
SVN_ERR (svn_wc_adm_retrieve (&adm_access, pb->edit_baton->adm_access,
pb->path, subpool));
SVN_ERR (svn_wc_entry (&entry, fb->path, adm_access, FALSE, subpool));
@@ -1607,7 +1607,7 @@
{
svn_node_kind_t wfile_kind = svn_node_unknown;
- SVN_ERR (svn_io_check_path (file_path, &wfile_kind, pool));
+ SVN_ERR (svn_io_check_path (file_path, 0, &wfile_kind, pool));
if (wfile_kind == svn_node_none) /* working file is missing?! */
{
/* Just copy the new text-base to the file. */
Index: subversion/libsvn_wc/status_editor.c
===================================================================
--- subversion/libsvn_wc/status_editor.c (revision 4296)
+++ subversion/libsvn_wc/status_editor.c (working copy)
@@ -333,7 +333,7 @@
versioned in this working copy, it was probably deleted via this
working copy. No need to report such a thing. */
/* ### use svn_wc_entry() instead? */
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_dir)
dir_path = full_path;
else
Index: subversion/libsvn_wc/questions.c
===================================================================
--- subversion/libsvn_wc/questions.c (revision 4296)
+++ subversion/libsvn_wc/questions.c (working copy)
@@ -50,7 +50,7 @@
svn_error_t *err = SVN_NO_ERROR;
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_none)
{
@@ -131,7 +131,7 @@
const svn_wc_entry_t *entry;
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_dir)
entryname = SVN_WC_ENTRY_THIS_DIR;
else
@@ -321,7 +321,7 @@
svn_node_kind_t kind;
/* Sanity check: if the path doesn't exist, return FALSE. */
- SVN_ERR (svn_io_check_path (filename, &kind, subpool));
+ SVN_ERR (svn_io_check_path (filename, 0, &kind, subpool));
if (kind != svn_node_file)
{
*modified_p = FALSE;
@@ -345,7 +345,7 @@
is modified. For example, a file scheduled for addition but not
yet committed. */
textbase_filename = svn_wc__text_base_path (filename, 0, subpool);
- SVN_ERR (svn_io_check_path (textbase_filename, &kind, subpool));
+ SVN_ERR (svn_io_check_path (textbase_filename, 0, &kind, subpool));
if (kind != svn_node_file)
{
*modified_p = TRUE;
@@ -391,7 +391,7 @@
if (entry->conflict_old)
{
path = svn_path_join (dir_path, entry->conflict_old, subpool);
- SVN_ERR (svn_io_check_path (path, &kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, subpool));
if (kind == svn_node_file)
*text_conflicted_p = TRUE;
}
@@ -399,7 +399,7 @@
if ((! *text_conflicted_p) && (entry->conflict_new))
{
path = svn_path_join (dir_path, entry->conflict_new, subpool);
- SVN_ERR (svn_io_check_path (path, &kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, subpool));
if (kind == svn_node_file)
*text_conflicted_p = TRUE;
}
@@ -407,7 +407,7 @@
if ((! *text_conflicted_p) && (entry->conflict_wrk))
{
path = svn_path_join (dir_path, entry->conflict_wrk, subpool);
- SVN_ERR (svn_io_check_path (path, &kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, subpool));
if (kind == svn_node_file)
*text_conflicted_p = TRUE;
}
@@ -416,7 +416,7 @@
if (entry->prejfile)
{
path = svn_path_join (dir_path, entry->prejfile, subpool);
- SVN_ERR (svn_io_check_path (path, &kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, subpool));
if (kind == svn_node_file)
*prop_conflicted_p = TRUE;
}
Index: subversion/libsvn_subr/config_file.c
===================================================================
--- subversion/libsvn_subr/config_file.c (revision 4296)
+++ subversion/libsvn_subr/config_file.c (working copy)
@@ -456,7 +456,7 @@
if (! path)
return SVN_NO_ERROR;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_none)
{
apr_err = apr_dir_make (path, APR_OS_DEFAULT, pool);
@@ -479,7 +479,7 @@
if (! path) /* highly unlikely, since a previous call succeeded */
return SVN_NO_ERROR;
- err = svn_io_check_path (path, &kind, pool);
+ err = svn_io_check_path (path, 0, &kind, pool);
if (err)
return SVN_NO_ERROR;
@@ -621,7 +621,7 @@
if (! path) /* highly unlikely, since a previous call succeeded */
return SVN_NO_ERROR;
- err = svn_io_check_path (path, &kind, pool);
+ err = svn_io_check_path (path, 0, &kind, pool);
if (err)
return SVN_NO_ERROR;
@@ -723,7 +723,7 @@
if (! path) /* highly unlikely, since a previous call succeeded */
return SVN_NO_ERROR;
- err = svn_io_check_path (path, &kind, pool);
+ err = svn_io_check_path (path, 0, &kind, pool);
if (err)
return SVN_NO_ERROR;
Index: subversion/libsvn_subr/io.c
===================================================================
--- subversion/libsvn_subr/io.c (revision 4296)
+++ subversion/libsvn_subr/io.c (working copy)
@@ -124,9 +124,11 @@
svn_error_t *
svn_io_check_path (const char *path,
+ svn_boolean_t resolve_symlinks,
svn_node_kind_t *kind,
apr_pool_t *pool)
{
+ apr_int32_t flags;
apr_finfo_t finfo;
apr_status_t apr_err;
const char *path_native;
@@ -136,9 +138,11 @@
/* Not using svn_io_stat() here because we want to check the
apr_err return anyway. */
+
SVN_ERR (path_from_utf8 (&path_native, path, pool));
- apr_err = apr_stat (&finfo, path_native,
- (APR_FINFO_MIN | APR_FINFO_LINK), pool);
+
+ flags = resolve_symlinks ? APR_FINFO_MIN : (APR_FINFO_MIN | APR_FINFO_LINK);
+ apr_err = apr_stat (&finfo, path_native, flags, pool);
if (apr_err && !APR_STATUS_IS_ENOENT(apr_err))
return svn_error_createf
@@ -402,19 +406,19 @@
/* Sanity checks: SRC and DST_PARENT are directories, and
DST_BASENAME doesn't already exist in DST_PARENT. */
- SVN_ERR (svn_io_check_path (src, &kind, subpool));
+ SVN_ERR (svn_io_check_path (src, 0, &kind, subpool));
if (kind != svn_node_dir)
return svn_error_createf (SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
"svn_io_copy_dir: '%s' is not a directory.",
src);
- SVN_ERR (svn_io_check_path (dst_parent, &kind, subpool));
+ SVN_ERR (svn_io_check_path (dst_parent, 0, &kind, subpool));
if (kind != svn_node_dir)
return svn_error_createf (SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
"svn_io_copy_dir: '%s' is not a directory.",
dst_parent);
- SVN_ERR (svn_io_check_path (dst_path, &kind, subpool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, &kind, subpool));
if (kind != svn_node_none)
return svn_error_createf (SVN_ERR_ENTRY_EXISTS, NULL,
"svn_io_copy_dir: '%s' already exists.",
@@ -1726,7 +1730,7 @@
*mimetype = NULL;
/* See if this file even exists, and make sure it really is a file. */
- SVN_ERR (svn_io_check_path (file, &kind, pool));
+ SVN_ERR (svn_io_check_path (file, 0, &kind, pool));
if (kind != svn_node_file)
return svn_error_createf (SVN_ERR_BAD_FILENAME, NULL,
"svn_io_detect_mimetype: "
Index: subversion/svnlook/main.c
===================================================================
--- subversion/svnlook/main.c (revision 4296)
+++ subversion/svnlook/main.c (working copy)
@@ -451,7 +451,7 @@
svn_node_kind_t kind;
const char *piece = ((const char **) (path_pieces->elts))[i];
full_path = svn_path_join (full_path, piece, pool);
- SVN_ERR (svn_io_check_path (full_path, &kind, pool));
+ SVN_ERR (svn_io_check_path (full_path, 0, &kind, pool));
/* Does this path component exist at all? */
if (kind == svn_node_none)
@@ -945,7 +945,7 @@
SVN_ERR (svn_fs_revision_root (&base_root, c->fs, base_rev_id, pool));
SVN_ERR (print_diff_tree (root, base_root, tree, "", "",
c->no_diff_deleted, pool));
- SVN_ERR (svn_io_check_path (SVNLOOK_TMPDIR, &kind, pool));
+ SVN_ERR (svn_io_check_path (SVNLOOK_TMPDIR, 0, &kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_io_remove_dir (SVNLOOK_TMPDIR, pool));
}
Index: subversion/libsvn_client/prop_commands.c
===================================================================
--- subversion/libsvn_client/prop_commands.c (revision 4296)
+++ subversion/libsvn_client/prop_commands.c (working copy)
@@ -324,7 +324,7 @@
const char *pdir;
const svn_wc_entry_t *entry;
- SVN_ERR (svn_io_check_path (target, &kind, pool));
+ SVN_ERR (svn_io_check_path (target, 0, &kind, pool));
if (kind == svn_node_file)
svn_path_split (target, &pdir, NULL, pool);
else
Index: subversion/libsvn_client/auth.c
===================================================================
--- subversion/libsvn_client/auth.c (revision 4296)
+++ subversion/libsvn_client/auth.c (working copy)
@@ -65,7 +65,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_dir)
{
SVN_ERR (svn_client__dir_if_wc (auth_dir_p, path, pool));
Index: subversion/libsvn_client/delete.c
===================================================================
--- subversion/libsvn_client/delete.c (revision 4296)
+++ subversion/libsvn_client/delete.c (working copy)
@@ -45,7 +45,7 @@
svn_node_kind_t kind;
svn_wc_adm_access_t *dir_access;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_wc_adm_retrieve (&dir_access, adm_access, path, pool));
else
Index: subversion/libsvn_client/revert.c
===================================================================
--- subversion/libsvn_client/revert.c (revision 4296)
+++ subversion/libsvn_client/revert.c (working copy)
@@ -59,7 +59,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_dir)
{
/* While we could add the parent to the access baton set, there
Index: subversion/libsvn_client/diff.c
===================================================================
--- subversion/libsvn_client/diff.c (revision 4296)
+++ subversion/libsvn_client/diff.c (working copy)
@@ -402,7 +402,7 @@
const char *copyfrom_url;
const char *child;
- SVN_ERR (svn_io_check_path (mine, &kind, subpool));
+ SVN_ERR (svn_io_check_path (mine, 0, &kind, subpool));
switch (kind)
{
case svn_node_none:
@@ -467,7 +467,7 @@
svn_wc_adm_access_t *parent_access;
const char *parent_path;
- SVN_ERR (svn_io_check_path (mine, &kind, subpool));
+ SVN_ERR (svn_io_check_path (mine, 0, &kind, subpool));
switch (kind)
{
case svn_node_file:
@@ -509,7 +509,7 @@
assert (child != NULL);
copyfrom_url = svn_path_join (merge_b->url, child, subpool);
- SVN_ERR (svn_io_check_path (path, &kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, subpool));
switch (kind)
{
case svn_node_none:
@@ -557,7 +557,7 @@
svn_wc_adm_access_t *parent_access;
const char *parent_path;
- SVN_ERR (svn_io_check_path (path, &kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, subpool));
switch (kind)
{
case svn_node_dir:
@@ -1060,7 +1060,7 @@
recurse,
diff_editor, diff_edit_baton));
- SVN_ERR (svn_io_check_path (path2, &kind, pool));
+ SVN_ERR (svn_io_check_path (path2, 0, &kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_wc_adm_retrieve (&dir_access, adm_access, path2, pool));
else
Index: subversion/libsvn_client/copy.c
===================================================================
--- subversion/libsvn_client/copy.c (revision 4296)
+++ subversion/libsvn_client/copy.c (working copy)
@@ -79,7 +79,7 @@
svn_wc_adm_access_t *adm_access, *src_access;
/* Verify that SRC_PATH exists. */
- SVN_ERR (svn_io_check_path (src_path, &src_kind, pool));
+ SVN_ERR (svn_io_check_path (src_path, 0, &src_kind, pool));
if (src_kind == svn_node_none)
return svn_error_createf (SVN_ERR_NODE_UNKNOWN_KIND, NULL,
"path `%s' does not exist.", src_path);
@@ -89,7 +89,7 @@
DST_PATH is a dir, then SRC_PATH's basename will become a new
file or dir within DST_PATH itself. Else if it's a file, just
error out. */
- SVN_ERR (svn_io_check_path (dst_path, &dst_kind, pool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, &dst_kind, pool));
if (dst_kind == svn_node_none)
{
svn_path_split (dst_path, &dst_parent, &base_name, pool);
@@ -443,7 +443,7 @@
svn_node_kind_t kind;
apr_hash_this (hi, &key, &keylen, &val);
- SVN_ERR (svn_io_check_path ((const char *)key, &kind, pool));
+ SVN_ERR (svn_io_check_path ((const char *)key, 0, &kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_io_remove_file ((const char *)key, pool));
}
@@ -589,7 +589,7 @@
}
/* Crawl the working copy for commit items. */
- SVN_ERR (svn_io_check_path (base_path, &src_kind, pool));
+ SVN_ERR (svn_io_check_path (base_path, 0, &src_kind, pool));
if (src_kind == svn_node_dir)
SVN_ERR (svn_wc_adm_retrieve (&dir_access, adm_access, base_path, pool));
else
@@ -751,7 +751,7 @@
*/
/* First, figure out about dst. */
- SVN_ERR (svn_io_check_path (dst_path, &dst_kind, pool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, &dst_kind, pool));
if (dst_kind == svn_node_dir)
{
const char *base_name;
@@ -768,7 +768,7 @@
/* Now that dst_path has possibly been reset, check that there's
nothing in the way of the upcoming checkout. */
- SVN_ERR (svn_io_check_path (dst_path, &dst_kind, pool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, &dst_kind, pool));
if (dst_kind != svn_node_none)
return svn_error_createf (SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
"`%s' is in the way", dst_path);
Index: subversion/libsvn_client/update.c
===================================================================
--- subversion/libsvn_client/update.c (revision 4296)
+++ subversion/libsvn_client/update.c (working copy)
@@ -122,7 +122,7 @@
recurse,
update_editor, update_edit_baton));
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
SVN_ERR (svn_wc_adm_retrieve (&dir_access, adm_access,
(kind == svn_node_dir
? path
Index: subversion/libsvn_client/cleanup.c
===================================================================
--- subversion/libsvn_client/cleanup.c (revision 4296)
+++ subversion/libsvn_client/cleanup.c (working copy)
@@ -40,7 +40,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (dir, &kind, pool));
+ SVN_ERR (svn_io_check_path (dir, 0, &kind, pool));
if (kind != svn_node_dir)
return svn_error_createf (SVN_ERR_WC_NOT_DIRECTORY, NULL,
"Cannot cleanup '%s' -- not a directory",
Index: subversion/libsvn_client/commit.c
===================================================================
--- subversion/libsvn_client/commit.c (revision 4296)
+++ subversion/libsvn_client/commit.c (working copy)
@@ -353,7 +353,7 @@
pool, &root_baton));
/* Import a file or a directory tree. */
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
/* Note that there is no need to check whether PATH's basename is
the same name that we reserve for our admistritave
@@ -589,7 +589,7 @@
svn_node_kind_t kind;
const char *base_dir = path;
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if (kind == svn_node_file)
svn_path_split (path, &base_dir, NULL, pool);
SVN_ERR (get_ra_editor (&ra_baton, &session, &ra_lib, NULL,
@@ -639,7 +639,7 @@
svn_node_kind_t kind;
apr_hash_this (hi, &key, NULL, &val);
- SVN_ERR (svn_io_check_path ((const char *)key, &kind, pool));
+ SVN_ERR (svn_io_check_path ((const char *)key, 0, &kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_io_remove_file ((const char *)key, pool));
}
Index: subversion/libsvn_client/add.c
===================================================================
--- subversion/libsvn_client/add.c (revision 4296)
+++ subversion/libsvn_client/add.c (working copy)
@@ -135,7 +135,7 @@
SVN_ERR (svn_wc_adm_open (&adm_access, NULL, parent_path, TRUE, TRUE, pool));
- SVN_ERR (svn_io_check_path (path, &kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, &kind, pool));
if ((kind == svn_node_dir) && recursive)
err = add_dir_recursive (path, adm_access,
notify_func, notify_baton, pool);
Index: subversion/libsvn_repos/hooks.c
===================================================================
--- subversion/libsvn_repos/hooks.c (revision 4296)
+++ subversion/libsvn_repos/hooks.c (working copy)
@@ -117,7 +117,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_start_commit_hook (repos, pool);
- if ((! svn_io_check_path (hook, &kind, pool))
+ if ((! svn_io_check_path (hook, 1, &kind, pool))
&& (kind == svn_node_file))
{
const char *args[4];
@@ -144,7 +144,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_pre_commit_hook (repos, pool);
- if ((! svn_io_check_path (hook, &kind, pool))
+ if ((! svn_io_check_path (hook, 1, &kind, pool))
&& (kind == svn_node_file))
{
const char *args[4];
@@ -171,7 +171,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_post_commit_hook (repos, pool);
- if ((! svn_io_check_path (hook, &kind, pool))
+ if ((! svn_io_check_path (hook, 1, &kind, pool))
&& (kind == svn_node_file))
{
const char *args[4];
@@ -202,7 +202,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_pre_revprop_change_hook (repos, pool);
- if ((! svn_io_check_path (hook, &kind, pool))
+ if ((! svn_io_check_path (hook, 1, &kind, pool))
&& (kind == svn_node_file))
{
const char *args[6];
@@ -248,7 +248,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_post_revprop_change_hook (repos, pool);
- if ((! svn_io_check_path (hook, &kind, pool))
+ if ((! svn_io_check_path (hook, 1, &kind, pool))
&& (kind == svn_node_file))
{
const char *args[6];
--
-- Josef Wolf -- jw@raven.inka.de --
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] make symlinked hook-scripts work again
Posted by Karl Fogel kf...@newton.ch.collab.net.
Philip Martin philip@codematters.co.uk writes:
I prefer his later patch, the one that provided a new function to do
the lstat() leaving svn_io_check_path to do the stat(). I was
thinking of applying *that* one, but it's borderline so if you want
this one go ahead.
That's the one I was looking at applying too, actually (now that I've
_found_ it, that is :-) ).
I'll do it, since I have it at hand.
-K
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] make symlinked hook-scripts work again
Posted by Philip Martin ph...@codematters.co.uk.
Karl Fogel kfogel@newton.ch.collab.net writes:
Karl Fogel kfogel@newton.ch.collab.net writes:
Josef,
This patch looks good; I'd like to commit it. Can you make a few
minor tweaks first?
[...]
Heh, and now I see that Philip already made the same comments, and
Joseph already reposted...
I prefer his later patch, the one that provided a new function to do
the lstat() leaving svn_io_check_path to do the stat(). I was
thinking of applying *that* one, but it's borderline so if you want
this one go ahead.
--
Philip Martin
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] make symlinked hook-scripts work again
Posted by Karl Fogel kf...@newton.ch.collab.net.
Karl Fogel kfogel@newton.ch.collab.net writes:
Josef,
This patch looks good; I'd like to commit it. Can you make a few
minor tweaks first?
[...]
Heh, and now I see that Philip already made the same comments, and
Joseph already reposted... but for some reason, my mailreader didn't
put that in the same thread, so I didn't see the followups until
later.
*shrug*
Anyway, sorry for the confusion, Joseph. I'm reading over the later
thread right now.
-Karl
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] make symlinked hook-scripts work again
Posted by Karl Fogel kf...@newton.ch.collab.net.
Josef,
This patch looks good; I'd like to commit it. Can you make a few
minor tweaks first?
1. You use `0' to mean false in the updated callers. The convention
is to use the symbolic constant 'FALSE' instead.
2. The doc string changes for svn_io_check_path() should mention the
new resolve_symlinks parameter in the same place it mentions
setting *kind in the link case. (In your patch, these two
connected facts are separated by some unrelated paragraphs.)
3. I don't know if the patch applies to the current code base; it
may need adjustments.
Sorry for the delay in responding. I hope you have time to massage it
and repost.
Thanks in advance,
-Karl
Josef Wolf jw@raven.inka.de writes:
Hello!
Here comes the patch to the symlink-issue discussed in the thread
CGI for repository administration. This patch is relative to r4296.
It passes the make check with no errors and behaves exactly the same
as unpatched r4296 on the three cases mentioned by Philip.
Log entry:
* subversion/libsvn_subr/io.c
(svn_io_check_path): Add boolean parameter 'resolve_symlinks' to
decide whether the target of a symlink or the symlink itself should
be checked.
* subversion/include/svn_io.h
(svn_io_check_path): Add boolean parameter 'resolve_symlinks' to prototype.
* subversion/libsvn_repos/hooks.c
(svn_repos__hooks_start_commit, svn_repos__hooks_pre_commit,
svn_repos__hooks_post_commit, svn_repos__hooks_pre_revprop_change,
svn_repos__hooks_post_revprop_change): changed callers of
svn_io_check_path to use target of symlink.
The following callers were updated to use the current semantics
which means to return svn_node_unknown when a symlink is passed:
* subversion/libsvn_client/add.c: (svn_client_add)
* subversion/libsvn_client/auth.c: (svn_client__default_auth_dir)
* subversion/libsvn_client/cleanup.c: (svn_client_cleanup)
* subversion/libsvn_client/commit.c
(import, svn_client_import, remove_tmpfiles)
* subversion/libsvn_client/copy.c
(wc_to_wc_copy, remove_tmpfiles, wc_to_repos_copy, repos_to_wc_copy)
* subversion/libsvn_client/delete.c: (svn_client__can_delete)
* subversion/libsvn_client/diff.c
(merge_file_added, merge_file_deleted, merge_dir_added, merge_dir_deleted,
do_diff)
* subversion/libsvn_client/prop_commands.c: (maybe_convert_to_url)
* subversion/libsvn_client/revert.c: (svn_client_revert)
* subversion/libsvn_client/update.c: (svn_client_update)
* subversion/libsvn_subr/config_file.c: (svn_config_ensure)
* subversion/libsvn_subr/io.c
(svn_io_copy_dir_recursively, svn_io_detect_mimetype)
* subversion/libsvn_wc/adm_files.c
(svn_wc__adm_path_exists, maybe_copy_file, prop_path_internal,
svn_wc__wcprop_path, svn_wc__open_props, svn_wc__close_props,
svn_wc__sync_props, check_adm_exists)
* subversion/libsvn_wc/adm_ops.c:
(remove_file_if_present, erase_unversioned_from_wc, erase_from_wc,
svn_wc_add, revert_admin_things, svn_wc_revert, attempt_deletion)
* subversion/libsvn_wc/copy.c: (copy_file_administratively, svn_wc_copy)
* subversion/libsvn_wc/entries.c: (svn_wc_entry)
* subversion/libsvn_wc/lock.c
(probe, svn_wc_adm_open, svn_wc_locked, svn_wc__adm_is_cleanup_required)
* subversion/libsvn_wc/log.c:
(install_committed_file, log_do_modify_entry, log_do_committed,
svn_wc_cleanup)
* subversion/libsvn_wc/props.c:
(svn_wc__load_prop_file, wcprop_list, svn_wc_prop_list, svn_wc_prop_set,
empty_props_p)
* subversion/libsvn_wc/questions.c
(svn_wc_check_wc, svn_wc__timestamps_equal_p, svn_wc_text_modified_p,
svn_wc_conflicted_p)
* subversion/libsvn_wc/status.c:
(assemble_status, get_dir_status, svn_wc_statuses)
* subversion/libsvn_wc/status_editor.c: (delete_entry)
* subversion/libsvn_wc/update_editor.c
(add_directory, add_or_open_file, svn_wc_install_file)
* subversion/libsvn_wc/util.c: (svn_wc__ensure_directory)
* subversion/svnlook/main.c: (open_writable_binary_file, do_diff)
Index: subversion/include/svn_io.h
===================================================================
--- subversion/include/svn_io.h (revision 4296)
+++ subversion/include/svn_io.h (working copy)
@@ -58,13 +58,19 @@
*
* If @a path is a directory, @a *kind is set to @c svn_node_dir.
*
+ * If @a path is a symbolic link, @a *kind is set to @c svn_node_link.
+ *
* If @a path does not exist in its final component, @a *kind is set to
* @c svn_node_none.
*
* If intermediate directories on the way to @a path don't exist, an
* error is returned, and @a *kind's value is undefined.
+ *
+ * If @a resolve_symlinks is true, symlinks are resolved and @a *kind
+ * is set according the kind of the object the symlink refers to.
*/
svn_error_t *svn_io_check_path (const char *path,
+ svn_boolean_t resolve_symlinks,
svn_node_kind_t *kind,
apr_pool_t *pool);
Index: subversion/libsvn_wc/props.c
===================================================================
--- subversion/libsvn_wc/props.c (revision 4296)
+++ subversion/libsvn_wc/props.c (working copy)
@@ -231,7 +231,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (propfile_path, kind, pool));
+ SVN_ERR (svn_io_check_path (propfile_path, 0, kind, pool));
if (kind == svn_node_file)
{
@@ -854,7 +854,7 @@
*props = apr_hash_make (pool);
/* Check validity of PATH */
- SVN_ERR( svn_io_check_path (path, kind, pool) );
+ SVN_ERR( svn_io_check_path (path, 0, kind, pool) );
#if 0
if (kind == svn_node_none)
@@ -872,7 +872,7 @@
SVN_ERR( svn_wc__wcprop_path (prop_path, path, 0, pool) );
/* Does the property file exist? */
- SVN_ERR( svn_io_check_path (prop_path, pkind, pool) );
+ SVN_ERR( svn_io_check_path (prop_path, 0, pkind, pool) );
if (pkind == svn_node_none)
/* No property file exists. Just go home, with an empty hash. */
@@ -970,7 +970,7 @@
SVN_ERR (svn_wc__prop_path (prop_path, path, 0, pool));
/* Does the property file exist? */
- SVN_ERR (svn_io_check_path (prop_path, pkind, pool));
+ SVN_ERR (svn_io_check_path (prop_path, 0, pkind, pool));
if (pkind == svn_node_none)
/* No property file exists. Just go home, with an empty hash. */
@@ -1123,7 +1123,7 @@
svn_node_kind_t kind;
enum svn_prop_kind prop_kind = svn_property_kind (NULL, name);
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (prop_kind == svn_prop_wc_kind)
return svn_wc__wcprop_set (name, value, path, pool);
@@ -1262,7 +1262,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path_to_prop_file, kind, pool));
+ SVN_ERR (svn_io_check_path (path_to_prop_file, 0, kind, pool));
if (kind == svn_node_none)
*empty_p = TRUE;
Index: subversion/libsvn_wc/entries.c
===================================================================
--- subversion/libsvn_wc/entries.c (revision 4296)
+++ subversion/libsvn_wc/entries.c (working copy)
@@ -612,7 +612,7 @@
*entry = NULL;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
/* ### todo:
Make an innocent way to discover that a dir/path is or is not
Index: subversion/libsvn_wc/copy.c
===================================================================
--- subversion/libsvn_wc/copy.c (revision 4296)
+++ subversion/libsvn_wc/copy.c (working copy)
@@ -136,7 +136,7 @@
= svn_path_join (svn_wc_adm_access_path (dst_parent), dst_basename, pool);
/* Sanity check: if dst file exists already, don't allow overwrite. */
- SVN_ERR (svn_io_check_path (dst_path, dst_kind, pool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, dst_kind, pool));
if (dst_kind != svn_node_none)
return svn_error_createf (SVN_ERR_ENTRY_EXISTS, NULL,
'%s' already exists and is in the way.,
@@ -218,12 +218,12 @@
SVN_ERR (svn_io_copy_file (src_txtb, dst_txtb, TRUE, pool));
/* Copy the props over if they exist. */
- SVN_ERR (svn_io_check_path (src_wprop, kind, pool));
+ SVN_ERR (svn_io_check_path (src_wprop, 0, kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_io_copy_file (src_wprop, dst_wprop, TRUE, pool));
/* Copy the base-props over if they exist */
- SVN_ERR (svn_io_check_path (src_bprop, kind, pool));
+ SVN_ERR (svn_io_check_path (src_bprop, 0, kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_io_copy_file (src_bprop, dst_bprop, TRUE, pool));
}
@@ -344,7 +344,7 @@
SVN_ERR (svn_wc_adm_probe_open (adm_access, NULL, src_path, FALSE, TRUE,
pool));
- SVN_ERR (svn_io_check_path (src_path, src_kind, pool));
+ SVN_ERR (svn_io_check_path (src_path, 0, src_kind, pool));
if (src_kind == svn_node_file)
SVN_ERR (copy_file_administratively (src_path, adm_access,
Index: subversion/libsvn_wc/util.c
===================================================================
--- subversion/libsvn_wc/util.c (revision 4296)
+++ subversion/libsvn_wc/util.c (working copy)
@@ -37,7 +37,7 @@
svn_wc__ensure_directory (const char *path, apr_pool_t *pool)
{
svn_node_kind_t kind;
- svn_error_t *err = svn_io_check_path (path, kind, pool);
+ svn_error_t *err = svn_io_check_path (path, 0, kind, pool);
if (err)
return err;
Index: subversion/libsvn_wc/log.c
===================================================================
--- subversion/libsvn_wc/log.c (revision 4296)
+++ subversion/libsvn_wc/log.c (working copy)
@@ -237,7 +237,7 @@
/* Is there a tmp_text_base that needs to be installed? */
tmp_text_base = svn_wc__text_base_path (filepath, 1, pool);
- SVN_ERR (svn_io_check_path (tmp_text_base, kind, pool));
+ SVN_ERR (svn_io_check_path (tmp_text_base, 0, kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_subst_copy_and_translate (tmp_text_base,
@@ -523,7 +523,7 @@
svn_node_kind_t tfile_kind;
apr_time_t text_time;
- err = svn_io_check_path (tfile, tfile_kind, loggy-pool);
+ err = svn_io_check_path (tfile, 0, tfile_kind, loggy-pool);
if (err)
return svn_error_createf
(SVN_ERR_WC_BAD_ADM_LOG, err,
@@ -553,7 +553,7 @@
if (err)
signal_error (loggy, err);
- err = svn_io_check_path (pfile, pfile_kind, loggy-pool);
+ err = svn_io_check_path (pfile, 0, pfile_kind, loggy-pool);
if (err)
return svn_error_createf
(SVN_ERR_WC_BAD_ADM_LOG, err,
@@ -833,7 +833,7 @@
/* Make sure our working file copy is present in the temp area. */
tmpf = svn_wc__text_base_path (wf, 1, pool);
- if ((err = svn_io_check_path (tmpf, kind, pool)))
+ if ((err = svn_io_check_path (tmpf, 0, kind, pool)))
return svn_error_createf (SVN_ERR_WC_BAD_ADM_LOG, err,
error checking existence: %s, name);
if (kind == svn_node_file)
@@ -893,7 +893,7 @@
if (entry-schedule == svn_wc_schedule_replace)
{
svn_node_kind_t kinder;
- SVN_ERR (svn_io_check_path (basef, kinder, pool));
+ SVN_ERR (svn_io_check_path (basef, 0, kinder, pool));
if (kinder == svn_node_file)
SVN_ERR (svn_io_remove_file (basef, pool));
}
@@ -903,7 +903,7 @@
is_this_dir
? svn_wc_adm_access_path (loggy-adm_access) : full_path,
1, pool));
- if ((err = svn_io_check_path (tmpf, kind, pool)))
+ if ((err = svn_io_check_path (tmpf, 0, kind, pool)))
return svn_error_createf (SVN_ERR_WC_BAD_ADM_LOG, err,
error checking existence: %s, name);
if (kind == svn_node_file)
@@ -1368,7 +1368,7 @@
{
/* Recurse */
const char *subdir = svn_path_join (path, key, pool);
- SVN_ERR (svn_io_check_path (subdir, kind, pool));
+ SVN_ERR (svn_io_check_path (subdir, 0, kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_wc_cleanup (subdir, adm_access, pool));
}
@@ -1382,7 +1382,7 @@
if (cleanup)
{
/* Is there a log? If so, run it. */
- SVN_ERR (svn_io_check_path (log_path, kind, pool));
+ SVN_ERR (svn_io_check_path (log_path, 0, kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_wc__run_log (adm_access, pool));
}
Index: subversion/libsvn_wc/adm_ops.c
===================================================================
--- subversion/libsvn_wc/adm_ops.c (revision 4296)
+++ subversion/libsvn_wc/adm_ops.c (working copy)
@@ -392,7 +392,7 @@
svn_node_kind_t kind;
/* Does this file exist? If not, get outta here. */
- SVN_ERR (svn_io_check_path (file, kind, pool));
+ SVN_ERR (svn_io_check_path (file, 0, kind, pool));
if (kind == svn_node_none)
return SVN_NO_ERROR;
@@ -509,7 +509,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
switch (kind)
{
case svn_node_none:
@@ -552,7 +552,7 @@
{
/* Check that the item exists in the wc. */
svn_node_kind_t wc_kind;
- SVN_ERR (svn_io_check_path (path, wc_kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, wc_kind, pool));
if (wc_kind == svn_node_none)
return SVN_NO_ERROR;
@@ -777,7 +777,7 @@
svn_wc_adm_access_t *adm_access;
/* Make sure something's there. */
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_none)
return svn_error_createf (SVN_ERR_WC_PATH_NOT_FOUND, NULL,
'%s' not found, path);
@@ -1101,12 +1101,12 @@
/* There may be a base props file but no working props file, if
the mod was that the working file was `R'eplaced by a new
file with no props. */
- SVN_ERR (svn_io_check_path (thing, working_props_kind, pool));
+ SVN_ERR (svn_io_check_path (thing, 0, working_props_kind, pool));
/* If there is a pristing property file, copy it out as the
working property file, else just remove the working property
file. */
- SVN_ERR (svn_io_check_path (base_thing, kind, pool));
+ SVN_ERR (svn_io_check_path (base_thing, 0, kind, pool));
if (kind == svn_node_file)
{
if ((working_props_kind == svn_node_file)
@@ -1143,7 +1143,7 @@
then we need to restore them. */
SVN_ERR (svn_wc__prop_path (thing, fullpath, 0, pool));
SVN_ERR (svn_wc__prop_base_path (base_thing, fullpath, 0, pool));
- SVN_ERR (svn_io_check_path (base_thing, kind, pool));
+ SVN_ERR (svn_io_check_path (base_thing, 0, kind, pool));
if ((err = svn_io_copy_file (base_thing, thing, FALSE, pool)))
return revert_error (err, fullpath, restoring props, pool);
@@ -1155,7 +1155,7 @@
if (entry-kind == svn_node_file)
{
- SVN_ERR (svn_io_check_path (fullpath, kind, pool));
+ SVN_ERR (svn_io_check_path (fullpath, 0, kind, pool));
SVN_ERR (svn_wc_text_modified_p (modified_p, fullpath, adm_access,
pool));
if ((modified_p) || (kind == svn_node_none))
@@ -1269,7 +1269,7 @@
if (entry-kind == svn_node_dir)
{
svn_node_kind_t disk_kind;
- SVN_ERR (svn_io_check_path (path, disk_kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, disk_kind, pool));
if ((disk_kind != svn_node_dir)
(entry-schedule != svn_wc_schedule_add))
{
@@ -1298,7 +1298,7 @@
/* Safeguard 3: can we deal with the node kind of PATH current in
the working copy? */
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if ((kind != svn_node_none)
(kind != svn_node_file)
(kind != svn_node_dir))
@@ -1713,7 +1713,7 @@
const char *full_path = svn_path_join (parent_dir, base_name, pool);
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (full_path, kind, pool));
+ SVN_ERR (svn_io_check_path (full_path, 0, kind, pool));
*was_present = kind != svn_node_none;
if (! *was_present)
return SVN_NO_ERROR;
Index: subversion/libsvn_wc/status.c
===================================================================
--- subversion/libsvn_wc/status.c (revision 4296)
+++ subversion/libsvn_wc/status.c (working copy)
@@ -125,7 +125,7 @@
/* Check the path kind for PATH. */
if (path_kind == svn_node_unknown)
- SVN_ERR (svn_io_check_path (path, path_kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, path_kind, pool));
if (! entry)
{
@@ -598,7 +598,7 @@
svn_node_kind_t fullpath_kind;
/* Get the entry's kind on disk. */
- SVN_ERR (svn_io_check_path (fullpath, fullpath_kind, pool));
+ SVN_ERR (svn_io_check_path (fullpath, 0, fullpath_kind, pool));
if (fullpath_kind == svn_node_dir)
{
@@ -667,7 +667,7 @@
const svn_wc_entry_t *entry;
/* Is PATH a directory or file? */
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
/* Read the appropriate entries file */
Index: subversion/libsvn_wc/adm_files.c
===================================================================
--- subversion/libsvn_wc/adm_files.c (revision 4296)
+++ subversion/libsvn_wc/adm_files.c (working copy)
@@ -138,7 +138,7 @@
path = v_extend_with_adm_name (path, NULL, tmp, pool, ap);
va_end (ap);
- err = svn_io_check_path (path, kind, pool);
+ err = svn_io_check_path (path, 0, kind, pool);
if (err)
svn_error_clear (err);
if (kind == svn_node_none)
@@ -214,7 +214,7 @@
apr_status_t apr_err;
/* First test if SRC exists. */
- SVN_ERR (svn_io_check_path (src, kind, pool));
+ SVN_ERR (svn_io_check_path (src, 0, kind, pool));
if (kind == svn_node_none)
{
/* SRC doesn't exist, create DST empty. */
@@ -319,7 +319,7 @@
int wc_format_version;
const char *entry_name;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
/* kff todo: some factorization can be done on most callers of
svn_wc_check_wc()? */
@@ -392,7 +392,7 @@
int is_wc;
const char *entry_name;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
/* kff todo: some factorization can be done on most callers of
svn_wc_check_wc()? */
@@ -716,7 +716,7 @@
int wc_format_version;
/* Check if path is a file or a dir. */
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_none)
{
/* Something changed, yet we can't find the local working directory
@@ -801,7 +801,7 @@
int wc_format_version;
/* Check if path is a file or a dir. */
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
/* If file, split the path. */
if (kind == svn_node_file)
@@ -870,7 +870,7 @@
svn_node_kind_t kind;
/* Check if path is a file or a dir. */
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
/* If file, split the path. */
if (kind == svn_node_file)
@@ -946,7 +946,7 @@
tmp_path = extend_with_adm_name (path, NULL, 0, pool, NULL);
- SVN_ERR (svn_io_check_path (tmp_path, kind, pool));
+ SVN_ERR (svn_io_check_path (tmp_path, 0, kind, pool));
if (kind != svn_node_none kind != svn_node_dir)
{
/* If got an error other than dir non-existence, then
Index: subversion/libsvn_wc/lock.c
===================================================================
--- subversion/libsvn_wc/lock.c (revision 4296)
+++ subversion/libsvn_wc/lock.c (working copy)
@@ -202,7 +202,7 @@
svn_node_kind_t kind;
int is_wc;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_wc_check_wc (path, is_wc, pool));
@@ -283,7 +283,7 @@
/* Since no physical lock gets created we must check PATH is not a
file. */
svn_node_kind_t node_kind;
- SVN_ERR (svn_io_check_path (path, node_kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, node_kind, pool));
if (node_kind != svn_node_dir)
return svn_error_createf (SVN_ERR_WC_INVALID_LOCK, NULL,
lock path is not a directory (%s),
@@ -329,7 +329,7 @@
/* If this is not physically a directory, it may have been
deleted say, then ignore it. */
- SVN_ERR (svn_io_check_path (entry_path, kind, pool));
+ SVN_ERR (svn_io_check_path (entry_path, 0, kind, pool));
if (kind != svn_node_dir)
continue;
@@ -561,7 +561,7 @@
const char *lockfile
= svn_wc__adm_path (path, 0, pool, SVN_WC__ADM_LOCK, NULL);
- SVN_ERR (svn_io_check_path (lockfile, kind, pool));
+ SVN_ERR (svn_io_check_path (lockfile, 0, kind, pool));
if (kind == svn_node_file)
*locked = TRUE;
else if (kind == svn_node_none)
@@ -600,7 +600,7 @@
FALSE, pool, SVN_WC__ADM_LOG, NULL);
/* The presence of a log file demands cleanup */
- SVN_ERR (svn_io_check_path (log_path, kind, pool));
+ SVN_ERR (svn_io_check_path (log_path, 0, kind, pool));
*cleanup = (kind == svn_node_file);
return SVN_NO_ERROR;
Index: subversion/libsvn_wc/update_editor.c
===================================================================
--- subversion/libsvn_wc/update_editor.c (revision 4296)
+++ subversion/libsvn_wc/update_editor.c (working copy)
@@ -637,7 +637,7 @@
/* The directory may exist if this is a checkout, otherwise there should
be nothing with this name. */
- SVN_ERR (svn_io_check_path (db-path, kind, db-pool));
+ SVN_ERR (svn_io_check_path (db-path, 0, kind, db-pool));
if (kind != svn_node_none
!(pb-edit_baton-is_checkout kind == svn_node_dir))
return svn_error_createf
@@ -1029,7 +1029,7 @@
### Are editor drives guaranteed not to mention the same name
### twice in the same dir baton? Don't know. */
- SVN_ERR (svn_io_check_path (fb-path, kind, subpool));
+ SVN_ERR (svn_io_check_path (fb-path, 0, kind, subpool));
SVN_ERR (svn_wc_adm_retrieve (adm_access, pb-edit_baton-adm_access,
pb-path, subpool));
SVN_ERR (svn_wc_entry (entry, fb-path, adm_access, FALSE, subpool));
@@ -1607,7 +1607,7 @@
{
svn_node_kind_t wfile_kind = svn_node_unknown;
- SVN_ERR (svn_io_check_path (file_path, wfile_kind, pool));
+ SVN_ERR (svn_io_check_path (file_path, 0, wfile_kind, pool));
if (wfile_kind == svn_node_none) /* working file is missing?! */
{
/* Just copy the new text-base to the file. */
Index: subversion/libsvn_wc/status_editor.c
===================================================================
--- subversion/libsvn_wc/status_editor.c (revision 4296)
+++ subversion/libsvn_wc/status_editor.c (working copy)
@@ -333,7 +333,7 @@
versioned in this working copy, it was probably deleted via this
working copy. No need to report such a thing. */
/* ### use svn_wc_entry() instead? */
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_dir)
dir_path = full_path;
else
Index: subversion/libsvn_wc/questions.c
===================================================================
--- subversion/libsvn_wc/questions.c (revision 4296)
+++ subversion/libsvn_wc/questions.c (working copy)
@@ -50,7 +50,7 @@
svn_error_t *err = SVN_NO_ERROR;
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_none)
{
@@ -131,7 +131,7 @@
const svn_wc_entry_t *entry;
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_dir)
entryname = SVN_WC_ENTRY_THIS_DIR;
else
@@ -321,7 +321,7 @@
svn_node_kind_t kind;
/* Sanity check: if the path doesn't exist, return FALSE. */
- SVN_ERR (svn_io_check_path (filename, kind, subpool));
+ SVN_ERR (svn_io_check_path (filename, 0, kind, subpool));
if (kind != svn_node_file)
{
*modified_p = FALSE;
@@ -345,7 +345,7 @@
is modified. For example, a file scheduled for addition but not
yet committed. */
textbase_filename = svn_wc__text_base_path (filename, 0, subpool);
- SVN_ERR (svn_io_check_path (textbase_filename, kind, subpool));
+ SVN_ERR (svn_io_check_path (textbase_filename, 0, kind, subpool));
if (kind != svn_node_file)
{
*modified_p = TRUE;
@@ -391,7 +391,7 @@
if (entry-conflict_old)
{
path = svn_path_join (dir_path, entry-conflict_old, subpool);
- SVN_ERR (svn_io_check_path (path, kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, subpool));
if (kind == svn_node_file)
*text_conflicted_p = TRUE;
}
@@ -399,7 +399,7 @@
if ((! *text_conflicted_p) (entry-conflict_new))
{
path = svn_path_join (dir_path, entry-conflict_new, subpool);
- SVN_ERR (svn_io_check_path (path, kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, subpool));
if (kind == svn_node_file)
*text_conflicted_p = TRUE;
}
@@ -407,7 +407,7 @@
if ((! *text_conflicted_p) (entry-conflict_wrk))
{
path = svn_path_join (dir_path, entry-conflict_wrk, subpool);
- SVN_ERR (svn_io_check_path (path, kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, subpool));
if (kind == svn_node_file)
*text_conflicted_p = TRUE;
}
@@ -416,7 +416,7 @@
if (entry-prejfile)
{
path = svn_path_join (dir_path, entry-prejfile, subpool);
- SVN_ERR (svn_io_check_path (path, kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, subpool));
if (kind == svn_node_file)
*prop_conflicted_p = TRUE;
}
Index: subversion/libsvn_subr/config_file.c
===================================================================
--- subversion/libsvn_subr/config_file.c (revision 4296)
+++ subversion/libsvn_subr/config_file.c (working copy)
@@ -456,7 +456,7 @@
if (! path)
return SVN_NO_ERROR;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_none)
{
apr_err = apr_dir_make (path, APR_OS_DEFAULT, pool);
@@ -479,7 +479,7 @@
if (! path) /* highly unlikely, since a previous call succeeded */
return SVN_NO_ERROR;
- err = svn_io_check_path (path, kind, pool);
+ err = svn_io_check_path (path, 0, kind, pool);
if (err)
return SVN_NO_ERROR;
@@ -621,7 +621,7 @@
if (! path) /* highly unlikely, since a previous call succeeded */
return SVN_NO_ERROR;
- err = svn_io_check_path (path, kind, pool);
+ err = svn_io_check_path (path, 0, kind, pool);
if (err)
return SVN_NO_ERROR;
@@ -723,7 +723,7 @@
if (! path) /* highly unlikely, since a previous call succeeded */
return SVN_NO_ERROR;
- err = svn_io_check_path (path, kind, pool);
+ err = svn_io_check_path (path, 0, kind, pool);
if (err)
return SVN_NO_ERROR;
Index: subversion/libsvn_subr/io.c
===================================================================
--- subversion/libsvn_subr/io.c (revision 4296)
+++ subversion/libsvn_subr/io.c (working copy)
@@ -124,9 +124,11 @@
svn_error_t *
svn_io_check_path (const char *path,
+ svn_boolean_t resolve_symlinks,
svn_node_kind_t *kind,
apr_pool_t *pool)
{
+ apr_int32_t flags;
apr_finfo_t finfo;
apr_status_t apr_err;
const char *path_native;
@@ -136,9 +138,11 @@
/* Not using svn_io_stat() here because we want to check the
apr_err return anyway. */
+
SVN_ERR (path_from_utf8 (path_native, path, pool));
- apr_err = apr_stat (finfo, path_native,
- (APR_FINFO_MIN | APR_FINFO_LINK), pool);
+
+ flags = resolve_symlinks ? APR_FINFO_MIN : (APR_FINFO_MIN | APR_FINFO_LINK);
+ apr_err = apr_stat (finfo, path_native, flags, pool);
if (apr_err !APR_STATUS_IS_ENOENT(apr_err))
return svn_error_createf
@@ -402,19 +406,19 @@
/* Sanity checks: SRC and DST_PARENT are directories, and
DST_BASENAME doesn't already exist in DST_PARENT. */
- SVN_ERR (svn_io_check_path (src, kind, subpool));
+ SVN_ERR (svn_io_check_path (src, 0, kind, subpool));
if (kind != svn_node_dir)
return svn_error_createf (SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
svn_io_copy_dir: '%s' is not a directory.,
src);
- SVN_ERR (svn_io_check_path (dst_parent, kind, subpool));
+ SVN_ERR (svn_io_check_path (dst_parent, 0, kind, subpool));
if (kind != svn_node_dir)
return svn_error_createf (SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
svn_io_copy_dir: '%s' is not a directory.,
dst_parent);
- SVN_ERR (svn_io_check_path (dst_path, kind, subpool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, kind, subpool));
if (kind != svn_node_none)
return svn_error_createf (SVN_ERR_ENTRY_EXISTS, NULL,
svn_io_copy_dir: '%s' already exists.,
@@ -1726,7 +1730,7 @@
*mimetype = NULL;
/* See if this file even exists, and make sure it really is a file. */
- SVN_ERR (svn_io_check_path (file, kind, pool));
+ SVN_ERR (svn_io_check_path (file, 0, kind, pool));
if (kind != svn_node_file)
return svn_error_createf (SVN_ERR_BAD_FILENAME, NULL,
svn_io_detect_mimetype:
Index: subversion/svnlook/main.c
===================================================================
--- subversion/svnlook/main.c (revision 4296)
+++ subversion/svnlook/main.c (working copy)
@@ -451,7 +451,7 @@
svn_node_kind_t kind;
const char *piece = ((const char **) (path_pieces-elts))[i];
full_path = svn_path_join (full_path, piece, pool);
- SVN_ERR (svn_io_check_path (full_path, kind, pool));
+ SVN_ERR (svn_io_check_path (full_path, 0, kind, pool));
/* Does this path component exist at all? */
if (kind == svn_node_none)
@@ -945,7 +945,7 @@
SVN_ERR (svn_fs_revision_root (base_root, c-fs, base_rev_id, pool));
SVN_ERR (print_diff_tree (root, base_root, tree, , ,
c-no_diff_deleted, pool));
- SVN_ERR (svn_io_check_path (SVNLOOK_TMPDIR, kind, pool));
+ SVN_ERR (svn_io_check_path (SVNLOOK_TMPDIR, 0, kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_io_remove_dir (SVNLOOK_TMPDIR, pool));
}
Index: subversion/libsvn_client/prop_commands.c
===================================================================
--- subversion/libsvn_client/prop_commands.c (revision 4296)
+++ subversion/libsvn_client/prop_commands.c (working copy)
@@ -324,7 +324,7 @@
const char *pdir;
const svn_wc_entry_t *entry;
- SVN_ERR (svn_io_check_path (target, kind, pool));
+ SVN_ERR (svn_io_check_path (target, 0, kind, pool));
if (kind == svn_node_file)
svn_path_split (target, pdir, NULL, pool);
else
Index: subversion/libsvn_client/auth.c
===================================================================
--- subversion/libsvn_client/auth.c (revision 4296)
+++ subversion/libsvn_client/auth.c (working copy)
@@ -65,7 +65,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_dir)
{
SVN_ERR (svn_client__dir_if_wc (auth_dir_p, path, pool));
Index: subversion/libsvn_client/delete.c
===================================================================
--- subversion/libsvn_client/delete.c (revision 4296)
+++ subversion/libsvn_client/delete.c (working copy)
@@ -45,7 +45,7 @@
svn_node_kind_t kind;
svn_wc_adm_access_t *dir_access;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_wc_adm_retrieve (dir_access, adm_access, path, pool));
else
Index: subversion/libsvn_client/revert.c
===================================================================
--- subversion/libsvn_client/revert.c (revision 4296)
+++ subversion/libsvn_client/revert.c (working copy)
@@ -59,7 +59,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_dir)
{
/* While we could add the parent to the access baton set, there
Index: subversion/libsvn_client/diff.c
===================================================================
--- subversion/libsvn_client/diff.c (revision 4296)
+++ subversion/libsvn_client/diff.c (working copy)
@@ -402,7 +402,7 @@
const char *copyfrom_url;
const char *child;
- SVN_ERR (svn_io_check_path (mine, kind, subpool));
+ SVN_ERR (svn_io_check_path (mine, 0, kind, subpool));
switch (kind)
{
case svn_node_none:
@@ -467,7 +467,7 @@
svn_wc_adm_access_t *parent_access;
const char *parent_path;
- SVN_ERR (svn_io_check_path (mine, kind, subpool));
+ SVN_ERR (svn_io_check_path (mine, 0, kind, subpool));
switch (kind)
{
case svn_node_file:
@@ -509,7 +509,7 @@
assert (child != NULL);
copyfrom_url = svn_path_join (merge_b-url, child, subpool);
- SVN_ERR (svn_io_check_path (path, kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, subpool));
switch (kind)
{
case svn_node_none:
@@ -557,7 +557,7 @@
svn_wc_adm_access_t *parent_access;
const char *parent_path;
- SVN_ERR (svn_io_check_path (path, kind, subpool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, subpool));
switch (kind)
{
case svn_node_dir:
@@ -1060,7 +1060,7 @@
recurse,
diff_editor, diff_edit_baton));
- SVN_ERR (svn_io_check_path (path2, kind, pool));
+ SVN_ERR (svn_io_check_path (path2, 0, kind, pool));
if (kind == svn_node_dir)
SVN_ERR (svn_wc_adm_retrieve (dir_access, adm_access, path2, pool));
else
Index: subversion/libsvn_client/copy.c
===================================================================
--- subversion/libsvn_client/copy.c (revision 4296)
+++ subversion/libsvn_client/copy.c (working copy)
@@ -79,7 +79,7 @@
svn_wc_adm_access_t *adm_access, *src_access;
/* Verify that SRC_PATH exists. */
- SVN_ERR (svn_io_check_path (src_path, src_kind, pool));
+ SVN_ERR (svn_io_check_path (src_path, 0, src_kind, pool));
if (src_kind == svn_node_none)
return svn_error_createf (SVN_ERR_NODE_UNKNOWN_KIND, NULL,
path `%s' does not exist., src_path);
@@ -89,7 +89,7 @@
DST_PATH is a dir, then SRC_PATH's basename will become a new
file or dir within DST_PATH itself. Else if it's a file, just
error out. */
- SVN_ERR (svn_io_check_path (dst_path, dst_kind, pool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, dst_kind, pool));
if (dst_kind == svn_node_none)
{
svn_path_split (dst_path, dst_parent, base_name, pool);
@@ -443,7 +443,7 @@
svn_node_kind_t kind;
apr_hash_this (hi, key, keylen, );
- SVN_ERR (svn_io_check_path ((const char *)key, kind, pool));
+ SVN_ERR (svn_io_check_path ((const char *)key, 0, kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_io_remove_file ((const char *)key, pool));
}
@@ -589,7 +589,7 @@
}
/* Crawl the working copy for commit items. */
- SVN_ERR (svn_io_check_path (base_path, src_kind, pool));
+ SVN_ERR (svn_io_check_path (base_path, 0, src_kind, pool));
if (src_kind == svn_node_dir)
SVN_ERR (svn_wc_adm_retrieve (dir_access, adm_access, base_path, pool));
else
@@ -751,7 +751,7 @@
*/
/* First, figure out about dst. */
- SVN_ERR (svn_io_check_path (dst_path, dst_kind, pool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, dst_kind, pool));
if (dst_kind == svn_node_dir)
{
const char *base_name;
@@ -768,7 +768,7 @@
/* Now that dst_path has possibly been reset, check that there's
nothing in the way of the upcoming checkout. */
- SVN_ERR (svn_io_check_path (dst_path, dst_kind, pool));
+ SVN_ERR (svn_io_check_path (dst_path, 0, dst_kind, pool));
if (dst_kind != svn_node_none)
return svn_error_createf (SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
`%s' is in the way, dst_path);
Index: subversion/libsvn_client/update.c
===================================================================
--- subversion/libsvn_client/update.c (revision 4296)
+++ subversion/libsvn_client/update.c (working copy)
@@ -122,7 +122,7 @@
recurse,
update_editor, update_edit_baton));
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
SVN_ERR (svn_wc_adm_retrieve (dir_access, adm_access,
(kind == svn_node_dir
? path
Index: subversion/libsvn_client/cleanup.c
===================================================================
--- subversion/libsvn_client/cleanup.c (revision 4296)
+++ subversion/libsvn_client/cleanup.c (working copy)
@@ -40,7 +40,7 @@
{
svn_node_kind_t kind;
- SVN_ERR (svn_io_check_path (dir, kind, pool));
+ SVN_ERR (svn_io_check_path (dir, 0, kind, pool));
if (kind != svn_node_dir)
return svn_error_createf (SVN_ERR_WC_NOT_DIRECTORY, NULL,
Cannot cleanup '%s' -- not a directory,
Index: subversion/libsvn_client/commit.c
===================================================================
--- subversion/libsvn_client/commit.c (revision 4296)
+++ subversion/libsvn_client/commit.c (working copy)
@@ -353,7 +353,7 @@
pool, root_baton));
/* Import a file or a directory tree. */
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
/* Note that there is no need to check whether PATH's basename is
the same name that we reserve for our admistritave
@@ -589,7 +589,7 @@
svn_node_kind_t kind;
const char *base_dir = path;
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if (kind == svn_node_file)
svn_path_split (path, base_dir, NULL, pool);
SVN_ERR (get_ra_editor (ra_baton, session, ra_lib, NULL,
@@ -639,7 +639,7 @@
svn_node_kind_t kind;
apr_hash_this (hi, key, NULL, );
- SVN_ERR (svn_io_check_path ((const char *)key, kind, pool));
+ SVN_ERR (svn_io_check_path ((const char *)key, 0, kind, pool));
if (kind == svn_node_file)
SVN_ERR (svn_io_remove_file ((const char *)key, pool));
}
Index: subversion/libsvn_client/add.c
===================================================================
--- subversion/libsvn_client/add.c (revision 4296)
+++ subversion/libsvn_client/add.c (working copy)
@@ -135,7 +135,7 @@
SVN_ERR (svn_wc_adm_open (adm_access, NULL, parent_path, TRUE, TRUE, pool));
- SVN_ERR (svn_io_check_path (path, kind, pool));
+ SVN_ERR (svn_io_check_path (path, 0, kind, pool));
if ((kind == svn_node_dir) recursive)
err = add_dir_recursive (path, adm_access,
notify_func, notify_baton, pool);
Index: subversion/libsvn_repos/hooks.c
===================================================================
--- subversion/libsvn_repos/hooks.c (revision 4296)
+++ subversion/libsvn_repos/hooks.c (working copy)
@@ -117,7 +117,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_start_commit_hook (repos, pool);
- if ((! svn_io_check_path (hook, kind, pool))
+ if ((! svn_io_check_path (hook, 1, kind, pool))
(kind == svn_node_file))
{
const char *args[4];
@@ -144,7 +144,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_pre_commit_hook (repos, pool);
- if ((! svn_io_check_path (hook, kind, pool))
+ if ((! svn_io_check_path (hook, 1, kind, pool))
(kind == svn_node_file))
{
const char *args[4];
@@ -171,7 +171,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_post_commit_hook (repos, pool);
- if ((! svn_io_check_path (hook, kind, pool))
+ if ((! svn_io_check_path (hook, 1, kind, pool))
(kind == svn_node_file))
{
const char *args[4];
@@ -202,7 +202,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_pre_revprop_change_hook (repos, pool);
- if ((! svn_io_check_path (hook, kind, pool))
+ if ((! svn_io_check_path (hook, 1, kind, pool))
(kind == svn_node_file))
{
const char *args[6];
@@ -248,7 +248,7 @@
svn_node_kind_t kind;
const char *hook = svn_repos_post_revprop_change_hook (repos, pool);
- if ((! svn_io_check_path (hook, kind, pool))
+ if ((! svn_io_check_path (hook, 1, kind, pool))
(kind == svn_node_file))
{
const char *args[6];
--
-- Josef Wolf -- jw@raven.inka.de --
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] make symlinked hook-scripts work again
Posted by Philip Martin <ph...@codematters.co.uk>.
Josef Wolf <jw...@raven.inka.de> writes:
> I don't think so. I have double-checked now: the patched version
> behaves _exactly_[1] the same as the original version at those test
> cases. Please note that I made "(cd wc; ln -s foo bar)" while you
> typed "ln -s wc/foo wc/bar". See the difference? It appears that
> this are actually two different testcases! Both, the original and
> the patched version, will happily commit when the symlink-target
> have no path-components.
No, it was my mistake. My "ln -s wc/foo wc/bar" command creates a
symlink in wc like "bar -> wc/foo" which means that bar points to a
file that doesn't exist. I didn't intend that. It doesn't alter the
fact that Subversion should not attempt to commit symlinks.
--
Philip Martin
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] make symlinked hook-scripts work again
Posted by Josef Wolf <jw...@raven.inka.de>.
On Thu, Jan 09, 2003 at 04:58:11PM +0000, Philip Martin wrote:
[ ... ]
> > Does everybody agree that this should be bombed out?
> That should not commit. When I try it, it does not commit
[ ... ]
> Is your patch responsible for allowing that to commit?
I don't think so. I have double-checked now: the patched version
behaves _exactly_[1] the same as the original version at those test
cases. Please note that I made "(cd wc; ln -s foo bar)" while you
typed "ln -s wc/foo wc/bar". See the difference? It appears that
this are actually two different testcases! Both, the original and
the patched version, will happily commit when the symlink-target
have no path-components.
[1] some line numbers in the error messages and names for temporary
files are different, of course...
> Whether it's
> your patch or not, relying on an apr_file_copy error is not very good,
> Subversion should detect the problem earlier.
You're right. But doing two^Wthree steps at the same time is often
the cause of falldowns. I think the three topics we are discussing
now (symlink-hooks, symlink-target-with-no-path-components and
misleading-error-message-on-symlink-commit) are pretty much
independent things and should therefore be three different commits.
BTW: While fiddling with those testcases, I noticed that
"svn ci -m message wc" behave somewhat strange. Is this by accident or
is it by intention?
Here come the test cases I have tried so far. Please make sure you run
them _exactly_ as they are if you want reliable comparisons.
#! /bin/sh -x
cd ~/local || exit
mkdir t
cd t || exit
echo case 1
# aborts with "unsupported feature" -- seems to be OK
rm -rf test/ wc
svnadmin create test
svn co file:///`pwd`/test wc
touch wc/foo
ln -s wc/foo wc/bar
svn add wc/bar
echo case 2
# aborts with "file not found" in svn_io_copy_file()
rm -rf test/ wc
svnadmin create test
svn co file:///`pwd`/test wc
touch wc/foo wc/bar
svn add wc/bar
rm wc/bar
ln -s wc/foo wc/bar
svn ci wc
echo case 3
# succeeds!
rm -rf test/ wc
svnadmin create test
svn co file:///`pwd`/test wc
touch wc/foo wc/bar
svn add wc/bar
rm wc/bar
(cd wc; ln -s foo bar)
svn ci wc
echo case 4
# aborts with "file not found" in svn_io_copy_file()
rm -rf test/ wc
svnadmin create test
svn co file:///`pwd`/test wc
touch wc/foo wc/bar
svn add wc/bar
rm wc/bar
ln -s wc/foo wc/bar
(cd wc; svn ci -m xx)
echo case 5
# aborts with "file not found" in svn_io_copy_file()
rm -rf test/ wc
svnadmin create test
svn co file:///`pwd`/test wc
touch wc/foo wc/bar
(cd wc; svn add bar)
rm wc/bar
ln -s wc/foo wc/bar
(cd wc; svn ci -m xx)
echo case 6
# succeeds!
rm -rf test/ wc
svnadmin create test
svn co file:///`pwd`/test wc
touch wc/foo wc/bar
(cd wc; svn add bar
rm bar
ln -s foo bar
svn ci -m xx
)
echo case 7
# aborts with "file not found" in svn_io_copy_file()
rm -rf test/ wc
svnadmin create test
svn co file:///`pwd`/test wc
touch wc/foo wc/bar
(cd wc; svn add bar)
rm wc/bar
ln -s wc/foo wc/bar
(cd wc; svn ci -m xx)
cd ..; rm -rf t
--
-- Josef Wolf -- jw@raven.inka.de --
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] make symlinked hook-scripts work again
Posted by Philip Martin <ph...@codematters.co.uk>.
Josef Wolf <jw...@raven.inka.de> writes:
> Third case:
> ===========
> $ touch foo bar
> $ svn add bar
> A bar
> $ rm bar
> $ ln -s foo bar
> $ svn ci -m test
> Adding bar
> Transmitting file data .
> Committed revision 1.
>
> Does everybody agree that this should be bombed out?
That should not commit. When I try it, it does not commit
$ svnadmin create repo
$ svn co file://`pwd`/repo wc
$ svn add wc/bar
$ rm wc/bar
$ ln -s wc/foo wc/bar
$ svn ci wc
Adding wc/bar
Transmitting file data .../svn/subversion/libsvn_client/commit.c:669: (apr_err=2)
svn: No such file or directory
svn: Commit failed (details follow):
../svn/subversion/libsvn_subr/io.c:301: (apr_err=2)
svn: svn_io_copy_file: error copying /home/pm/sw/subversion/obj/wc/bar to /home/pm/sw/subversion/obj/wc/.svn/tmp/text-base/bar.svn-base.62956.00001.tmp
../svn/subversion/clients/cmdline/util.c:306: (apr_err=2)
svn: Your commit message was left in a temporary file:
/home/pm/sw/subversion/obj/wc/svn-commit.63104.00001.tmp
Is your patch responsible for allowing that to commit? Whether it's
your patch or not, relying on an apr_file_copy error is not very good,
Subversion should detect the problem earlier.
--
Philip Martin
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] make symlinked hook-scripts work again
Posted by Josef Wolf <jw...@raven.inka.de>.
On Thu, Jan 09, 2003 at 12:37:38AM +0100, Josef Wolf wrote:
Hello again...
> Here comes the patch to the symlink-issue discussed in the thread
> "CGI for repository administration". This patch is relative to r4296.
> It passes the "make check" with no errors and behaves exactly the same
> as unpatched r4296 on the three cases mentioned by Philip.
I decided not to include changes to those three cases for two reasons:
1. IMHO it would be a bad idea to mix such a large (though trivial)
change with an other change.
2. I think the proper behavior in those cases should be discussed first
on the list.
OK, now let's go to the discussion:
The first case:
===============
$ cd wc
$ touch foo bar
$ ln -s foo baz
$ svn add baz
/home/jw/local/l/subvers/src/svn/subversion/libsvn_wc/adm_ops.c:785: (apr_err=200007)
svn: Trying to use an unsupported feature
svn: Unsupported node kind for path 'baz'.
Looks sane to me.
Second case:
============
$ touch foo bar
$ svn add bar
A bar
$ rm bar
$ ln -s foo bar
$ svn st
? foo
Should this be aborted? IMHO this would be too harsh.
Should it just print "? bar" additionally? Bad idea, too. This
could easily be overseen.
Third case:
===========
$ touch foo bar
$ svn add bar
A bar
$ rm bar
$ ln -s foo bar
$ svn ci -m test
Adding bar
Transmitting file data .
Committed revision 1.
Does everybody agree that this should be bombed out?
--
-- Josef Wolf -- jw@raven.inka.de --
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org