1 /* dump-index.c -- implements the svn_fs_fs__dump_index private API
3 * ====================================================================
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
20 * ====================================================================
23 #include "svn_pools.h"
24 #include "private/svn_fs_fs_private.h"
30 #include "../libsvn_fs/fs-loader.h"
33 svn_fs_fs__dump_index(svn_fs_t *fs,
34 svn_revnum_t revision,
35 svn_fs_fs__dump_index_func_t callback_func,
37 svn_cancel_func_t cancel_func,
39 apr_pool_t *scratch_pool)
41 fs_fs_data_t *ffd = fs->fsap_data;
42 svn_fs_fs__revision_file_t *rev_file;
44 apr_off_t offset, max_offset;
45 apr_pool_t *iterpool = svn_pool_create(scratch_pool);
47 /* Check the FS format. */
48 if (! svn_fs_fs__use_log_addressing(fs))
49 return svn_error_create(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL, NULL);
51 /* Revision & index file access object. */
52 SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, revision,
53 scratch_pool, iterpool));
55 /* Offset range to cover. */
56 SVN_ERR(svn_fs_fs__p2l_get_max_offset(&max_offset, fs, rev_file, revision,
59 /* Walk through all P2L index entries in offset order. */
60 for (offset = 0; offset < max_offset; )
62 apr_array_header_t *entries;
64 /* Read entries for the next block. There will be no overlaps since
65 * we start at the first offset not covered. */
66 svn_pool_clear(iterpool);
67 SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, fs, rev_file, revision,
68 offset, ffd->p2l_page_size,
71 /* Print entries for this block, one line per entry. */
72 for (i = 0; i < entries->nelts && offset < max_offset; ++i)
74 const svn_fs_fs__p2l_entry_t *entry
75 = &APR_ARRAY_IDX(entries, i, const svn_fs_fs__p2l_entry_t);
76 offset = entry->offset + entry->size;
78 /* Cancellation support */
80 SVN_ERR(cancel_func(cancel_baton));
82 /* Invoke processing callback. */
83 SVN_ERR(callback_func(entry, callback_baton, iterpool));
87 svn_pool_destroy(iterpool);