+static int recursiveDumpDir(Repository::Transaction *txn, svn_fs_root_t *fs_root,
+ const QByteArray &pathname, const QString &finalPathName,
+ apr_pool_t *pool)
+{
+ // get the dir listing
+ apr_hash_t *entries;
+ SVN_ERR(svn_fs_dir_entries(&entries, fs_root, pathname, pool));
+ AprAutoPool dirpool(pool);
+
+ for (apr_hash_index_t *i = apr_hash_first(pool, entries); i; i = apr_hash_next(i)) {
+ dirpool.clear();
+ const void *vkey;
+ void *value;
+ apr_hash_this(i, &vkey, NULL, &value);
+
+ svn_fs_dirent_t *dirent = reinterpret_cast<svn_fs_dirent_t *>(value);
+ QByteArray entryName = pathname + '/' + dirent->name;
+ QString entryFinalName = finalPathName + '/' + dirent->name;
+
+ if (dirent->kind == svn_node_dir) {
+ if (recursiveDumpDir(txn, fs_root, entryName, entryFinalName, dirpool) == EXIT_FAILURE)
+ return EXIT_FAILURE;
+ } else if (dirent->kind == svn_node_file) {
+ if (dumpBlob(txn, fs_root, entryName, entryFinalName, dirpool) == EXIT_FAILURE)
+ return EXIT_FAILURE;
+ }
+ }
+}
+