You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2019/02/13 10:37:50 UTC
svn commit: r1853483 - in /subversion/trunk/subversion: libsvn_repos/dump.c
tests/cmdline/svnadmin_tests.py
Author: julianfoad
Date: Wed Feb 13 10:37:50 2019
New Revision: 1853483
URL: http://svn.apache.org/viewvc?rev=1853483&view=rev
Log:
Fix #4760 "Missing children when svnadmin dump --include/exclude converts
copy-dir to add-dir".
Follow-up to r1811992: Canonicalize PATH before passing it to the FILTER_FUNC.
In some cases (e.g. for nodes under copied directories) PATH passed by
repos layer to AUTHZ_FUNC may be non-canonical (missing leading '/'). This
causes FILTER_FUNC implemented in svnadmin to wrongly report PATH as "not
included".
* subversion/libsvn_repos/dump.c
(dump_filter_authz_func): Canonicalize PATH before passing it
to the FILTER_FUNC. Add comment.
* subversion/tests/cmdline/svnadmin_tests.py
(dump_include_copied_directory): New.
(test_list): Add new test to table.
Patch by: sergey.raevskiy{_AT_}visualsvn.com
Modified:
subversion/trunk/subversion/libsvn_repos/dump.c
subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py
Modified: subversion/trunk/subversion/libsvn_repos/dump.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/dump.c?rev=1853483&r1=1853482&r2=1853483&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/dump.c (original)
+++ subversion/trunk/subversion/libsvn_repos/dump.c Wed Feb 13 10:37:50 2019
@@ -44,6 +44,7 @@
#include "private/svn_sorts_private.h"
#include "private/svn_utf_private.h"
#include "private/svn_cache.h"
+#include "private/svn_fspath.h"
#define ARE_VALID_COPY_ARGS(p,r) ((p) && SVN_IS_VALID_REVNUM(r))
@@ -1996,6 +1997,11 @@ dump_filter_authz_func(svn_boolean_t *al
{
dump_filter_baton_t *b = baton;
+ /* For some nodes (e.g. files under copied directory) PATH may be
+ * non-canonical (missing leading '/'). Canonicalize PATH before
+ * passing it to FILTER_FUNC. */
+ path = svn_fspath__canonicalize(path, pool);
+
return svn_error_trace(b->filter_func(allowed, root, path, b->filter_baton,
pool));
}
Modified: subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py?rev=1853483&r1=1853482&r2=1853483&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py Wed Feb 13 10:37:50 2019
@@ -3920,6 +3920,51 @@ def recover_prunes_rep_cache_when_disabl
check_recover_prunes_rep_cache(sbox, enable_rep_sharing=False)
+@Issue(4760)
+def dump_include_copied_directory(sbox):
+ "include copied directory with nested nodes"
+
+ sbox.build(create_wc=False)
+
+ svntest.actions.run_and_verify_svn(svntest.verify.AnyOutput, [], "copy",
+ sbox.repo_url + '/A/D',
+ sbox.repo_url + '/COPY',
+ "-m", "Create branch.")
+
+ # Dump repository with only /COPY path included.
+ _, dump, _ = svntest.actions.run_and_verify_svnadmin(None, [],
+ 'dump', '-q',
+ '--include', '/COPY',
+ sbox.repo_dir)
+
+ # Load repository from dump.
+ sbox2 = sbox.clone_dependent()
+ sbox2.build(create_wc=False, empty=True)
+ load_and_verify_dumpstream(sbox2, None, [], None, False, dump)
+
+ # Check log.
+ expected_output = svntest.verify.RegexListOutput([
+ '-+\\n',
+ 'r2\ .*\n',
+ # Only '/COPY' is added
+ re.escape('Changed paths:\n'),
+ re.escape(' A /COPY'),
+ re.escape(' A /COPY/G'),
+ re.escape(' A /COPY/G/pi'),
+ re.escape(' A /COPY/G/rho'),
+ re.escape(' A /COPY/G/tau'),
+ re.escape(' A /COPY/H'),
+ re.escape(' A /COPY/H/chi'),
+ re.escape(' A /COPY/H/omega'),
+ re.escape(' A /COPY/H/psi'),
+ re.escape(' A /COPY/gamma'),
+ '-+\\n',
+ 'r1\ .*\n',
+ '-+\\n'
+ ])
+ svntest.actions.run_and_verify_svn(expected_output, [],
+ 'log', '-v', '-q', sbox2.repo_url)
+
########################################################################
# Run the tests
@@ -3997,6 +4042,7 @@ test_list = [ None,
dump_no_canonicalize_svndate,
recover_prunes_rep_cache_when_enabled,
recover_prunes_rep_cache_when_disabled,
+ dump_include_copied_directory,
]
if __name__ == '__main__':