[moving to dev@; please remove users@ from replies] 钱海远(Nathan) wrote on Sat, 21 Mar 2020 06:12 +0000: > I found the there is a BUG in subversion 1.10.6. > > Svnadmin dump with include can not dump the subdir into add when it's parent > path was a branch: > 1. 1、/A was copy from/XX , revision was 50, it the first revision of /A; 2. > 2、There is a subdir named /A/subdir, and several files and dir under > /A/subdir; 3. 3、Try to run “svnadmin dump /data/repos_root --include > /A/subdir >a” . The expected dump file will include /A/subdir(revision 50) > into add. But in fact there was nothing. > 4. 4、I was try to fix this bug in the svnadmin.c , a function named > ary_prefix_match. If the change list is the parent dir for include path, it > return true. Then the dump file will include /A/subdir and it's subdir or > subfile into add , but regrettably, the dump file will also include /A into > add.
钱海远(Nathan) wrote on Sat, 21 Mar 2020 06:12 +0000: > --- C:/Users/QIANHA~1/AppData/Local/Temp/svnadmin.c-rev30397.svn001.tmp.c > ____ ____ 25 11:51:32 2020 > +++ C:/Users/QIANHA~1/AppData/Local/Temp/svnadmin.c-rev30398.svn000.tmp.c > ____ ____ 21 12:58:58 2020 > @@ -1297,3 +1297,3 @@ ary_prefix_match(const apr_array_header_t *pfxlist > - if (path_len < pfx_len) > - continue; > - if (strncmp(path, pfx, pfx_len) == 0 > + /*if (path_len < pfx_len) > + continue;*/ > + if ((strncmp(path, pfx, pfx_len) == 0 > @@ -1300,0 +1301,3 @@ ary_prefix_match(const apr_array_header_t *pfxlist > + || (strncmp(pfx,path, path_len) == 0 > + && (path_len == 1 || path[path_len] == '\0' || path[path_len] == > '/')) > + ) Thanks for the patch. I don't see any obvious problems with this approach. However, the patch as it stands causes a regression: [[[ W: /home/daniel/src/svn/t1/./subversion/libsvn_repos/load.c:667, W: /home/daniel/src/svn/t1/./subversion/libsvn_repos/load-fs-vtable.c:718, W: /home/daniel/src/svn/t1/./subversion/libsvn_repos/load-fs-vtable.c:591, W: /home/daniel/src/svn/t1/./subversion/libsvn_fs/fs-loader.c:1482, W: /home/daniel/src/svn/t1/./subversion/libsvn_fs_fs/tree.c:2524, W: /home/daniel/src/svn/t1/./subversion/libsvn_fs_fs/tree.c:1145: (apr_err=SVN_ERR_FS_NOT_FOUND) W: svnadmin: E160013: File not found: transaction '0-0', path '/A/B/F' W: CWD: /tmp/svn/subversion/tests/cmdline W: EXCEPTION: Failure: Command failed: "/tmp/svn/subversion/svnadmin/svnadmin load --quiet svn-test-work/repositories/svnadmin_tests-60-1"; exit code 1 Traceback (most recent call last): File "/home/daniel/src/svn/t1/subversion/tests/cmdline/svntest/main.py", line 1931, in run rc = self.pred.run(sandbox) File "/home/daniel/src/svn/t1/subversion/tests/cmdline/svntest/testcase.py", line 178, in run result = self.func(sandbox) File "/home/daniel/src/svn/t1/subversion/tests/cmdline/svnadmin_tests.py", line 3510, in dump_exclude load_and_verify_dumpstream(sbox2, None, [], None, False, dump) File "/home/daniel/src/svn/t1/subversion/tests/cmdline/svnadmin_tests.py", line 304, in load_and_verify_dumpstream 'load', '--quiet', sbox.repo_dir, *varargs) File "/home/daniel/src/svn/t1/subversion/tests/cmdline/svntest/main.py", line 666, in run_command_stdin '"; exit code ' + str(exit_code)) svntest.Failure: Command failed: "/tmp/svn/subversion/svnadmin/svnadmin load --quiet svn-test-work/repositories/svnadmin_tests-60-1"; exit code 1 FAIL: svnadmin_tests.py 60: svnadmin dump with excluded paths ]]] So, I guess the new condition should be applied to --include's but not to --exclude's? Cheers, Daniel