1
/* load-index-cmd.c -- implements the dump-index sub-command.
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"
25
#include "private/svn_fs_fs_private.h"
29
#include "transaction.h"
32
svn_fs_fs__load_index(svn_fs_t *fs,
33
svn_revnum_t revision,
34
apr_array_header_t *entries,
35
apr_pool_t *scratch_pool)
37
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
39
/* Check the FS format number. */
40
if (! svn_fs_fs__use_log_addressing(fs))
41
return svn_error_create(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL, NULL);
43
/* Treat an empty array as a no-op instead error. */
44
if (entries->nelts != 0)
46
const char *l2p_proto_index;
47
const char *p2l_proto_index;
48
svn_fs_fs__revision_file_t *rev_file;
50
/* Open rev / pack file & trim indexes + footer off it. */
51
SVN_ERR(svn_fs_fs__open_pack_or_rev_file_writable(&rev_file, fs,
54
SVN_ERR(svn_fs_fs__auto_read_footer(rev_file));
55
SVN_ERR(svn_io_file_trunc(rev_file->file, rev_file->l2p_offset,
58
/* Create proto index files for the new index data
59
* (will be cleaned up automatically with iterpool). */
60
SVN_ERR(svn_fs_fs__p2l_index_from_p2l_entries(&p2l_proto_index, fs,
63
SVN_ERR(svn_fs_fs__l2p_index_from_p2l_entries(&l2p_proto_index, fs,
67
/* Combine rev data with new index data. */
68
SVN_ERR(svn_fs_fs__add_index_data(fs, rev_file->file, l2p_proto_index,
69
p2l_proto_index, revision, iterpool));
72
svn_pool_destroy(iterpool);