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"
32 #include "svn_props.h"
34 #include "svn_private_config.h"
41 /*** From commit.c ***/
44 svn_repos_get_commit_editor4(const svn_delta_editor_t **editor,
48 const char *repos_url,
49 const char *base_path,
52 svn_commit_callback2_t commit_callback,
54 svn_repos_authz_callback_t authz_callback,
58 apr_hash_t *revprop_table = apr_hash_make(pool);
60 svn_hash_sets(revprop_table, SVN_PROP_REVISION_AUTHOR,
61 svn_string_create(user, pool));
63 svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG,
64 svn_string_create(log_msg, pool));
65 return svn_repos_get_commit_editor5(editor, edit_baton, repos, txn,
66 repos_url, base_path, revprop_table,
67 commit_callback, commit_baton,
68 authz_callback, authz_baton, pool);
73 svn_repos_get_commit_editor3(const svn_delta_editor_t **editor,
77 const char *repos_url,
78 const char *base_path,
81 svn_commit_callback_t callback,
83 svn_repos_authz_callback_t authz_callback,
87 svn_commit_callback2_t callback2;
88 void *callback2_baton;
90 svn_compat_wrap_commit_callback(&callback2, &callback2_baton,
91 callback, callback_baton,
94 return svn_repos_get_commit_editor4(editor, edit_baton, repos, txn,
95 repos_url, base_path, user,
97 callback2_baton, authz_callback,
103 svn_repos_get_commit_editor2(const svn_delta_editor_t **editor,
107 const char *repos_url,
108 const char *base_path,
111 svn_commit_callback_t callback,
112 void *callback_baton,
115 return svn_repos_get_commit_editor3(editor, edit_baton, repos, txn,
116 repos_url, base_path, user,
117 log_msg, callback, callback_baton,
123 svn_repos_get_commit_editor(const svn_delta_editor_t **editor,
126 const char *repos_url,
127 const char *base_path,
130 svn_commit_callback_t callback,
131 void *callback_baton,
134 return svn_repos_get_commit_editor2(editor, edit_baton, repos, NULL,
135 repos_url, base_path, user,
137 callback_baton, pool);
141 svn_repos_open(svn_repos_t **repos_p,
145 return svn_repos_open2(repos_p, path, NULL, pool);
149 /*** From repos.c ***/
152 svn_error_t *(*start_callback)(void *baton);
153 void *start_callback_baton;
157 recovery_started(void *baton,
158 const svn_repos_notify_t *notify,
159 apr_pool_t *scratch_pool)
161 struct recover_baton *rb = baton;
163 if (notify->action == svn_repos_notify_mutex_acquired
164 && rb->start_callback != NULL)
165 svn_error_clear(rb->start_callback(rb->start_callback_baton));
169 svn_repos_recover3(const char *path,
170 svn_boolean_t nonblocking,
171 svn_error_t *(*start_callback)(void *baton),
172 void *start_callback_baton,
173 svn_cancel_func_t cancel_func, void *cancel_baton,
176 struct recover_baton rb;
178 rb.start_callback = start_callback;
179 rb.start_callback_baton = start_callback_baton;
181 return svn_repos_recover4(path, nonblocking, recovery_started, &rb,
182 cancel_func, cancel_baton, pool);
186 svn_repos_recover2(const char *path,
187 svn_boolean_t nonblocking,
188 svn_error_t *(*start_callback)(void *baton),
189 void *start_callback_baton,
192 return svn_repos_recover3(path, nonblocking,
193 start_callback, start_callback_baton,
199 svn_repos_recover(const char *path,
202 return svn_repos_recover2(path, FALSE, NULL, NULL, pool);
206 svn_repos_upgrade(const char *path,
207 svn_boolean_t nonblocking,
208 svn_error_t *(*start_callback)(void *baton),
209 void *start_callback_baton,
212 struct recover_baton rb;
214 rb.start_callback = start_callback;
215 rb.start_callback_baton = start_callback_baton;
217 return svn_repos_upgrade2(path, nonblocking, recovery_started, &rb, pool);
220 /*** From reporter.c ***/
222 svn_repos_begin_report(void **report_baton,
224 const char *username,
227 const char *s_operand,
228 const char *switch_path,
229 svn_boolean_t text_deltas,
230 svn_boolean_t recurse,
231 svn_boolean_t ignore_ancestry,
232 const svn_delta_editor_t *editor,
234 svn_repos_authz_func_t authz_read_func,
235 void *authz_read_baton,
238 return svn_repos_begin_report2(report_baton,
245 SVN_DEPTH_INFINITY_OR_FILES(recurse),
247 FALSE, /* don't send copyfrom args */
256 svn_repos_begin_report2(void **report_baton,
261 const char *tgt_path,
262 svn_boolean_t text_deltas,
264 svn_boolean_t ignore_ancestry,
265 svn_boolean_t send_copyfrom_args,
266 const svn_delta_editor_t *editor,
268 svn_repos_authz_func_t authz_read_func,
269 void *authz_read_baton,
272 return svn_repos_begin_report3(report_baton,
286 0, /* disable zero-copy code path */
291 svn_repos_set_path2(void *baton, const char *path, svn_revnum_t rev,
292 svn_boolean_t start_empty, const char *lock_token,
295 return svn_repos_set_path3(baton, path, rev, svn_depth_infinity,
296 start_empty, lock_token, pool);
300 svn_repos_set_path(void *baton, const char *path, svn_revnum_t rev,
301 svn_boolean_t start_empty, apr_pool_t *pool)
303 return svn_repos_set_path2(baton, path, rev, start_empty, NULL, pool);
307 svn_repos_link_path2(void *baton, const char *path, const char *link_path,
308 svn_revnum_t rev, svn_boolean_t start_empty,
309 const char *lock_token, apr_pool_t *pool)
311 return svn_repos_link_path3(baton, path, link_path, rev, svn_depth_infinity,
312 start_empty, lock_token, pool);
316 svn_repos_link_path(void *baton, const char *path, const char *link_path,
317 svn_revnum_t rev, svn_boolean_t start_empty,
320 return svn_repos_link_path2(baton, path, link_path, rev, start_empty,
324 /*** From dir-delta.c ***/
326 svn_repos_dir_delta(svn_fs_root_t *src_root,
327 const char *src_parent_dir,
328 const char *src_entry,
329 svn_fs_root_t *tgt_root,
330 const char *tgt_fullpath,
331 const svn_delta_editor_t *editor,
333 svn_repos_authz_func_t authz_read_func,
334 void *authz_read_baton,
335 svn_boolean_t text_deltas,
336 svn_boolean_t recurse,
337 svn_boolean_t entry_props,
338 svn_boolean_t ignore_ancestry,
341 return svn_repos_dir_delta2(src_root,
351 SVN_DEPTH_INFINITY_OR_FILES(recurse),
357 /*** From replay.c ***/
359 svn_repos_replay(svn_fs_root_t *root,
360 const svn_delta_editor_t *editor,
364 return svn_repos_replay2(root,
365 "" /* the whole tree */,
366 SVN_INVALID_REVNUM, /* no low water mark */
367 FALSE /* no text deltas */,
369 NULL /* no authz func */,
370 NULL /* no authz baton */,
374 /*** From fs-wrap.c ***/
376 svn_repos_fs_change_rev_prop3(svn_repos_t *repos,
380 const svn_string_t *new_value,
381 svn_boolean_t use_pre_revprop_change_hook,
382 svn_boolean_t use_post_revprop_change_hook,
383 svn_repos_authz_func_t authz_read_func,
384 void *authz_read_baton,
387 return svn_repos_fs_change_rev_prop4(repos, rev, author, name, NULL,
389 use_pre_revprop_change_hook,
390 use_post_revprop_change_hook,
392 authz_read_baton, pool);
396 svn_repos_fs_change_rev_prop2(svn_repos_t *repos,
400 const svn_string_t *new_value,
401 svn_repos_authz_func_t authz_read_func,
402 void *authz_read_baton,
405 return svn_repos_fs_change_rev_prop3(repos, rev, author, name, new_value,
406 TRUE, TRUE, authz_read_func,
407 authz_read_baton, pool);
413 svn_repos_fs_change_rev_prop(svn_repos_t *repos,
417 const svn_string_t *new_value,
420 return svn_repos_fs_change_rev_prop2(repos, rev, author, name, new_value,
424 struct pack_notify_wrapper_baton
426 svn_fs_pack_notify_t notify_func;
431 pack_notify_wrapper_func(void *baton,
432 const svn_repos_notify_t *notify,
433 apr_pool_t *scratch_pool)
435 struct pack_notify_wrapper_baton *pnwb = baton;
437 svn_error_clear(pnwb->notify_func(pnwb->notify_baton, notify->shard,
438 notify->action - 3, scratch_pool));
442 svn_repos_fs_pack(svn_repos_t *repos,
443 svn_fs_pack_notify_t notify_func,
445 svn_cancel_func_t cancel_func,
449 struct pack_notify_wrapper_baton pnwb;
451 pnwb.notify_func = notify_func;
452 pnwb.notify_baton = notify_baton;
454 return svn_repos_fs_pack2(repos, pack_notify_wrapper_func, &pnwb,
455 cancel_func, cancel_baton, pool);
460 svn_repos_fs_get_locks(apr_hash_t **locks,
463 svn_repos_authz_func_t authz_read_func,
464 void *authz_read_baton,
467 return svn_error_trace(svn_repos_fs_get_locks2(locks, repos, path,
470 authz_read_baton, pool));
474 /*** From logs.c ***/
476 svn_repos_get_logs3(svn_repos_t *repos,
477 const apr_array_header_t *paths,
481 svn_boolean_t discover_changed_paths,
482 svn_boolean_t strict_node_history,
483 svn_repos_authz_func_t authz_read_func,
484 void *authz_read_baton,
485 svn_log_message_receiver_t receiver,
486 void *receiver_baton,
489 svn_log_entry_receiver_t receiver2;
490 void *receiver2_baton;
492 svn_compat_wrap_log_receiver(&receiver2, &receiver2_baton,
493 receiver, receiver_baton,
496 return svn_repos_get_logs4(repos, paths, start, end, limit,
497 discover_changed_paths, strict_node_history,
498 FALSE, svn_compat_log_revprops_in(pool),
499 authz_read_func, authz_read_baton,
500 receiver2, receiver2_baton,
505 svn_repos_get_logs2(svn_repos_t *repos,
506 const apr_array_header_t *paths,
509 svn_boolean_t discover_changed_paths,
510 svn_boolean_t strict_node_history,
511 svn_repos_authz_func_t authz_read_func,
512 void *authz_read_baton,
513 svn_log_message_receiver_t receiver,
514 void *receiver_baton,
517 return svn_repos_get_logs3(repos, paths, start, end, 0,
518 discover_changed_paths, strict_node_history,
519 authz_read_func, authz_read_baton, receiver,
520 receiver_baton, pool);
525 svn_repos_get_logs(svn_repos_t *repos,
526 const apr_array_header_t *paths,
529 svn_boolean_t discover_changed_paths,
530 svn_boolean_t strict_node_history,
531 svn_log_message_receiver_t receiver,
532 void *receiver_baton,
535 return svn_repos_get_logs3(repos, paths, start, end, 0,
536 discover_changed_paths, strict_node_history,
537 NULL, NULL, /* no authz stuff */
538 receiver, receiver_baton, pool);
541 /*** From rev_hunt.c ***/
543 svn_repos_history(svn_fs_t *fs,
545 svn_repos_history_func_t history_func,
549 svn_boolean_t cross_copies,
552 return svn_repos_history2(fs, path, history_func, history_baton,
554 start, end, cross_copies, pool);
558 svn_repos_get_file_revs(svn_repos_t *repos,
562 svn_repos_authz_func_t authz_read_func,
563 void *authz_read_baton,
564 svn_repos_file_rev_handler_t handler,
568 svn_file_rev_handler_t handler2;
569 void *handler2_baton;
571 svn_compat_wrap_file_rev_handler(&handler2, &handler2_baton, handler,
572 handler_baton, pool);
574 return svn_repos_get_file_revs2(repos, path, start, end, FALSE,
575 authz_read_func, authz_read_baton,
576 handler2, handler2_baton, pool);
579 /*** From dump.c ***/
581 svn_repos_dump_fs(svn_repos_t *repos,
582 svn_stream_t *stream,
583 svn_stream_t *feedback_stream,
584 svn_revnum_t start_rev,
585 svn_revnum_t end_rev,
586 svn_boolean_t incremental,
587 svn_cancel_func_t cancel_func,
591 return svn_repos_dump_fs2(repos, stream, feedback_stream, start_rev,
592 end_rev, incremental, FALSE, cancel_func,
596 /* Implementation of svn_repos_notify_func_t to wrap the output to a
597 response stream for svn_repos_dump_fs2() and svn_repos_verify_fs() */
599 repos_notify_handler(void *baton,
600 const svn_repos_notify_t *notify,
601 apr_pool_t *scratch_pool)
603 svn_stream_t *feedback_stream = baton;
606 switch (notify->action)
608 case svn_repos_notify_warning:
609 svn_error_clear(svn_stream_puts(feedback_stream, notify->warning_str));
612 case svn_repos_notify_dump_rev_end:
613 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
614 _("* Dumped revision %ld.\n"),
618 case svn_repos_notify_verify_rev_end:
619 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
620 _("* Verified revision %ld.\n"),
624 case svn_repos_notify_load_txn_committed:
625 if (notify->old_revision == SVN_INVALID_REVNUM)
627 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
628 _("\n------- Committed revision %ld >>>\n\n"),
629 notify->new_revision));
633 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
634 _("\n------- Committed new rev %ld"
635 " (loaded from original rev %ld"
636 ") >>>\n\n"), notify->new_revision,
637 notify->old_revision));
641 case svn_repos_notify_load_node_start:
643 switch (notify->node_action)
645 case svn_node_action_change:
646 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
647 _(" * editing path : %s ..."),
651 case svn_node_action_delete:
652 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
653 _(" * deleting path : %s ..."),
657 case svn_node_action_add:
658 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
659 _(" * adding path : %s ..."),
663 case svn_node_action_replace:
664 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
665 _(" * replacing path : %s ..."),
673 case svn_repos_notify_load_node_done:
675 svn_error_clear(svn_stream_write(feedback_stream, _(" done.\n"), &len));
678 case svn_repos_notify_load_copied_node:
680 svn_error_clear(svn_stream_write(feedback_stream, "COPIED...", &len));
683 case svn_repos_notify_load_txn_start:
684 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
685 _("<<< Started new transaction, based on "
686 "original revision %ld\n"),
687 notify->old_revision));
690 case svn_repos_notify_load_normalized_mergeinfo:
691 svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
692 _(" removing '\\r' from %s ..."),
693 SVN_PROP_MERGEINFO));
703 svn_repos_dump_fs2(svn_repos_t *repos,
704 svn_stream_t *stream,
705 svn_stream_t *feedback_stream,
706 svn_revnum_t start_rev,
707 svn_revnum_t end_rev,
708 svn_boolean_t incremental,
709 svn_boolean_t use_deltas,
710 svn_cancel_func_t cancel_func,
714 return svn_error_trace(svn_repos_dump_fs3(repos,
721 ? repos_notify_handler
730 svn_repos_verify_fs(svn_repos_t *repos,
731 svn_stream_t *feedback_stream,
732 svn_revnum_t start_rev,
733 svn_revnum_t end_rev,
734 svn_cancel_func_t cancel_func,
738 return svn_error_trace(svn_repos_verify_fs2(repos,
742 ? repos_notify_handler
750 /*** From load.c ***/
753 svn_repos_load_fs3(svn_repos_t *repos,
754 svn_stream_t *dumpstream,
755 enum svn_repos_load_uuid uuid_action,
756 const char *parent_dir,
757 svn_boolean_t use_pre_commit_hook,
758 svn_boolean_t use_post_commit_hook,
759 svn_boolean_t validate_props,
760 svn_repos_notify_func_t notify_func,
762 svn_cancel_func_t cancel_func,
766 return svn_repos_load_fs4(repos, dumpstream,
767 SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
768 uuid_action, parent_dir,
769 use_pre_commit_hook, use_post_commit_hook,
770 validate_props, notify_func, notify_baton,
771 cancel_func, cancel_baton, pool);
775 svn_repos_load_fs2(svn_repos_t *repos,
776 svn_stream_t *dumpstream,
777 svn_stream_t *feedback_stream,
778 enum svn_repos_load_uuid uuid_action,
779 const char *parent_dir,
780 svn_boolean_t use_pre_commit_hook,
781 svn_boolean_t use_post_commit_hook,
782 svn_cancel_func_t cancel_func,
786 return svn_repos_load_fs3(repos, dumpstream, uuid_action, parent_dir,
787 use_pre_commit_hook, use_post_commit_hook, FALSE,
788 feedback_stream ? repos_notify_handler : NULL,
789 feedback_stream, cancel_func, cancel_baton, pool);
793 static svn_repos_parser_fns_t *
794 fns_from_fns2(const svn_repos_parse_fns2_t *fns2,
797 svn_repos_parser_fns_t *fns;
799 fns = apr_palloc(pool, sizeof(*fns));
800 fns->new_revision_record = fns2->new_revision_record;
801 fns->uuid_record = fns2->uuid_record;
802 fns->new_node_record = fns2->new_node_record;
803 fns->set_revision_property = fns2->set_revision_property;
804 fns->set_node_property = fns2->set_node_property;
805 fns->remove_node_props = fns2->remove_node_props;
806 fns->set_fulltext = fns2->set_fulltext;
807 fns->close_node = fns2->close_node;
808 fns->close_revision = fns2->close_revision;
812 static svn_repos_parser_fns2_t *
813 fns2_from_fns3(const svn_repos_parse_fns3_t *fns3,
816 svn_repos_parser_fns2_t *fns2;
818 fns2 = apr_palloc(pool, sizeof(*fns2));
819 fns2->new_revision_record = fns3->new_revision_record;
820 fns2->uuid_record = fns3->uuid_record;
821 fns2->new_node_record = fns3->new_node_record;
822 fns2->set_revision_property = fns3->set_revision_property;
823 fns2->set_node_property = fns3->set_node_property;
824 fns2->remove_node_props = fns3->remove_node_props;
825 fns2->set_fulltext = fns3->set_fulltext;
826 fns2->close_node = fns3->close_node;
827 fns2->close_revision = fns3->close_revision;
828 fns2->delete_node_property = fns3->delete_node_property;
829 fns2->apply_textdelta = fns3->apply_textdelta;
833 static svn_repos_parse_fns2_t *
834 fns2_from_fns(const svn_repos_parser_fns_t *fns,
837 svn_repos_parse_fns2_t *fns2;
839 fns2 = apr_palloc(pool, sizeof(*fns2));
840 fns2->new_revision_record = fns->new_revision_record;
841 fns2->uuid_record = fns->uuid_record;
842 fns2->new_node_record = fns->new_node_record;
843 fns2->set_revision_property = fns->set_revision_property;
844 fns2->set_node_property = fns->set_node_property;
845 fns2->remove_node_props = fns->remove_node_props;
846 fns2->set_fulltext = fns->set_fulltext;
847 fns2->close_node = fns->close_node;
848 fns2->close_revision = fns->close_revision;
849 fns2->delete_node_property = NULL;
850 fns2->apply_textdelta = NULL;
854 static svn_repos_parse_fns3_t *
855 fns3_from_fns2(const svn_repos_parser_fns2_t *fns2,
858 svn_repos_parse_fns3_t *fns3;
860 fns3 = apr_palloc(pool, sizeof(*fns3));
861 fns3->magic_header_record = NULL;
862 fns3->uuid_record = fns2->uuid_record;
863 fns3->new_revision_record = fns2->new_revision_record;
864 fns3->new_node_record = fns2->new_node_record;
865 fns3->set_revision_property = fns2->set_revision_property;
866 fns3->set_node_property = fns2->set_node_property;
867 fns3->remove_node_props = fns2->remove_node_props;
868 fns3->set_fulltext = fns2->set_fulltext;
869 fns3->close_node = fns2->close_node;
870 fns3->close_revision = fns2->close_revision;
871 fns3->delete_node_property = fns2->delete_node_property;
872 fns3->apply_textdelta = fns2->apply_textdelta;
877 svn_repos_parse_dumpstream2(svn_stream_t *stream,
878 const svn_repos_parser_fns2_t *parse_fns,
880 svn_cancel_func_t cancel_func,
884 svn_repos_parse_fns3_t *fns3 = fns3_from_fns2(parse_fns, pool);
886 return svn_repos_parse_dumpstream3(stream, fns3, parse_baton, FALSE,
887 cancel_func, cancel_baton, pool);
891 svn_repos_parse_dumpstream(svn_stream_t *stream,
892 const svn_repos_parser_fns_t *parse_fns,
894 svn_cancel_func_t cancel_func,
898 svn_repos_parse_fns2_t *fns2 = fns2_from_fns(parse_fns, pool);
900 return svn_repos_parse_dumpstream2(stream, fns2, parse_baton,
901 cancel_func, cancel_baton, pool);
905 svn_repos_load_fs(svn_repos_t *repos,
906 svn_stream_t *dumpstream,
907 svn_stream_t *feedback_stream,
908 enum svn_repos_load_uuid uuid_action,
909 const char *parent_dir,
910 svn_cancel_func_t cancel_func,
914 return svn_repos_load_fs2(repos, dumpstream, feedback_stream,
915 uuid_action, parent_dir, FALSE, FALSE,
916 cancel_func, cancel_baton, pool);
920 svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **callbacks,
923 svn_boolean_t use_history,
924 svn_boolean_t validate_props,
925 enum svn_repos_load_uuid uuid_action,
926 const char *parent_dir,
927 svn_repos_notify_func_t notify_func,
931 const svn_repos_parse_fns3_t *fns3;
933 SVN_ERR(svn_repos_get_fs_build_parser4(&fns3, parse_baton, repos,
936 use_history, validate_props,
937 uuid_action, parent_dir,
938 notify_func, notify_baton, pool));
940 *callbacks = fns2_from_fns3(fns3, pool);
945 svn_repos_get_fs_build_parser2(const svn_repos_parse_fns2_t **parser,
948 svn_boolean_t use_history,
949 enum svn_repos_load_uuid uuid_action,
950 svn_stream_t *outstream,
951 const char *parent_dir,
954 return svn_repos_get_fs_build_parser3(parser, parse_baton, repos, use_history,
955 FALSE, uuid_action, parent_dir,
956 outstream ? repos_notify_handler : NULL,
961 svn_repos_get_fs_build_parser(const svn_repos_parser_fns_t **parser_callbacks,
964 svn_boolean_t use_history,
965 enum svn_repos_load_uuid uuid_action,
966 svn_stream_t *outstream,
967 const char *parent_dir,
970 const svn_repos_parse_fns2_t *fns2;
972 SVN_ERR(svn_repos_get_fs_build_parser2(&fns2, parse_baton, repos,
973 use_history, uuid_action, outstream,
976 *parser_callbacks = fns_from_fns2(fns2, pool);
982 svn_repos_fs_begin_txn_for_update(svn_fs_txn_t **txn_p,
988 /* ### someday, we might run a read-hook here. */
990 /* Begin the transaction. */
991 SVN_ERR(svn_fs_begin_txn2(txn_p, repos->fs, rev, 0, pool));
993 /* We pass the author to the filesystem by adding it as a property
1001 val.len = strlen(author);
1002 SVN_ERR(svn_fs_change_txn_prop(*txn_p, SVN_PROP_REVISION_AUTHOR,
1006 return SVN_NO_ERROR;
1009 /*** From authz.c ***/
1012 svn_repos_authz_read(svn_authz_t **authz_p, const char *file,
1013 svn_boolean_t must_exist, apr_pool_t *pool)
1015 return svn_repos__authz_read(authz_p, file, NULL, must_exist,