Index: subversion/libsvn_fs_fs/fs_fs.c =================================================================== --- subversion/libsvn_fs_fs/fs_fs.c (revision 26130) +++ subversion/libsvn_fs_fs/fs_fs.c (working copy) @@ -1809,6 +1809,7 @@ int i; apr_pool_t *iterpool; + proplist = apr_hash_make(pool); iterpool = svn_pool_create(pool); for (i = 0; i < SVN_ESTALE_RETRY_COUNT; i++) { @@ -1836,10 +1837,13 @@ return err; } - proplist = apr_hash_make(pool); + SVN_ERR(svn_hash__clear(proplist)); + SVN_RETRY_ESTALE(err, + svn_hash_read2(proplist, + svn_stream_from_aprfile(revprop_file, + iterpool), + SVN_HASH_TERMINATOR, pool)); - SVN_RETRY_ESTALE(err, svn_hash_read(proplist, revprop_file, pool)); - SVN_IGNORE_ESTALE(err, svn_io_file_close(revprop_file, iterpool)); break; @@ -3353,11 +3357,13 @@ /* Open the transaction properties file. */ SVN_ERR(svn_io_file_open(&txn_prop_file, path_txn_props(fs, txn_id, pool), - APR_READ | APR_CREATE | APR_BUFFERED, + APR_READ | APR_BUFFERED, APR_OS_DEFAULT, pool)); /* Read in the property list. */ - SVN_ERR(svn_hash_read(proplist, txn_prop_file, pool)); + SVN_ERR(svn_hash_read2(proplist, + svn_stream_from_aprfile(txn_prop_file, pool), + SVN_HASH_TERMINATOR, pool)); SVN_ERR(svn_io_file_close(txn_prop_file, pool)); @@ -3372,8 +3378,13 @@ { apr_file_t *txn_prop_file; apr_hash_t *txn_prop = apr_hash_make(pool); + svn_error_t *err; - SVN_ERR(get_txn_proplist(txn_prop, txn->fs, txn->id, pool)); + err = get_txn_proplist(txn_prop, txn->fs, txn->id, pool); + if (err && (APR_STATUS_IS_ENOENT(err->apr_err))) /* doesn't exist yet */ + svn_error_clear(err); + else if (err) + return err; apr_hash_set(txn_prop, name, APR_HASH_KEY_STRING, value); @@ -3405,11 +3416,13 @@ /* Open the transaction mergeinfo file. */ SVN_ERR(svn_io_file_open(&txn_minfo_file, path_txn_mergeinfo(fs, txn_id, pool), - APR_READ | APR_CREATE | APR_BUFFERED, + APR_READ | APR_BUFFERED, APR_OS_DEFAULT, pool)); /* Read in the property list. */ - SVN_ERR(svn_hash_read(minfo, txn_minfo_file, pool)); + SVN_ERR(svn_hash_read2(minfo, + svn_stream_from_aprfile(txn_minfo_file, pool), + SVN_HASH_TERMINATOR, pool)); SVN_ERR(svn_io_file_close(txn_minfo_file, pool)); @@ -3426,8 +3439,13 @@ { apr_file_t *txn_minfo_file; apr_hash_t *txn_minfo = apr_hash_make(pool); + svn_error_t *err; - SVN_ERR(get_txn_mergeinfo(txn_minfo, txn->fs, txn->id, pool)); + err = get_txn_mergeinfo(txn_minfo, txn->fs, txn->id, pool); + if (err && (APR_STATUS_IS_ENOENT(err->apr_err))) /* doesn't exist yet */ + svn_error_clear(err); + else if (err) + return err; apr_hash_set(txn_minfo, name, APR_HASH_KEY_STRING, value);