2 * deprecated.c: holding file for all deprecated APIs.
3 * "we can't lose 'em, but we can shun 'em!"
5 * ====================================================================
6 * Licensed to the Apache Software Foundation (ASF) under one
7 * or more contributor license agreements. See the NOTICE file
8 * distributed with this work for additional information
9 * regarding copyright ownership. The ASF licenses this file
10 * to you under the Apache License, Version 2.0 (the
11 * "License"); you may not use this file except in compliance
12 * with the License. You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing,
17 * software distributed under the License is distributed on an
18 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19 * KIND, either express or implied. See the License for the
20 * specific language governing permissions and limitations
22 * ====================================================================
25 /* We define this here to remove any further warnings about the usage of
26 deprecated functions in this file. */
27 #define SVN_DEPRECATED
29 #include "svn_repos.h"
30 #include "svn_compat.h"
33 #include "svn_props.h"
34 #include "svn_pools.h"
36 #include "svn_private_config.h"
40 #include "private/svn_repos_private.h"
41 #include "private/svn_subr_private.h"
46 /*** From commit.c ***/
49 svn_repos_get_commit_editor4(const svn_delta_editor_t **editor,
53 const char *repos_url,
54 const char *base_path,
57 svn_commit_callback2_t commit_callback,
59 svn_repos_authz_callback_t authz_callback,
63 apr_hash_t *revprop_table = apr_hash_make(pool);
65 svn_hash_sets(revprop_table, SVN_PROP_REVISION_AUTHOR,
66 svn_string_create(user, pool));
68 svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG,
69 svn_string_create(log_msg, pool));
70 return svn_repos_get_commit_editor5(editor, edit_baton, repos, txn,
71 repos_url, base_path, revprop_table,
72 commit_callback, commit_baton,
73 authz_callback, authz_baton, pool);
78 svn_repos_get_commit_editor3(const svn_delta_editor_t **editor,
82 const char *repos_url,
83 const char *base_path,
86 svn_commit_callback_t callback,
88 svn_repos_authz_callback_t authz_callback,
92 svn_commit_callback2_t callback2;
93 void *callback2_baton;
95 svn_compat_wrap_commit_callback(&callback2, &callback2_baton,
96 callback, callback_baton,
99 return svn_repos_get_commit_editor4(editor, edit_baton, repos, txn,
100 repos_url, base_path, user,
102 callback2_baton, authz_callback,
108 svn_repos_get_commit_editor2(const svn_delta_editor_t **editor,
112 const char *repos_url,
113 const char *base_path,
116 svn_commit_callback_t callback,
117 void *callback_baton,
120 return svn_repos_get_commit_editor3(editor, edit_baton, repos, txn,
121 repos_url, base_path, user,
122 log_msg, callback, callback_baton,
128 svn_repos_get_commit_editor(const svn_delta_editor_t **editor,
131 const char *repos_url,
132 const char *base_path,
135 svn_commit_callback_t callback,
136 void *callback_baton,
139 return svn_repos_get_commit_editor2(editor, edit_baton, repos, NULL,
140 repos_url, base_path, user,
142 callback_baton, pool);
146 svn_repos_open2(svn_repos_t **repos_p,
148 apr_hash_t *fs_config,
151 return svn_repos_open3(repos_p, path, fs_config, pool, pool);
155 svn_repos_open(svn_repos_t **repos_p,
159 return svn_repos_open2(repos_p, path, NULL, pool);
163 /*** From repos.c ***/
166 svn_error_t *(*start_callback)(void *baton);
167 void *start_callback_baton;
171 recovery_started(void *baton,
172 const svn_repos_notify_t *notify,
173 apr_pool_t *scratch_pool)
175 struct recover_baton *rb = baton;
177 if (notify->action == svn_repos_notify_mutex_acquired
178 && rb->start_callback != NULL)
179 svn_error_clear(rb->start_callback(rb->start_callback_baton));
183 svn_repos_recover3(const char *path,
184 svn_boolean_t nonblocking,
185 svn_error_t *(*start_callback)(void *baton),
186 void *start_callback_baton,
187 svn_cancel_func_t cancel_func, void *cancel_baton,
190 struct recover_baton rb;
192 rb.start_callback = start_callback;
193 rb.start_callback_baton = start_callback_baton;
195 return svn_repos_recover4(path, nonblocking, recovery_started, &rb,
196 cancel_func, cancel_baton, pool);
200 svn_repos_recover2(const char *path,
201 svn_boolean_t nonblocking,
202 svn_error_t *(*start_callback)(void *baton),
203 void *start_callback_baton,
206 return svn_repos_recover3(path, nonblocking,
207 start_callback, start_callback_baton,
213 svn_repos_recover(const char *path,
216 return svn_repos_recover2(path, FALSE, NULL, NULL, pool);
220 svn_repos_upgrade(const char *path,
221 svn_boolean_t nonblocking,
222 svn_error_t *(*start_callback)(void *baton),
223 void *start_callback_baton,
226 struct recover_baton rb;
228 rb.start_callback = start_callback;
229 rb.start_callback_baton = start_callback_baton;
231 return svn_repos_upgrade2(path, nonblocking, recovery_started, &rb, pool);
235 svn_repos_hotcopy2(const char *src_path,
236 const char *dst_path,
237 svn_boolean_t clean_logs,
238 svn_boolean_t incremental,
239 svn_cancel_func_t cancel_func,
243 return svn_error_trace(svn_repos_hotcopy3(src_path, dst_path, clean_logs,
244 incremental, NULL, NULL,
245 cancel_func, cancel_baton, pool));
249 svn_repos_hotcopy(const char *src_path,
250 const char *dst_path,
251 svn_boolean_t clean_logs,
254 return svn_error_trace(svn_repos_hotcopy2(src_path, dst_path, clean_logs,
255 FALSE, NULL, NULL, pool));
258 /*** From reporter.c ***/
260 svn_repos_begin_report(void **report_baton,
262 const char *username,
265 const char *s_operand,
266 const char *switch_path,
267 svn_boolean_t text_deltas,
268 svn_boolean_t recurse,
269 svn_boolean_t ignore_ancestry,
270 const svn_delta_editor_t *editor,
272 svn_repos_authz_func_t authz_read_func,
273 void *authz_read_baton,
276 return svn_repos_begin_report2(report_baton,
283 SVN_DEPTH_INFINITY_OR_FILES(recurse),
285 FALSE, /* don't send copyfrom args */
294 svn_repos_begin_report2(void **report_baton,
299 const char *tgt_path,
300 svn_boolean_t text_deltas,
302 svn_boolean_t ignore_ancestry,
303 svn_boolean_t send_copyfrom_args,
304 const svn_delta_editor_t *editor,
306 svn_repos_authz_func_t authz_read_func,
307 void *authz_read_baton,
310 return svn_repos_begin_report3(report_baton,
324 0, /* disable zero-copy code path */
329 svn_repos_set_path2(void *baton, const char *path, svn_revnum_t rev,
330 svn_boolean_t start_empty, const char *lock_token,
333 return svn_repos_set_path3(baton, path, rev, svn_depth_infinity,
334 start_empty, lock_token, pool);
338 svn_repos_set_path(void *baton, const char *path, svn_revnum_t rev,
339 svn_boolean_t start_empty, apr_pool_t *pool)
341 return svn_repos_set_path2(baton, path, rev, start_empty, NULL, pool);
345 svn_repos_link_path2(void *baton, const char *path, const char *link_path,
346 svn_revnum_t rev, svn_boolean_t start_empty,
347 const char *lock_token, apr_pool_t *pool)
349 return svn_repos_link_path3(baton, path, link_path, rev, svn_depth_infinity,
350 start_empty, lock_token, pool);
354 svn_repos_link_path(void *baton, const char *path, const char *link_path,
355 svn_revnum_t rev, svn_boolean_t start_empty,
358 return svn_repos_link_path2(baton, path, link_path, rev, start_empty,
362 /*** From dir-delta.c ***/
364 svn_repos_dir_delta(svn_fs_root_t *src_root,
365 const char *src_parent_dir,
366 const char *src_entry,
367 svn_fs_root_t *tgt_root,
368 const char *tgt_fullpath,
369 const svn_delta_editor_t *editor,
371 svn_repos_authz_func_t authz_read_func,
372 void *authz_read_baton,
373 svn_boolean_t text_deltas,
374 svn_boolean_t recurse,
375 svn_boolean_t entry_props,
376 svn_boolean_t ignore_ancestry,
379 return svn_repos_dir_delta2(src_root,
389 SVN_DEPTH_INFINITY_OR_FILES(recurse),
395 /*** From replay.c ***/
397 svn_repos_replay(svn_fs_root_t *root,
398 const svn_delta_editor_t *editor,
402 return svn_repos_replay2(root,
403 "" /* the whole tree */,
404 SVN_INVALID_REVNUM, /* no low water mark */
405 FALSE /* no text deltas */,
407 NULL /* no authz func */,
408 NULL /* no authz baton */,
412 /*** From fs-wrap.c ***/
414 svn_repos_fs_change_rev_prop3(svn_repos_t *repos,
418 const svn_string_t *new_value,
419 svn_boolean_t use_pre_revprop_change_hook,
420 svn_boolean_t use_post_revprop_change_hook,
421 svn_repos_authz_func_t authz_read_func,
422 void *authz_read_baton,
425 return svn_repos_fs_change_rev_prop4(repos, rev, author, name, NULL,
427 use_pre_revprop_change_hook,
428 use_post_revprop_change_hook,
430 authz_read_baton, pool);
434 svn_repos_fs_change_rev_prop2(svn_repos_t *repos,
438 const svn_string_t *new_value,
439 svn_repos_authz_func_t authz_read_func,
440 void *authz_read_baton,
443 return svn_repos_fs_change_rev_prop3(repos, rev, author, name, new_value,
444 TRUE, TRUE, authz_read_func,
445 authz_read_baton, pool);
451 svn_repos_fs_change_rev_prop(svn_repos_t *repos,
455 const svn_string_t *new_value,
458 return svn_repos_fs_change_rev_prop2(repos, rev, author, name, new_value,
462 struct pack_notify_wrapper_baton
464 svn_fs_pack_notify_t notify_func;
469 pack_notify_wrapper_func(void *baton,
470 const svn_repos_notify_t *notify,
471 apr_pool_t *scratch_pool)
473 struct pack_notify_wrapper_baton *pnwb = baton;
475 svn_error_clear(pnwb->notify_func(pnwb->notify_baton, notify->shard,
476 notify->action - 3, scratch_pool));
480 svn_repos_fs_pack(svn_repos_t *repos,
481 svn_fs_pack_notify_t notify_func,
483 svn_cancel_func_t cancel_func,
487 struct pack_notify_wrapper_baton pnwb;
489 pnwb.notify_func = notify_func;
490 pnwb.notify_baton = notify_baton;
492 return svn_repos_fs_pack2(repos, pack_notify_wrapper_func, &pnwb,
493 cancel_func, cancel_baton, pool);
498 svn_repos_fs_get_locks(apr_hash_t **locks,
501 svn_repos_authz_func_t authz_read_func,
502 void *authz_read_baton,
505 return svn_error_trace(svn_repos_fs_get_locks2(locks, repos, path,
508 authz_read_baton, pool));
512 mergeinfo_receiver(const char *path,
513 svn_mergeinfo_t mergeinfo,
515 apr_pool_t *scratch_pool)
517 svn_mergeinfo_catalog_t catalog = baton;
518 apr_pool_t *result_pool = apr_hash_pool_get(catalog);
519 apr_size_t len = strlen(path);
521 apr_hash_set(catalog,
522 apr_pstrmemdup(result_pool, path, len),
524 svn_mergeinfo_dup(mergeinfo, result_pool));
530 svn_repos_fs_get_mergeinfo(svn_mergeinfo_catalog_t *mergeinfo,
532 const apr_array_header_t *paths,
534 svn_mergeinfo_inheritance_t inherit,
535 svn_boolean_t include_descendants,
536 svn_repos_authz_func_t authz_read_func,
537 void *authz_read_baton,
540 svn_mergeinfo_catalog_t result_catalog = svn_hash__make(pool);
541 SVN_ERR(svn_repos_fs_get_mergeinfo2(repos, paths, rev, inherit,
543 authz_read_func, authz_read_baton,
544 mergeinfo_receiver, result_catalog,
546 *mergeinfo = result_catalog;
551 /*** From logs.c ***/
553 svn_repos_get_logs4(svn_repos_t *repos,
554 const apr_array_header_t *paths,
558 svn_boolean_t discover_changed_paths,
559 svn_boolean_t strict_node_history,
560 svn_boolean_t include_merged_revisions,
561 const apr_array_header_t *revprops,
562 svn_repos_authz_func_t authz_read_func,
563 void *authz_read_baton,
564 svn_log_entry_receiver_t receiver,
565 void *receiver_baton,
568 return svn_repos__get_logs_compat(repos, paths, start, end, limit,
569 discover_changed_paths,
571 include_merged_revisions, revprops,
572 authz_read_func, authz_read_baton,
573 receiver, receiver_baton, pool);
577 svn_repos_get_logs3(svn_repos_t *repos,
578 const apr_array_header_t *paths,
582 svn_boolean_t discover_changed_paths,
583 svn_boolean_t strict_node_history,
584 svn_repos_authz_func_t authz_read_func,
585 void *authz_read_baton,
586 svn_log_message_receiver_t receiver,
587 void *receiver_baton,
590 svn_log_entry_receiver_t receiver2;
591 void *receiver2_baton;
593 svn_compat_wrap_log_receiver(&receiver2, &receiver2_baton,
594 receiver, receiver_baton,
597 return svn_repos_get_logs4(repos, paths, start, end, limit,
598 discover_changed_paths, strict_node_history,
599 FALSE, svn_compat_log_revprops_in(pool),
600 authz_read_func, authz_read_baton,
601 receiver2, receiver2_baton,
606 svn_repos_get_logs2(svn_repos_t *repos,
607 const apr_array_header_t *paths,
610 svn_boolean_t discover_changed_paths,
611 svn_boolean_t strict_node_history,
612 svn_repos_authz_func_t authz_read_func,
613 void *authz_read_baton,
614 svn_log_message_receiver_t receiver,
615 void *receiver_baton,
618 return svn_repos_get_logs3(repos, paths, start, end, 0,
619 discover_changed_paths, strict_node_history,
620 authz_read_func, authz_read_baton, receiver,
621 receiver_baton, pool);
626 svn_repos_get_logs(svn_repos_t *repos,
627 const apr_array_header_t *paths,
630 svn_boolean_t discover_changed_paths,
631 svn_boolean_t strict_node_history,
632 svn_log_message_receiver_t receiver,
633 void *receiver_baton,
636 return svn_repos_get_logs3(repos, paths, start, end, 0,
637 discover_changed_paths, strict_node_history,
638 NULL, NULL, /* no authz stuff */
639 receiver, receiver_baton, pool);
642 /*** From rev_hunt.c ***/
644 svn_repos_history(svn_fs_t *fs,
646 svn_repos_history_func_t history_func,
650 svn_boolean_t cross_copies,
653 return svn_repos_history2(fs, path, history_func, history_baton,
655 start, end, cross_copies, pool);
659 svn_repos_get_file_revs(svn_repos_t *repos,
663 svn_repos_authz_func_t authz_read_func,
664 void *authz_read_baton,
665 svn_repos_file_rev_handler_t handler,
669 svn_file_rev_handler_t handler2;
670 void *handler2_baton;
672 svn_compat_wrap_file_rev_handler(&handler2, &handler2_baton, handler,
673 handler_baton, pool);
675 return svn_repos_get_file_revs2(repos, path, start, end, FALSE,
676 authz_read_func, authz_read_baton,
677 handler2, handler2_baton, pool);
680 /*** From dump.c ***/
682 svn_repos_dump_fs(svn_repos_t *repos,
683 svn_stream_t *stream,
684 svn_stream_t *feedback_stream,
685 svn_revnum_t start_rev,
686 svn_revnum_t end_rev,
687 svn_boolean_t incremental,
688 svn_cancel_func_t cancel_func,
692 return svn_repos_dump_fs2(repos, stream, feedback_stream, start_rev,
693 end_rev, incremental, FALSE, cancel_func,
697 /* Implementation of svn_repos_notify_func_t to wrap the output to a
698 response stream for svn_repos_dump_fs2() and svn_repos_verify_fs() */
700 repos_notify_handler(void *baton,
701 const svn_repos_notify_t *notify,
702 apr_pool_t *scratch_pool)
704 svn_stream_t *feedback_stream = baton;
707 switch (notify->action)
709 case svn_repos_notify_warning:
710 svn_error_clear(svn_stream_puts(feedback_stream, notify->warning_str));
713 case svn_repos_notify_dump_rev_end:
714 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
715 _("* Dumped revision %ld.\n"),
719 case svn_repos_notify_verify_rev_end:
720 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
721 _("* Verified revision %ld.\n"),
725 case svn_repos_notify_load_txn_committed:
726 if (notify->old_revision == SVN_INVALID_REVNUM)
728 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
729 _("\n------- Committed revision %ld >>>\n\n"),
730 notify->new_revision));
734 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
735 _("\n------- Committed new rev %ld"
736 " (loaded from original rev %ld"
737 ") >>>\n\n"), notify->new_revision,
738 notify->old_revision));
742 case svn_repos_notify_load_node_start:
744 switch (notify->node_action)
746 case svn_node_action_change:
747 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
748 _(" * editing path : %s ..."),
752 case svn_node_action_delete:
753 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
754 _(" * deleting path : %s ..."),
758 case svn_node_action_add:
759 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
760 _(" * adding path : %s ..."),
764 case svn_node_action_replace:
765 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
766 _(" * replacing path : %s ..."),
774 case svn_repos_notify_load_node_done:
776 svn_error_clear(svn_stream_write(feedback_stream, _(" done.\n"), &len));
779 case svn_repos_notify_load_copied_node:
781 svn_error_clear(svn_stream_write(feedback_stream, "COPIED...", &len));
784 case svn_repos_notify_load_txn_start:
785 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
786 _("<<< Started new transaction, based on "
787 "original revision %ld\n"),
788 notify->old_revision));
791 case svn_repos_notify_load_normalized_mergeinfo:
792 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
793 _(" removing '\\r' from %s ..."),
794 SVN_PROP_MERGEINFO));
803 svn_repos_dump_fs3(svn_repos_t *repos,
804 svn_stream_t *stream,
805 svn_revnum_t start_rev,
806 svn_revnum_t end_rev,
807 svn_boolean_t incremental,
808 svn_boolean_t use_deltas,
809 svn_repos_notify_func_t notify_func,
811 svn_cancel_func_t cancel_func,
815 return svn_error_trace(svn_repos_dump_fs4(repos,
832 svn_repos_dump_fs2(svn_repos_t *repos,
833 svn_stream_t *stream,
834 svn_stream_t *feedback_stream,
835 svn_revnum_t start_rev,
836 svn_revnum_t end_rev,
837 svn_boolean_t incremental,
838 svn_boolean_t use_deltas,
839 svn_cancel_func_t cancel_func,
843 return svn_error_trace(svn_repos_dump_fs3(repos,
850 ? repos_notify_handler
859 svn_repos_verify_fs2(svn_repos_t *repos,
860 svn_revnum_t start_rev,
861 svn_revnum_t end_rev,
862 svn_repos_notify_func_t notify_func,
864 svn_cancel_func_t cancel_func,
868 return svn_error_trace(svn_repos_verify_fs3(repos,
882 svn_repos_verify_fs(svn_repos_t *repos,
883 svn_stream_t *feedback_stream,
884 svn_revnum_t start_rev,
885 svn_revnum_t end_rev,
886 svn_cancel_func_t cancel_func,
890 return svn_error_trace(svn_repos_verify_fs2(repos,
894 ? repos_notify_handler
902 /*** From load.c ***/
905 svn_repos_load_fs5(svn_repos_t *repos,
906 svn_stream_t *dumpstream,
907 svn_revnum_t start_rev,
908 svn_revnum_t end_rev,
909 enum svn_repos_load_uuid uuid_action,
910 const char *parent_dir,
911 svn_boolean_t use_pre_commit_hook,
912 svn_boolean_t use_post_commit_hook,
913 svn_boolean_t validate_props,
914 svn_boolean_t ignore_dates,
915 svn_repos_notify_func_t notify_func,
917 svn_cancel_func_t cancel_func,
921 return svn_repos_load_fs6(repos, dumpstream, start_rev, end_rev,
922 uuid_action, parent_dir,
923 use_post_commit_hook, use_post_commit_hook,
924 validate_props, ignore_dates, FALSE,
925 notify_func, notify_baton,
926 cancel_func, cancel_baton, pool);
930 svn_repos_load_fs4(svn_repos_t *repos,
931 svn_stream_t *dumpstream,
932 svn_revnum_t start_rev,
933 svn_revnum_t end_rev,
934 enum svn_repos_load_uuid uuid_action,
935 const char *parent_dir,
936 svn_boolean_t use_pre_commit_hook,
937 svn_boolean_t use_post_commit_hook,
938 svn_boolean_t validate_props,
939 svn_repos_notify_func_t notify_func,
941 svn_cancel_func_t cancel_func,
945 return svn_repos_load_fs5(repos, dumpstream, start_rev, end_rev,
946 uuid_action, parent_dir,
947 use_post_commit_hook, use_post_commit_hook,
948 validate_props, FALSE,
949 notify_func, notify_baton,
950 cancel_func, cancel_baton, pool);
954 svn_repos_load_fs3(svn_repos_t *repos,
955 svn_stream_t *dumpstream,
956 enum svn_repos_load_uuid uuid_action,
957 const char *parent_dir,
958 svn_boolean_t use_pre_commit_hook,
959 svn_boolean_t use_post_commit_hook,
960 svn_boolean_t validate_props,
961 svn_repos_notify_func_t notify_func,
963 svn_cancel_func_t cancel_func,
967 return svn_repos_load_fs4(repos, dumpstream,
968 SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
969 uuid_action, parent_dir,
970 use_pre_commit_hook, use_post_commit_hook,
971 validate_props, notify_func, notify_baton,
972 cancel_func, cancel_baton, pool);
976 svn_repos_load_fs2(svn_repos_t *repos,
977 svn_stream_t *dumpstream,
978 svn_stream_t *feedback_stream,
979 enum svn_repos_load_uuid uuid_action,
980 const char *parent_dir,
981 svn_boolean_t use_pre_commit_hook,
982 svn_boolean_t use_post_commit_hook,
983 svn_cancel_func_t cancel_func,
987 return svn_repos_load_fs3(repos, dumpstream, uuid_action, parent_dir,
988 use_pre_commit_hook, use_post_commit_hook, FALSE,
989 feedback_stream ? repos_notify_handler : NULL,
990 feedback_stream, cancel_func, cancel_baton, pool);
994 static svn_repos_parser_fns_t *
995 fns_from_fns2(const svn_repos_parse_fns2_t *fns2,
998 svn_repos_parser_fns_t *fns;
1000 fns = apr_palloc(pool, sizeof(*fns));
1001 fns->new_revision_record = fns2->new_revision_record;
1002 fns->uuid_record = fns2->uuid_record;
1003 fns->new_node_record = fns2->new_node_record;
1004 fns->set_revision_property = fns2->set_revision_property;
1005 fns->set_node_property = fns2->set_node_property;
1006 fns->remove_node_props = fns2->remove_node_props;
1007 fns->set_fulltext = fns2->set_fulltext;
1008 fns->close_node = fns2->close_node;
1009 fns->close_revision = fns2->close_revision;
1013 static svn_repos_parser_fns2_t *
1014 fns2_from_fns3(const svn_repos_parse_fns3_t *fns3,
1017 svn_repos_parser_fns2_t *fns2;
1019 fns2 = apr_palloc(pool, sizeof(*fns2));
1020 fns2->new_revision_record = fns3->new_revision_record;
1021 fns2->uuid_record = fns3->uuid_record;
1022 fns2->new_node_record = fns3->new_node_record;
1023 fns2->set_revision_property = fns3->set_revision_property;
1024 fns2->set_node_property = fns3->set_node_property;
1025 fns2->remove_node_props = fns3->remove_node_props;
1026 fns2->set_fulltext = fns3->set_fulltext;
1027 fns2->close_node = fns3->close_node;
1028 fns2->close_revision = fns3->close_revision;
1029 fns2->delete_node_property = fns3->delete_node_property;
1030 fns2->apply_textdelta = fns3->apply_textdelta;
1034 static svn_repos_parse_fns2_t *
1035 fns2_from_fns(const svn_repos_parser_fns_t *fns,
1038 svn_repos_parse_fns2_t *fns2;
1040 fns2 = apr_palloc(pool, sizeof(*fns2));
1041 fns2->new_revision_record = fns->new_revision_record;
1042 fns2->uuid_record = fns->uuid_record;
1043 fns2->new_node_record = fns->new_node_record;
1044 fns2->set_revision_property = fns->set_revision_property;
1045 fns2->set_node_property = fns->set_node_property;
1046 fns2->remove_node_props = fns->remove_node_props;
1047 fns2->set_fulltext = fns->set_fulltext;
1048 fns2->close_node = fns->close_node;
1049 fns2->close_revision = fns->close_revision;
1050 fns2->delete_node_property = NULL;
1051 fns2->apply_textdelta = NULL;
1055 static svn_repos_parse_fns3_t *
1056 fns3_from_fns2(const svn_repos_parser_fns2_t *fns2,
1059 svn_repos_parse_fns3_t *fns3;
1061 fns3 = apr_palloc(pool, sizeof(*fns3));
1062 fns3->magic_header_record = NULL;
1063 fns3->uuid_record = fns2->uuid_record;
1064 fns3->new_revision_record = fns2->new_revision_record;
1065 fns3->new_node_record = fns2->new_node_record;
1066 fns3->set_revision_property = fns2->set_revision_property;
1067 fns3->set_node_property = fns2->set_node_property;
1068 fns3->remove_node_props = fns2->remove_node_props;
1069 fns3->set_fulltext = fns2->set_fulltext;
1070 fns3->close_node = fns2->close_node;
1071 fns3->close_revision = fns2->close_revision;
1072 fns3->delete_node_property = fns2->delete_node_property;
1073 fns3->apply_textdelta = fns2->apply_textdelta;
1078 svn_repos_parse_dumpstream2(svn_stream_t *stream,
1079 const svn_repos_parser_fns2_t *parse_fns,
1081 svn_cancel_func_t cancel_func,
1085 svn_repos_parse_fns3_t *fns3 = fns3_from_fns2(parse_fns, pool);
1087 return svn_repos_parse_dumpstream3(stream, fns3, parse_baton, FALSE,
1088 cancel_func, cancel_baton, pool);
1092 svn_repos_parse_dumpstream(svn_stream_t *stream,
1093 const svn_repos_parser_fns_t *parse_fns,
1095 svn_cancel_func_t cancel_func,
1099 svn_repos_parse_fns2_t *fns2 = fns2_from_fns(parse_fns, pool);
1101 return svn_repos_parse_dumpstream2(stream, fns2, parse_baton,
1102 cancel_func, cancel_baton, pool);
1106 svn_repos_load_fs(svn_repos_t *repos,
1107 svn_stream_t *dumpstream,
1108 svn_stream_t *feedback_stream,
1109 enum svn_repos_load_uuid uuid_action,
1110 const char *parent_dir,
1111 svn_cancel_func_t cancel_func,
1115 return svn_repos_load_fs2(repos, dumpstream, feedback_stream,
1116 uuid_action, parent_dir, FALSE, FALSE,
1117 cancel_func, cancel_baton, pool);
1121 svn_repos_get_fs_build_parser5(const svn_repos_parse_fns3_t **parser,
1124 svn_revnum_t start_rev,
1125 svn_revnum_t end_rev,
1126 svn_boolean_t use_history,
1127 svn_boolean_t validate_props,
1128 enum svn_repos_load_uuid uuid_action,
1129 const char *parent_dir,
1130 svn_boolean_t use_pre_commit_hook,
1131 svn_boolean_t use_post_commit_hook,
1132 svn_boolean_t ignore_dates,
1133 svn_repos_notify_func_t notify_func,
1137 SVN_ERR(svn_repos_get_fs_build_parser6(parser, parse_baton,
1144 use_pre_commit_hook,
1145 use_post_commit_hook,
1147 FALSE /* normalize_props */,
1151 return SVN_NO_ERROR;
1155 svn_repos_get_fs_build_parser4(const svn_repos_parse_fns3_t **callbacks,
1158 svn_revnum_t start_rev,
1159 svn_revnum_t end_rev,
1160 svn_boolean_t use_history,
1161 svn_boolean_t validate_props,
1162 enum svn_repos_load_uuid uuid_action,
1163 const char *parent_dir,
1164 svn_repos_notify_func_t notify_func,
1168 SVN_ERR(svn_repos_get_fs_build_parser5(callbacks, parse_baton,
1175 FALSE, FALSE, /*hooks */
1176 FALSE /*ignore_dates*/,
1180 return SVN_NO_ERROR;
1184 svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **callbacks,
1187 svn_boolean_t use_history,
1188 svn_boolean_t validate_props,
1189 enum svn_repos_load_uuid uuid_action,
1190 const char *parent_dir,
1191 svn_repos_notify_func_t notify_func,
1195 const svn_repos_parse_fns3_t *fns3;
1197 SVN_ERR(svn_repos_get_fs_build_parser4(&fns3, parse_baton, repos,
1200 use_history, validate_props,
1201 uuid_action, parent_dir,
1202 notify_func, notify_baton, pool));
1204 *callbacks = fns2_from_fns3(fns3, pool);
1205 return SVN_NO_ERROR;
1209 svn_repos_get_fs_build_parser2(const svn_repos_parse_fns2_t **parser,
1212 svn_boolean_t use_history,
1213 enum svn_repos_load_uuid uuid_action,
1214 svn_stream_t *outstream,
1215 const char *parent_dir,
1218 return svn_repos_get_fs_build_parser3(parser, parse_baton, repos, use_history,
1219 FALSE, uuid_action, parent_dir,
1220 outstream ? repos_notify_handler : NULL,
1225 svn_repos_get_fs_build_parser(const svn_repos_parser_fns_t **parser_callbacks,
1228 svn_boolean_t use_history,
1229 enum svn_repos_load_uuid uuid_action,
1230 svn_stream_t *outstream,
1231 const char *parent_dir,
1234 const svn_repos_parse_fns2_t *fns2;
1236 SVN_ERR(svn_repos_get_fs_build_parser2(&fns2, parse_baton, repos,
1237 use_history, uuid_action, outstream,
1240 *parser_callbacks = fns_from_fns2(fns2, pool);
1241 return SVN_NO_ERROR;
1246 svn_repos_fs_begin_txn_for_update(svn_fs_txn_t **txn_p,
1252 /* ### someday, we might run a read-hook here. */
1254 /* Begin the transaction. */
1255 SVN_ERR(svn_fs_begin_txn2(txn_p, repos->fs, rev, 0, pool));
1257 /* We pass the author to the filesystem by adding it as a property
1260 /* User (author). */
1265 val.len = strlen(author);
1266 SVN_ERR(svn_fs_change_txn_prop(*txn_p, SVN_PROP_REVISION_AUTHOR,
1270 return SVN_NO_ERROR;
1273 /*** From authz.c ***/
1276 svn_repos_authz_read3(svn_authz_t **authz_p,
1278 const char *groups_path,
1279 svn_boolean_t must_exist,
1280 svn_repos_t *repos_hint,
1281 apr_pool_t *result_pool,
1282 apr_pool_t *scratch_pool)
1284 return svn_error_trace(svn_repos_authz_read4(authz_p, path, groups_path,
1285 must_exist, repos_hint,
1286 NULL, NULL, result_pool,
1291 svn_repos_authz_read2(svn_authz_t **authz_p,
1293 const char *groups_path,
1294 svn_boolean_t must_exist,
1297 apr_pool_t *scratch_pool = svn_pool_create(pool);
1298 svn_error_t *err = svn_repos_authz_read3(authz_p, path, groups_path,
1300 pool, scratch_pool);
1301 svn_pool_destroy(scratch_pool);
1303 return svn_error_trace(err);
1307 svn_repos_authz_read(svn_authz_t **authz_p, const char *file,
1308 svn_boolean_t must_exist, apr_pool_t *pool)
1310 /* Prevent accidental new features in existing API. */
1311 if (svn_path_is_url(file))
1312 return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
1313 "'%s' is not a file name", file);
1315 return svn_error_trace(svn_repos_authz_read2(authz_p, file, NULL,
1320 svn_repos_authz_parse(svn_authz_t **authz_p,
1321 svn_stream_t *stream,
1322 svn_stream_t *groups_stream,
1325 apr_pool_t *scratch_pool = svn_pool_create(pool);
1326 svn_error_t *err = svn_repos_authz_parse2(authz_p, stream, groups_stream,
1327 NULL, NULL, pool, scratch_pool);
1328 svn_pool_destroy(scratch_pool);
1330 return svn_error_trace(err);