subversion-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Shahaf <...@daniel.shahaf.name>
Subject Re: Svnadmin dump with include can not dump the subdir into add when it's parent path was a branch
Date Sat, 21 Mar 2020 17:35:17 GMT
[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

Mime
View raw message