This script: [[[ #!/bin/sh svnadmin=subversion/svnadmin/svnadmin rm -rf r $svnadmin create --pre-1.6-compatible r ./subversion/svnrdump/svnrdump file://`pwd`/r -r1:2 ]]]
complains about 'min-unpacked-revprop' not found: [[[ SVN-fs-dump-format-version: 3 subversion/svnrdump/svnrdump.c:136: (apr_err=2) subversion/libsvn_ra/ra_loader.c:1084: (apr_err=2) subversion/libsvn_repos/fs-wrap.c:406: (apr_err=2) subversion/libsvn_fs_fs/fs_fs.c:2832: (apr_err=2) subversion/libsvn_fs_fs/fs_fs.c:2832: (apr_err=2) subversion/libsvn_fs_fs/fs_fs.c:1156: (apr_err=2) subversion/libsvn_subr/io.c:2724: (apr_err=2) svn: Can't open file '/home/daniel/src/svn/trunk.d/r/db/min-unpacked-revprop': No such file or directory shell returned 1 ]]] even though it shouldn't touch that file at all, because that a format-3 filesystem isn't expected to contain that file. The last hunk of the following patch fixes this issue (it causes a proper "No such revision 1" error). The remaining hunks add assertions(!) and fix a potential similar issue in svn_fs_fs__path_rev_absolute(). Comments? More places that need to be updated? [[[ Index: subversion/libsvn_fs_fs/fs_fs.c =================================================================== --- subversion/libsvn_fs_fs/fs_fs.c (revision 965128) +++ subversion/libsvn_fs_fs/fs_fs.c (working copy) @@ -250,20 +250,25 @@ svn_fs_fs__path_rev_absolute(const char **path, svn_revnum_t rev, apr_pool_t *pool) { + fs_fs_data_t *ffd = fs->fsap_data; + + /* Initialize the return variable. */ + *path = path_rev(fs, rev, pool); + + if (ffd->format < SVN_FS_FS__MIN_PACKED_FORMAT) + return SVN_NO_ERROR; + if (! is_packed_rev(fs, rev)) { svn_node_kind_t kind; - /* Initialize the return variable. */ - *path = path_rev(fs, rev, pool); - SVN_ERR(svn_io_check_path(*path, &kind, pool)); if (kind == svn_node_file) { /* *path is already set correctly. */ return SVN_NO_ERROR; } - else + else if (ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT) { /* Someone must have run 'svnadmin pack' while this fs object * was open. */ @@ -1167,6 +1172,8 @@ update_min_unpacked_rev(svn_fs_t *fs, apr_pool_t * { fs_fs_data_t *ffd = fs->fsap_data; + SVN_ERR_ASSERT(ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT); + return read_min_unpacked_rev(&ffd->min_unpacked_rev, path_min_unpacked_rev(fs, pool), pool); @@ -1177,6 +1184,8 @@ update_min_unpacked_revprop(svn_fs_t *fs, apr_pool { fs_fs_data_t *ffd = fs->fsap_data; + SVN_ERR_ASSERT(ffd->format >= SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT); + return read_min_unpacked_rev(&ffd->min_unpacked_revprop, path_min_unpacked_revprop(fs, pool), pool); @@ -2821,9 +2830,11 @@ svn_fs_fs__revision_proplist(apr_hash_t **proplist apr_pool_t *pool) { svn_error_t *err; + fs_fs_data_t *ffd = fs->fsap_data; err = revision_proplist(proplist_p, fs, rev, pool); - if (err && err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION) + if (err && err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION + && ffd->format >= SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT) { /* If a pack is occurring simultaneously, the min-unpacked-revprop value could change, so reload it and then attempt to fetch these revprops ]]]