You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2010/08/01 10:40:43 UTC
svn commit: r981171 - in /subversion/trunk/subversion: libsvn_wc/adm_ops.c
libsvn_wc/workqueue.c tests/cmdline/revert_tests.py
Author: rhuijben
Date: Sun Aug 1 08:40:42 2010
New Revision: 981171
URL: http://svn.apache.org/viewvc?rev=981171&view=rev
Log:
Fix the revert_tests.py 16 "status after schedule-delete, revert, and local
rm" scenario, by making revert capable of restoring missing directories.
* subversion/libsvn_wc/adm_ops.c
(revert_internal): Check to see if the node should be handled as
unversioned. Allow reverting missing directories in single-db.
Allow restoring the future symlink type.
* subversion/libsvn_wc/workqueue.c
(run_revert): Implement reverting a missing directory for single-db.
* subversion/tests/cmdline/revert_tests.py
(status_of_missing_dir_after_revert): Extend test to assume missing
directories can be restored in single-db mode.
Modified:
subversion/trunk/subversion/libsvn_wc/adm_ops.c
subversion/trunk/subversion/libsvn_wc/workqueue.c
subversion/trunk/subversion/tests/cmdline/revert_tests.py
Modified: subversion/trunk/subversion/libsvn_wc/adm_ops.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/adm_ops.c?rev=981171&r1=981170&r2=981171&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/adm_ops.c (original)
+++ subversion/trunk/subversion/libsvn_wc/adm_ops.c Sun Aug 1 08:40:42 2010
@@ -1653,7 +1653,17 @@ revert_internal(svn_wc__db_t *db,
else if (err)
return svn_error_return(err);
else
- unversioned = FALSE;
+ switch (status)
+ {
+ case svn_wc__db_status_not_present:
+ case svn_wc__db_status_absent:
+ case svn_wc__db_status_excluded:
+ unversioned = TRUE;
+ break;
+ default:
+ unversioned = FALSE;
+ break;
+ }
SVN_ERR(svn_wc__db_op_read_tree_conflict(&tree_conflict, db, local_abspath,
pool, pool));
@@ -1666,9 +1676,13 @@ revert_internal(svn_wc__db_t *db,
SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, pool));
if (!unversioned && (db_kind == svn_wc__db_kind_dir))
{
+#ifndef SVN_WC__SINGLE_DB
if ((disk_kind != svn_node_dir)
&& (status != svn_wc__db_status_added)
&& (status != svn_wc__db_status_obstructed_add))
+#else
+ if (disk_kind == svn_node_file)
+#endif
{
/* When the directory itself is missing, we can't revert without
hitting the network. Someday a '--force' option will
@@ -1687,7 +1701,9 @@ revert_internal(svn_wc__db_t *db,
/* Safeguard 2: can we handle this entry's recorded kind? */
if (!unversioned
- && (db_kind != svn_wc__db_kind_file) && (db_kind != svn_wc__db_kind_dir))
+ && (db_kind != svn_wc__db_kind_file)
+ && (db_kind != svn_wc__db_kind_dir)
+ && (db_kind != svn_wc__db_kind_symlink))
return svn_error_createf
(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
_("Cannot revert '%s': unsupported entry node kind"),
Modified: subversion/trunk/subversion/libsvn_wc/workqueue.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/workqueue.c?rev=981171&r1=981170&r2=981171&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/workqueue.c (original)
+++ subversion/trunk/subversion/libsvn_wc/workqueue.c Sun Aug 1 08:40:42 2010
@@ -293,6 +293,16 @@ run_revert(svn_wc__db_t *db,
{
SVN__NOT_IMPLEMENTED();
}
+#ifdef SVN_WC__SINGLE_DB
+ else if (kind == svn_wc__db_kind_dir)
+ {
+ svn_node_kind_t disk_kind;
+ SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, scratch_pool));
+
+ if (disk_kind == svn_node_none)
+ SVN_ERR(svn_io_dir_make(local_abspath, APR_OS_DEFAULT, scratch_pool));
+ }
+#endif
if (kind == svn_wc__db_kind_dir)
parent_abspath = local_abspath;
Modified: subversion/trunk/subversion/tests/cmdline/revert_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/revert_tests.py?rev=981171&r1=981170&r2=981171&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/revert_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/revert_tests.py Sun Aug 1 08:40:42 2010
@@ -740,20 +740,35 @@ def status_of_missing_dir_after_revert(s
svntest.actions.run_and_verify_svn(None, expected_output, [], "revert",
A_D_G_path)
- expected_output = svntest.verify.UnorderedOutput(
- ["D " + os.path.join(A_D_G_path, "pi") + "\n",
+ deletes = [
+ "D " + os.path.join(A_D_G_path, "pi") + "\n",
"D " + os.path.join(A_D_G_path, "rho") + "\n",
- "D " + os.path.join(A_D_G_path, "tau") + "\n"])
+ "D " + os.path.join(A_D_G_path, "tau") + "\n"
+ ]
+ expected_output = svntest.verify.UnorderedOutput(deletes)
svntest.actions.run_and_verify_svn(None, expected_output, [],
"status", wc_dir)
svntest.main.safe_rmtree(A_D_G_path)
- expected_output = svntest.verify.UnorderedOutput(
- ["! " + A_D_G_path + "\n"])
+ expected_output = ["! " + A_D_G_path + "\n"]
+
+ if svntest.main.wc_is_singledb(wc_dir):
+ expected_output.extend(deletes)
+
+ expected_output = svntest.verify.UnorderedOutput(expected_output)
+
svntest.actions.run_and_verify_svn(None, expected_output, [], "status",
wc_dir)
+ # When using single-db, we can get back to the virginal state.
+ if svntest.main.wc_is_singledb(wc_dir):
+ svntest.actions.run_and_verify_svn(None, None, [], "revert",
+ "-R", A_D_G_path)
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
#----------------------------------------------------------------------
# Test for issue #2804 with replaced directory
def status_of_missing_dir_after_revert_replaced_with_history_dir(sbox):