source: valtobtest/subversion-1.6.2/subversion/libsvn_wc/deprecated.c @ 3

Last change on this file since 3 was 3, checked in by valtob, 15 years ago

subversion source 1.6.2 as test

File size: 52.2 KB
Line 
1/*
2 * deprecated.c:  holding file for all deprecated APIs.
3 *                "we can't lose 'em, but we can shun 'em!"
4 *
5 * ====================================================================
6 * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
7 *
8 * This software is licensed as described in the file COPYING, which
9 * you should have received as part of this distribution.  The terms
10 * are also available at http://subversion.tigris.org/license-1.html.
11 * If newer versions of this license are posted there, you may use a
12 * newer version instead, at your option.
13 *
14 * This software consists of voluntary contributions made by many
15 * individuals.  For exact contribution history, see the revision
16 * history and logs, available at http://subversion.tigris.org/.
17 * ====================================================================
18 */
19
20/* We define this here to remove any further warnings about the usage of
21   deprecated functions in this file. */
22#define SVN_DEPRECATED
23
24#include "svn_wc.h"
25#include "svn_subst.h"
26#include "svn_pools.h"
27#include "svn_props.h"
28
29#include "wc.h"
30
31#include "svn_private_config.h"
32
33
34
35
36/*** From adm_crawler.c ***/
37
38/*** Compatibility wrapper: turns an svn_ra_reporter2_t into an
39     svn_ra_reporter3_t.
40
41     This code looks like it duplicates code in libsvn_ra/ra_loader.c,
42     but it does not.  That code makes an new thing look like an old
43     thing; this code makes an old thing look like a new thing. ***/
44
45struct wrap_3to2_report_baton {
46  const svn_ra_reporter2_t *reporter;
47  void *baton;
48};
49
50static svn_error_t *wrap_3to2_set_path(void *report_baton,
51                                       const char *path,
52                                       svn_revnum_t revision,
53                                       svn_depth_t depth,
54                                       svn_boolean_t start_empty,
55                                       const char *lock_token,
56                                       apr_pool_t *pool)
57{
58  struct wrap_3to2_report_baton *wrb = report_baton;
59
60  return wrb->reporter->set_path(wrb->baton, path, revision, start_empty,
61                                 lock_token, pool);
62}
63
64static svn_error_t *wrap_3to2_delete_path(void *report_baton,
65                                          const char *path,
66                                          apr_pool_t *pool)
67{
68  struct wrap_3to2_report_baton *wrb = report_baton;
69
70  return wrb->reporter->delete_path(wrb->baton, path, pool);
71}
72
73static svn_error_t *wrap_3to2_link_path(void *report_baton,
74                                        const char *path,
75                                        const char *url,
76                                        svn_revnum_t revision,
77                                        svn_depth_t depth,
78                                        svn_boolean_t start_empty,
79                                        const char *lock_token,
80                                        apr_pool_t *pool)
81{
82  struct wrap_3to2_report_baton *wrb = report_baton;
83
84  return wrb->reporter->link_path(wrb->baton, path, url, revision,
85                                  start_empty, lock_token, pool);
86}
87
88static svn_error_t *wrap_3to2_finish_report(void *report_baton,
89                                            apr_pool_t *pool)
90{
91  struct wrap_3to2_report_baton *wrb = report_baton;
92
93  return wrb->reporter->finish_report(wrb->baton, pool);
94}
95
96static svn_error_t *wrap_3to2_abort_report(void *report_baton,
97                                           apr_pool_t *pool)
98{
99  struct wrap_3to2_report_baton *wrb = report_baton;
100
101  return wrb->reporter->abort_report(wrb->baton, pool);
102}
103
104static const svn_ra_reporter3_t wrap_3to2_reporter = {
105  wrap_3to2_set_path,
106  wrap_3to2_delete_path,
107  wrap_3to2_link_path,
108  wrap_3to2_finish_report,
109  wrap_3to2_abort_report
110};
111
112svn_error_t *
113svn_wc_crawl_revisions2(const char *path,
114                        svn_wc_adm_access_t *adm_access,
115                        const svn_ra_reporter2_t *reporter,
116                        void *report_baton,
117                        svn_boolean_t restore_files,
118                        svn_boolean_t recurse,
119                        svn_boolean_t use_commit_times,
120                        svn_wc_notify_func2_t notify_func,
121                        void *notify_baton,
122                        svn_wc_traversal_info_t *traversal_info,
123                        apr_pool_t *pool)
124{
125  struct wrap_3to2_report_baton wrb;
126  wrb.reporter = reporter;
127  wrb.baton = report_baton;
128
129  return svn_wc_crawl_revisions3(path,
130                                 adm_access,
131                                 &wrap_3to2_reporter, &wrb,
132                                 restore_files,
133                                 SVN_DEPTH_INFINITY_OR_FILES(recurse),
134                                 FALSE,
135                                 use_commit_times,
136                                 notify_func,
137                                 notify_baton,
138                                 traversal_info,
139                                 pool);
140}
141
142
143/*** Compatibility wrapper: turns an svn_ra_reporter_t into an
144     svn_ra_reporter2_t.
145
146     This code looks like it duplicates code in libsvn_ra/ra_loader.c,
147     but it does not.  That code makes an new thing look like an old
148     thing; this code makes an old thing look like a new thing. ***/
149
150struct wrap_2to1_report_baton {
151  const svn_ra_reporter_t *reporter;
152  void *baton;
153};
154
155static svn_error_t *wrap_2to1_set_path(void *report_baton,
156                                       const char *path,
157                                       svn_revnum_t revision,
158                                       svn_boolean_t start_empty,
159                                       const char *lock_token,
160                                       apr_pool_t *pool)
161{
162  struct wrap_2to1_report_baton *wrb = report_baton;
163
164  return wrb->reporter->set_path(wrb->baton, path, revision, start_empty,
165                                 pool);
166}
167
168static svn_error_t *wrap_2to1_delete_path(void *report_baton,
169                                          const char *path,
170                                          apr_pool_t *pool)
171{
172  struct wrap_2to1_report_baton *wrb = report_baton;
173
174  return wrb->reporter->delete_path(wrb->baton, path, pool);
175}
176
177static svn_error_t *wrap_2to1_link_path(void *report_baton,
178                                        const char *path,
179                                        const char *url,
180                                        svn_revnum_t revision,
181                                        svn_boolean_t start_empty,
182                                        const char *lock_token,
183                                        apr_pool_t *pool)
184{
185  struct wrap_2to1_report_baton *wrb = report_baton;
186
187  return wrb->reporter->link_path(wrb->baton, path, url, revision,
188                                  start_empty, pool);
189}
190
191static svn_error_t *wrap_2to1_finish_report(void *report_baton,
192                                            apr_pool_t *pool)
193{
194  struct wrap_2to1_report_baton *wrb = report_baton;
195
196  return wrb->reporter->finish_report(wrb->baton, pool);
197}
198
199static svn_error_t *wrap_2to1_abort_report(void *report_baton,
200                                           apr_pool_t *pool)
201{
202  struct wrap_2to1_report_baton *wrb = report_baton;
203
204  return wrb->reporter->abort_report(wrb->baton, pool);
205}
206
207static const svn_ra_reporter2_t wrap_2to1_reporter = {
208  wrap_2to1_set_path,
209  wrap_2to1_delete_path,
210  wrap_2to1_link_path,
211  wrap_2to1_finish_report,
212  wrap_2to1_abort_report
213};
214
215svn_error_t *
216svn_wc_crawl_revisions(const char *path,
217                       svn_wc_adm_access_t *adm_access,
218                       const svn_ra_reporter_t *reporter,
219                       void *report_baton,
220                       svn_boolean_t restore_files,
221                       svn_boolean_t recurse,
222                       svn_boolean_t use_commit_times,
223                       svn_wc_notify_func_t notify_func,
224                       void *notify_baton,
225                       svn_wc_traversal_info_t *traversal_info,
226                       apr_pool_t *pool)
227{
228  struct wrap_2to1_report_baton wrb;
229  svn_wc__compat_notify_baton_t nb;
230
231  wrb.reporter = reporter;
232  wrb.baton = report_baton;
233
234  nb.func = notify_func;
235  nb.baton = notify_baton;
236
237  return svn_wc_crawl_revisions2(path, adm_access, &wrap_2to1_reporter, &wrb,
238                                 restore_files, recurse, use_commit_times,
239                                 svn_wc__compat_call_notify_func, &nb,
240                                 traversal_info,
241                                 pool);
242}
243
244/*** From adm_files.c ***/
245svn_error_t *
246svn_wc_ensure_adm2(const char *path,
247                   const char *uuid,
248                   const char *url,
249                   const char *repos,
250                   svn_revnum_t revision,
251                   apr_pool_t *pool)
252{
253  return svn_wc_ensure_adm3(path, uuid, url, repos, revision,
254                            svn_depth_infinity, pool);
255}
256
257
258svn_error_t *
259svn_wc_ensure_adm(const char *path,
260                  const char *uuid,
261                  const char *url,
262                  svn_revnum_t revision,
263                  apr_pool_t *pool)
264{
265  return svn_wc_ensure_adm2(path, uuid, url, NULL, revision, pool);
266}
267
268svn_error_t *
269svn_wc_create_tmp_file(apr_file_t **fp,
270                       const char *path,
271                       svn_boolean_t delete_on_close,
272                       apr_pool_t *pool)
273{
274  return svn_wc_create_tmp_file2(fp, NULL, path,
275                                 delete_on_close
276                                 ? svn_io_file_del_on_close
277                                 : svn_io_file_del_none,
278                                 pool);
279}
280
281
282/*** From adm_ops.c ***/
283svn_error_t *
284svn_wc_process_committed3(const char *path,
285                          svn_wc_adm_access_t *adm_access,
286                          svn_boolean_t recurse,
287                          svn_revnum_t new_revnum,
288                          const char *rev_date,
289                          const char *rev_author,
290                          apr_array_header_t *wcprop_changes,
291                          svn_boolean_t remove_lock,
292                          const unsigned char *digest,
293                          apr_pool_t *pool)
294{
295  return svn_wc_process_committed4(path, adm_access, recurse, new_revnum,
296                                   rev_date, rev_author, wcprop_changes,
297                                   remove_lock, FALSE, digest, pool);
298}
299
300svn_error_t *
301svn_wc_process_committed2(const char *path,
302                          svn_wc_adm_access_t *adm_access,
303                          svn_boolean_t recurse,
304                          svn_revnum_t new_revnum,
305                          const char *rev_date,
306                          const char *rev_author,
307                          apr_array_header_t *wcprop_changes,
308                          svn_boolean_t remove_lock,
309                          apr_pool_t *pool)
310{
311  return svn_wc_process_committed3(path, adm_access, recurse, new_revnum,
312                                   rev_date, rev_author, wcprop_changes,
313                                   remove_lock, NULL, pool);
314}
315
316svn_error_t *
317svn_wc_process_committed(const char *path,
318                         svn_wc_adm_access_t *adm_access,
319                         svn_boolean_t recurse,
320                         svn_revnum_t new_revnum,
321                         const char *rev_date,
322                         const char *rev_author,
323                         apr_array_header_t *wcprop_changes,
324                         apr_pool_t *pool)
325{
326  return svn_wc_process_committed2(path, adm_access, recurse, new_revnum,
327                                   rev_date, rev_author, wcprop_changes,
328                                   FALSE, pool);
329}
330
331svn_error_t *
332svn_wc_delete2(const char *path,
333               svn_wc_adm_access_t *adm_access,
334               svn_cancel_func_t cancel_func,
335               void *cancel_baton,
336               svn_wc_notify_func2_t notify_func,
337               void *notify_baton,
338               apr_pool_t *pool)
339{
340  return svn_wc_delete3(path, adm_access, cancel_func, cancel_baton,
341                        notify_func, notify_baton, FALSE, pool);
342}
343
344svn_error_t *
345svn_wc_delete(const char *path,
346              svn_wc_adm_access_t *adm_access,
347              svn_cancel_func_t cancel_func,
348              void *cancel_baton,
349              svn_wc_notify_func_t notify_func,
350              void *notify_baton,
351              apr_pool_t *pool)
352{
353  svn_wc__compat_notify_baton_t nb;
354
355  nb.func = notify_func;
356  nb.baton = notify_baton;
357
358  return svn_wc_delete2(path, adm_access, cancel_func, cancel_baton,
359                        svn_wc__compat_call_notify_func, &nb, pool);
360}
361
362svn_error_t *
363svn_wc_add2(const char *path,
364            svn_wc_adm_access_t *parent_access,
365            const char *copyfrom_url,
366            svn_revnum_t copyfrom_rev,
367            svn_cancel_func_t cancel_func,
368            void *cancel_baton,
369            svn_wc_notify_func2_t notify_func,
370            void *notify_baton,
371            apr_pool_t *pool)
372{
373  return svn_wc_add3(path, parent_access, svn_depth_infinity,
374                     copyfrom_url, copyfrom_rev,
375                     cancel_func, cancel_baton,
376                     notify_func, notify_baton, pool);
377}
378
379svn_error_t *
380svn_wc_add(const char *path,
381           svn_wc_adm_access_t *parent_access,
382           const char *copyfrom_url,
383           svn_revnum_t copyfrom_rev,
384           svn_cancel_func_t cancel_func,
385           void *cancel_baton,
386           svn_wc_notify_func_t notify_func,
387           void *notify_baton,
388           apr_pool_t *pool)
389{
390  svn_wc__compat_notify_baton_t nb;
391
392  nb.func = notify_func;
393  nb.baton = notify_baton;
394
395  return svn_wc_add2(path, parent_access, copyfrom_url, copyfrom_rev,
396                     cancel_func, cancel_baton,
397                     svn_wc__compat_call_notify_func, &nb, pool);
398}
399
400svn_error_t *
401svn_wc_revert2(const char *path,
402               svn_wc_adm_access_t *parent_access,
403               svn_boolean_t recursive,
404               svn_boolean_t use_commit_times,
405               svn_cancel_func_t cancel_func,
406               void *cancel_baton,
407               svn_wc_notify_func2_t notify_func,
408               void *notify_baton,
409               apr_pool_t *pool)
410{
411  return svn_wc_revert3(path, parent_access,
412                        SVN_DEPTH_INFINITY_OR_EMPTY(recursive),
413                        use_commit_times, NULL, cancel_func, cancel_baton,
414                        notify_func, notify_baton, pool);
415}
416
417svn_error_t *
418svn_wc_revert(const char *path,
419              svn_wc_adm_access_t *parent_access,
420              svn_boolean_t recursive,
421              svn_boolean_t use_commit_times,
422              svn_cancel_func_t cancel_func,
423              void *cancel_baton,
424              svn_wc_notify_func_t notify_func,
425              void *notify_baton,
426              apr_pool_t *pool)
427{
428  svn_wc__compat_notify_baton_t nb;
429
430  nb.func = notify_func;
431  nb.baton = notify_baton;
432
433  return svn_wc_revert2(path, parent_access, recursive, use_commit_times,
434                        cancel_func, cancel_baton,
435                        svn_wc__compat_call_notify_func, &nb, pool);
436}
437
438svn_error_t *
439svn_wc_resolved_conflict(const char *path,
440                         svn_wc_adm_access_t *adm_access,
441                         svn_boolean_t resolve_text,
442                         svn_boolean_t resolve_props,
443                         svn_boolean_t recurse,
444                         svn_wc_notify_func_t notify_func,
445                         void *notify_baton,
446                         apr_pool_t *pool)
447{
448  svn_wc__compat_notify_baton_t nb;
449
450  nb.func = notify_func;
451  nb.baton = notify_baton;
452
453  return svn_wc_resolved_conflict2(path, adm_access,
454                                   resolve_text, resolve_props, recurse,
455                                   svn_wc__compat_call_notify_func, &nb,
456                                   NULL, NULL, pool);
457
458}
459
460svn_error_t *
461svn_wc_resolved_conflict2(const char *path,
462                          svn_wc_adm_access_t *adm_access,
463                          svn_boolean_t resolve_text,
464                          svn_boolean_t resolve_props,
465                          svn_boolean_t recurse,
466                          svn_wc_notify_func2_t notify_func,
467                          void *notify_baton,
468                          svn_cancel_func_t cancel_func,
469                          void *cancel_baton,
470                          apr_pool_t *pool)
471{
472  return svn_wc_resolved_conflict3(path, adm_access, resolve_text,
473                                   resolve_props,
474                                   SVN_DEPTH_INFINITY_OR_EMPTY(recurse),
475                                   svn_wc_conflict_choose_merged,
476                                   notify_func, notify_baton, cancel_func,
477                                   cancel_baton, pool);
478}
479
480svn_error_t *
481svn_wc_resolved_conflict3(const char *path,
482                          svn_wc_adm_access_t *adm_access,
483                          svn_boolean_t resolve_text,
484                          svn_boolean_t resolve_props,
485                          svn_depth_t depth,
486                          svn_wc_conflict_choice_t conflict_choice,
487                          svn_wc_notify_func2_t notify_func,
488                          void *notify_baton,
489                          svn_cancel_func_t cancel_func,
490                          void *cancel_baton,
491                          apr_pool_t *pool)
492{
493  return svn_wc_resolved_conflict4(path, adm_access, resolve_text,
494                                   resolve_props, FALSE, depth,
495                                   svn_wc_conflict_choose_merged,
496                                   notify_func, notify_baton, cancel_func,
497                                   cancel_baton, pool);
498}
499
500/*** From diff.c ***/
501/* Used to wrap svn_wc_diff_callbacks_t. */
502struct callbacks_wrapper_baton {
503  const svn_wc_diff_callbacks_t *callbacks;
504  void *baton;
505};
506
507/* An svn_wc_diff_callbacks3_t function for wrapping svn_wc_diff_callbacks_t. */
508static svn_error_t *
509file_changed(svn_wc_adm_access_t *adm_access,
510             svn_wc_notify_state_t *contentstate,
511             svn_wc_notify_state_t *propstate,
512             svn_boolean_t *tree_conflicted,
513             const char *path,
514             const char *tmpfile1,
515             const char *tmpfile2,
516             svn_revnum_t rev1,
517             svn_revnum_t rev2,
518             const char *mimetype1,
519             const char *mimetype2,
520             const apr_array_header_t *propchanges,
521             apr_hash_t *originalprops,
522             void *diff_baton)
523{
524  struct callbacks_wrapper_baton *b = diff_baton;
525
526  if (tree_conflicted)
527    *tree_conflicted = FALSE;
528
529  if (tmpfile2 != NULL)
530    SVN_ERR(b->callbacks->file_changed(adm_access, contentstate, path,
531                                       tmpfile1, tmpfile2,
532                                       rev1, rev2, mimetype1, mimetype2,
533                                       b->baton));
534  if (propchanges->nelts > 0)
535    SVN_ERR(b->callbacks->props_changed(adm_access, propstate, path,
536                                        propchanges, originalprops,
537                                        b->baton));
538
539  return SVN_NO_ERROR;
540}
541
542/* An svn_wc_diff_callbacks3_t function for wrapping svn_wc_diff_callbacks_t. */
543static svn_error_t *
544file_added(svn_wc_adm_access_t *adm_access,
545           svn_wc_notify_state_t *contentstate,
546           svn_wc_notify_state_t *propstate,
547           svn_boolean_t *tree_conflicted,
548           const char *path,
549           const char *tmpfile1,
550           const char *tmpfile2,
551           svn_revnum_t rev1,
552           svn_revnum_t rev2,
553           const char *mimetype1,
554           const char *mimetype2,
555           const apr_array_header_t *propchanges,
556           apr_hash_t *originalprops,
557           void *diff_baton)
558{
559  struct callbacks_wrapper_baton *b = diff_baton;
560
561  if (tree_conflicted)
562    *tree_conflicted = FALSE;
563
564  SVN_ERR(b->callbacks->file_added(adm_access, contentstate, path,
565                                   tmpfile1, tmpfile2, rev1, rev2,
566                                   mimetype1, mimetype2, b->baton));
567  if (propchanges->nelts > 0)
568    SVN_ERR(b->callbacks->props_changed(adm_access, propstate, path,
569                                        propchanges, originalprops,
570                                        b->baton));
571
572  return SVN_NO_ERROR;
573}
574
575/* An svn_wc_diff_callbacks3_t function for wrapping svn_wc_diff_callbacks_t. */
576static svn_error_t *
577file_deleted(svn_wc_adm_access_t *adm_access,
578             svn_wc_notify_state_t *state,
579             svn_boolean_t *tree_conflicted,
580             const char *path,
581             const char *tmpfile1,
582             const char *tmpfile2,
583             const char *mimetype1,
584             const char *mimetype2,
585             apr_hash_t *originalprops,
586             void *diff_baton)
587{
588  struct callbacks_wrapper_baton *b = diff_baton;
589
590  if (tree_conflicted)
591    *tree_conflicted = FALSE;
592
593  SVN_ERR_ASSERT(originalprops);
594
595  return b->callbacks->file_deleted(adm_access, state, path,
596                                    tmpfile1, tmpfile2, mimetype1, mimetype2,
597                                    b->baton);
598}
599
600/* An svn_wc_diff_callbacks3_t function for wrapping svn_wc_diff_callbacks_t. */
601static svn_error_t *
602dir_added(svn_wc_adm_access_t *adm_access,
603          svn_wc_notify_state_t *state,
604          svn_boolean_t *tree_conflicted,
605          const char *path,
606          svn_revnum_t rev,
607          void *diff_baton)
608{
609  struct callbacks_wrapper_baton *b = diff_baton;
610
611  if (tree_conflicted)
612    *tree_conflicted = FALSE;
613
614  return b->callbacks->dir_added(adm_access, state, path, rev, b->baton);
615}
616
617/* An svn_wc_diff_callbacks3_t function for wrapping svn_wc_diff_callbacks_t. */
618static svn_error_t *
619dir_deleted(svn_wc_adm_access_t *adm_access,
620            svn_wc_notify_state_t *state,
621            svn_boolean_t *tree_conflicted,
622            const char *path,
623            void *diff_baton)
624{
625  struct callbacks_wrapper_baton *b = diff_baton;
626
627  if (tree_conflicted)
628    *tree_conflicted = FALSE;
629
630  return b->callbacks->dir_deleted(adm_access, state, path, b->baton);
631}
632
633/* An svn_wc_diff_callbacks3_t function for wrapping svn_wc_diff_callbacks_t. */
634static svn_error_t *
635dir_props_changed(svn_wc_adm_access_t *adm_access,
636                  svn_wc_notify_state_t *state,
637                  svn_boolean_t *tree_conflicted,
638                  const char *path,
639                  const apr_array_header_t *propchanges,
640                  apr_hash_t *originalprops,
641                  void *diff_baton)
642{
643  struct callbacks_wrapper_baton *b = diff_baton;
644
645  if (tree_conflicted)
646    *tree_conflicted = FALSE;
647
648  return b->callbacks->props_changed(adm_access, state, path, propchanges,
649                                     originalprops, b->baton);
650}
651
652/* An svn_wc_diff_callbacks3_t function for wrapping svn_wc_diff_callbacks_t
653   and svn_wc_diff_callbacks2_t. */
654static svn_error_t *
655dir_opened(svn_wc_adm_access_t *adm_access,
656           svn_boolean_t *tree_conflicted,
657           const char *path,
658           svn_revnum_t rev,
659           void *diff_baton)
660{
661  if (tree_conflicted)
662    *tree_conflicted = FALSE;
663  /* Do nothing. */
664  return SVN_NO_ERROR;
665}
666
667/* An svn_wc_diff_callbacks3_t function for wrapping svn_wc_diff_callbacks_t
668   and svn_wc_diff_callbacks2_t. */
669static svn_error_t *
670dir_closed(svn_wc_adm_access_t *adm_access,
671           svn_wc_notify_state_t *propstate,
672           svn_wc_notify_state_t *contentstate,
673           svn_boolean_t *tree_conflicted,
674           const char *path,
675           void *diff_baton)
676{
677  if (contentstate)
678    *contentstate = svn_wc_notify_state_unknown;
679  if (propstate)
680    *propstate = svn_wc_notify_state_unknown;
681  if (tree_conflicted)
682    *tree_conflicted = FALSE;
683  /* Do nothing. */
684  return SVN_NO_ERROR;
685}
686
687/* Used to wrap svn_diff_callbacks_t as an svn_wc_diff_callbacks3_t. */
688static struct svn_wc_diff_callbacks3_t callbacks_wrapper = {
689  file_changed,
690  file_added,
691  file_deleted,
692  dir_added,
693  dir_deleted,
694  dir_props_changed,
695  dir_opened,
696  dir_closed
697};
698
699
700
701/* Used to wrap svn_wc_diff_callbacks2_t. */
702struct callbacks2_wrapper_baton {
703  const svn_wc_diff_callbacks2_t *callbacks2;
704  void *baton;
705};
706
707/* An svn_wc_diff_callbacks3_t function for wrapping
708 * svn_wc_diff_callbacks2_t. */
709static svn_error_t *
710file_changed2(svn_wc_adm_access_t *adm_access,
711              svn_wc_notify_state_t *contentstate,
712              svn_wc_notify_state_t *propstate,
713              svn_boolean_t *tree_conflicted,
714              const char *path,
715              const char *tmpfile1,
716              const char *tmpfile2,
717              svn_revnum_t rev1,
718              svn_revnum_t rev2,
719              const char *mimetype1,
720              const char *mimetype2,
721              const apr_array_header_t *propchanges,
722              apr_hash_t *originalprops,
723              void *diff_baton)
724{
725  struct callbacks2_wrapper_baton *b = diff_baton;
726
727  if (tree_conflicted)
728    *tree_conflicted = FALSE;
729
730  return b->callbacks2->file_changed(adm_access, contentstate, propstate,
731                                     path, tmpfile1, tmpfile2,
732                                     rev1, rev2, mimetype1, mimetype2,
733                                     propchanges, originalprops, b->baton);
734}
735
736/* An svn_wc_diff_callbacks3_t function for wrapping
737 * svn_wc_diff_callbacks2_t. */
738static svn_error_t *
739file_added2(svn_wc_adm_access_t *adm_access,
740            svn_wc_notify_state_t *contentstate,
741            svn_wc_notify_state_t *propstate,
742            svn_boolean_t *tree_conflicted,
743            const char *path,
744            const char *tmpfile1,
745            const char *tmpfile2,
746            svn_revnum_t rev1,
747            svn_revnum_t rev2,
748            const char *mimetype1,
749            const char *mimetype2,
750            const apr_array_header_t *propchanges,
751            apr_hash_t *originalprops,
752            void *diff_baton)
753{
754  struct callbacks2_wrapper_baton *b = diff_baton;
755
756  if (tree_conflicted)
757    *tree_conflicted = FALSE;
758
759  return b->callbacks2->file_added(adm_access, contentstate, propstate, path,
760                                   tmpfile1, tmpfile2, rev1, rev2,
761                                   mimetype1, mimetype2, propchanges,
762                                   originalprops, b->baton);
763}
764
765/* An svn_wc_diff_callbacks3_t function for wrapping
766 * svn_wc_diff_callbacks2_t. */
767static svn_error_t *
768file_deleted2(svn_wc_adm_access_t *adm_access,
769              svn_wc_notify_state_t *state,
770              svn_boolean_t *tree_conflicted,
771              const char *path,
772              const char *tmpfile1,
773              const char *tmpfile2,
774              const char *mimetype1,
775              const char *mimetype2,
776              apr_hash_t *originalprops,
777              void *diff_baton)
778{
779  struct callbacks2_wrapper_baton *b = diff_baton;
780
781  if (tree_conflicted)
782    *tree_conflicted = FALSE;
783
784  return b->callbacks2->file_deleted(adm_access, state, path,
785                                     tmpfile1, tmpfile2, mimetype1, mimetype2,
786                                     originalprops, b->baton);
787}
788
789/* An svn_wc_diff_callbacks3_t function for wrapping
790 * svn_wc_diff_callbacks2_t. */
791static svn_error_t *
792dir_added2(svn_wc_adm_access_t *adm_access,
793           svn_wc_notify_state_t *state,
794           svn_boolean_t *tree_conflicted,
795           const char *path,
796           svn_revnum_t rev,
797           void *diff_baton)
798{
799  struct callbacks2_wrapper_baton *b = diff_baton;
800
801  if (tree_conflicted)
802    *tree_conflicted = FALSE;
803
804  return b->callbacks2->dir_added(adm_access, state, path, rev, b->baton);
805}
806
807/* An svn_wc_diff_callbacks3_t function for wrapping
808 * svn_wc_diff_callbacks2_t. */
809static svn_error_t *
810dir_deleted2(svn_wc_adm_access_t *adm_access,
811             svn_wc_notify_state_t *state,
812             svn_boolean_t *tree_conflicted,
813             const char *path,
814             void *diff_baton)
815{
816  struct callbacks2_wrapper_baton *b = diff_baton;
817
818  if (tree_conflicted)
819    *tree_conflicted = FALSE;
820
821  return b->callbacks2->dir_deleted(adm_access, state, path, b->baton);
822}
823
824/* An svn_wc_diff_callbacks3_t function for wrapping
825 * svn_wc_diff_callbacks2_t. */
826static svn_error_t *
827dir_props_changed2(svn_wc_adm_access_t *adm_access,
828                  svn_wc_notify_state_t *state,
829                  svn_boolean_t *tree_conflicted,
830                  const char *path,
831                  const apr_array_header_t *propchanges,
832                  apr_hash_t *originalprops,
833                  void *diff_baton)
834{
835  struct callbacks2_wrapper_baton *b = diff_baton;
836
837  if (tree_conflicted)
838    *tree_conflicted = FALSE;
839
840  return b->callbacks2->dir_props_changed(adm_access, state, path, propchanges,
841                                          originalprops, b->baton);
842}
843
844/* Used to wrap svn_diff_callbacks2_t as an svn_wc_diff_callbacks3_t. */
845static struct svn_wc_diff_callbacks3_t callbacks2_wrapper = {
846  file_changed2,
847  file_added2,
848  file_deleted2,
849  dir_added2,
850  dir_deleted2,
851  dir_props_changed2,
852  dir_opened,
853  dir_closed
854};
855
856
857svn_error_t *
858svn_wc_get_diff_editor4(svn_wc_adm_access_t *anchor,
859                        const char *target,
860                        const svn_wc_diff_callbacks2_t *callbacks,
861                        void *callback_baton,
862                        svn_depth_t depth,
863                        svn_boolean_t ignore_ancestry,
864                        svn_boolean_t use_text_base,
865                        svn_boolean_t reverse_order,
866                        svn_cancel_func_t cancel_func,
867                        void *cancel_baton,
868                        const apr_array_header_t *changelists,
869                        const svn_delta_editor_t **editor,
870                        void **edit_baton,
871                        apr_pool_t *pool)
872{
873  struct callbacks2_wrapper_baton *b = apr_palloc(pool, sizeof(*b));
874  b->callbacks2 = callbacks;
875  b->baton = callback_baton;
876  return svn_wc_get_diff_editor5(anchor,
877                                 target,
878                                 &callbacks2_wrapper,
879                                 b,
880                                 depth,
881                                 ignore_ancestry,
882                                 use_text_base,
883                                 reverse_order,
884                                 cancel_func,
885                                 cancel_baton,
886                                 changelists,
887                                 editor,
888                                 edit_baton,
889                                 pool);
890}
891
892svn_error_t *
893svn_wc_get_diff_editor3(svn_wc_adm_access_t *anchor,
894                        const char *target,
895                        const svn_wc_diff_callbacks2_t *callbacks,
896                        void *callback_baton,
897                        svn_boolean_t recurse,
898                        svn_boolean_t ignore_ancestry,
899                        svn_boolean_t use_text_base,
900                        svn_boolean_t reverse_order,
901                        svn_cancel_func_t cancel_func,
902                        void *cancel_baton,
903                        const svn_delta_editor_t **editor,
904                        void **edit_baton,
905                        apr_pool_t *pool)
906{
907  return svn_wc_get_diff_editor4(anchor,
908                                 target,
909                                 callbacks,
910                                 callback_baton,
911                                 SVN_DEPTH_INFINITY_OR_FILES(recurse),
912                                 ignore_ancestry,
913                                 use_text_base,
914                                 reverse_order,
915                                 cancel_func,
916                                 cancel_baton,
917                                 NULL,
918                                 editor,
919                                 edit_baton,
920                                 pool);
921}
922
923svn_error_t *
924svn_wc_get_diff_editor2(svn_wc_adm_access_t *anchor,
925                        const char *target,
926                        const svn_wc_diff_callbacks_t *callbacks,
927                        void *callback_baton,
928                        svn_boolean_t recurse,
929                        svn_boolean_t ignore_ancestry,
930                        svn_boolean_t use_text_base,
931                        svn_boolean_t reverse_order,
932                        svn_cancel_func_t cancel_func,
933                        void *cancel_baton,
934                        const svn_delta_editor_t **editor,
935                        void **edit_baton,
936                        apr_pool_t *pool)
937{
938  struct callbacks_wrapper_baton *b = apr_palloc(pool, sizeof(*b));
939  b->callbacks = callbacks;
940  b->baton = callback_baton;
941  return svn_wc_get_diff_editor5(anchor, target, &callbacks_wrapper, b,
942                                 SVN_DEPTH_INFINITY_OR_FILES(recurse),
943                                 ignore_ancestry, use_text_base,
944                                 reverse_order, cancel_func, cancel_baton,
945                                 NULL, editor, edit_baton, pool);
946}
947
948svn_error_t *
949svn_wc_get_diff_editor(svn_wc_adm_access_t *anchor,
950                       const char *target,
951                       const svn_wc_diff_callbacks_t *callbacks,
952                       void *callback_baton,
953                       svn_boolean_t recurse,
954                       svn_boolean_t use_text_base,
955                       svn_boolean_t reverse_order,
956                       svn_cancel_func_t cancel_func,
957                       void *cancel_baton,
958                       const svn_delta_editor_t **editor,
959                       void **edit_baton,
960                       apr_pool_t *pool)
961{
962  return svn_wc_get_diff_editor2(anchor, target, callbacks, callback_baton,
963                                 recurse, FALSE, use_text_base, reverse_order,
964                                 cancel_func, cancel_baton,
965                                 editor, edit_baton, pool);
966}
967
968svn_error_t *
969svn_wc_diff4(svn_wc_adm_access_t *anchor,
970             const char *target,
971             const svn_wc_diff_callbacks2_t *callbacks,
972             void *callback_baton,
973             svn_depth_t depth,
974             svn_boolean_t ignore_ancestry,
975             const apr_array_header_t *changelists,
976             apr_pool_t *pool)
977{
978  struct callbacks2_wrapper_baton *b = apr_palloc(pool, sizeof(*b));
979  b->callbacks2 = callbacks;
980  b->baton = callback_baton;
981
982  return svn_wc_diff5(anchor, target, &callbacks2_wrapper, b,
983                      depth, ignore_ancestry, changelists, pool);
984}
985
986svn_error_t *
987svn_wc_diff3(svn_wc_adm_access_t *anchor,
988             const char *target,
989             const svn_wc_diff_callbacks2_t *callbacks,
990             void *callback_baton,
991             svn_boolean_t recurse,
992             svn_boolean_t ignore_ancestry,
993             apr_pool_t *pool)
994{
995  return svn_wc_diff4(anchor, target, callbacks, callback_baton,
996                      SVN_DEPTH_INFINITY_OR_FILES(recurse), ignore_ancestry,
997                      NULL, pool);
998}
999
1000svn_error_t *
1001svn_wc_diff2(svn_wc_adm_access_t *anchor,
1002             const char *target,
1003             const svn_wc_diff_callbacks_t *callbacks,
1004             void *callback_baton,
1005             svn_boolean_t recurse,
1006             svn_boolean_t ignore_ancestry,
1007             apr_pool_t *pool)
1008{
1009  struct callbacks_wrapper_baton *b = apr_pcalloc(pool, sizeof(*b));
1010  b->callbacks = callbacks;
1011  b->baton = callback_baton;
1012  return svn_wc_diff5(anchor, target, &callbacks_wrapper, b,
1013                      SVN_DEPTH_INFINITY_OR_FILES(recurse), ignore_ancestry,
1014                      NULL, pool);
1015}
1016
1017svn_error_t *
1018svn_wc_diff(svn_wc_adm_access_t *anchor,
1019            const char *target,
1020            const svn_wc_diff_callbacks_t *callbacks,
1021            void *callback_baton,
1022            svn_boolean_t recurse,
1023            apr_pool_t *pool)
1024{
1025  return svn_wc_diff2(anchor, target, callbacks, callback_baton,
1026                      recurse, FALSE, pool);
1027}
1028
1029/*** From entries.c ***/
1030svn_error_t *
1031svn_wc_walk_entries2(const char *path,
1032                     svn_wc_adm_access_t *adm_access,
1033                     const svn_wc_entry_callbacks_t *walk_callbacks,
1034                     void *walk_baton,
1035                     svn_boolean_t show_hidden,
1036                     svn_cancel_func_t cancel_func,
1037                     void *cancel_baton,
1038                     apr_pool_t *pool)
1039{
1040  svn_wc_entry_callbacks2_t walk_cb2 = { 0 };
1041  walk_cb2.found_entry = walk_callbacks->found_entry;
1042  walk_cb2.handle_error = svn_wc__walker_default_error_handler;
1043  return svn_wc_walk_entries3(path, adm_access,
1044                              &walk_cb2, walk_baton, svn_depth_infinity,
1045                              show_hidden, cancel_func, cancel_baton, pool);
1046}
1047
1048svn_error_t *
1049svn_wc_walk_entries(const char *path,
1050                    svn_wc_adm_access_t *adm_access,
1051                    const svn_wc_entry_callbacks_t *walk_callbacks,
1052                    void *walk_baton,
1053                    svn_boolean_t show_hidden,
1054                    apr_pool_t *pool)
1055{
1056  return svn_wc_walk_entries2(path, adm_access, walk_callbacks,
1057                              walk_baton, show_hidden, NULL, NULL,
1058                              pool);
1059}
1060
1061/*** From props.c ***/
1062svn_error_t *
1063svn_wc_parse_externals_description2(apr_array_header_t **externals_p,
1064                                    const char *parent_directory,
1065                                    const char *desc,
1066                                    apr_pool_t *pool)
1067{
1068  apr_array_header_t *list;
1069  apr_pool_t *subpool = svn_pool_create(pool);
1070  int i;
1071
1072  SVN_ERR(svn_wc_parse_externals_description3(externals_p ? &list : NULL,
1073                                              parent_directory, desc,
1074                                              TRUE, subpool));
1075
1076  if (externals_p)
1077    {
1078      *externals_p = apr_array_make(pool, list->nelts,
1079                                    sizeof(svn_wc_external_item_t *));
1080      for (i = 0; i < list->nelts; i++)
1081        {
1082          svn_wc_external_item2_t *item2 = APR_ARRAY_IDX(list, i,
1083                                             svn_wc_external_item2_t *);
1084          svn_wc_external_item_t *item = apr_palloc(pool, sizeof (*item));
1085
1086          if (item2->target_dir)
1087            item->target_dir = apr_pstrdup(pool, item2->target_dir);
1088          if (item2->url)
1089            item->url = apr_pstrdup(pool, item2->url);
1090          item->revision = item2->revision;
1091
1092          APR_ARRAY_PUSH(*externals_p, svn_wc_external_item_t *) = item;
1093        }
1094    }
1095
1096  svn_pool_destroy(subpool);
1097
1098  return SVN_NO_ERROR;
1099}
1100
1101
1102svn_error_t *
1103svn_wc_parse_externals_description(apr_hash_t **externals_p,
1104                                   const char *parent_directory,
1105                                   const char *desc,
1106                                   apr_pool_t *pool)
1107{
1108  apr_array_header_t *list;
1109  int i;
1110
1111  SVN_ERR(svn_wc_parse_externals_description2(externals_p ? &list : NULL,
1112                                              parent_directory, desc, pool));
1113
1114  /* Store all of the items into the hash if that was requested. */
1115  if (externals_p)
1116    {
1117      *externals_p = apr_hash_make(pool);
1118      for (i = 0; i < list->nelts; i++)
1119        {
1120          svn_wc_external_item_t *item;
1121          item = APR_ARRAY_IDX(list, i, svn_wc_external_item_t *);
1122
1123          apr_hash_set(*externals_p, item->target_dir,
1124                       APR_HASH_KEY_STRING, item);
1125        }
1126    }
1127  return SVN_NO_ERROR;
1128}
1129
1130svn_error_t *
1131svn_wc_prop_set2(const char *name,
1132                 const svn_string_t *value,
1133                 const char *path,
1134                 svn_wc_adm_access_t *adm_access,
1135                 svn_boolean_t skip_checks,
1136                 apr_pool_t *pool)
1137{
1138  return svn_wc_prop_set3(name, value, path, adm_access, skip_checks,
1139                          NULL, NULL, pool);
1140}
1141
1142svn_error_t *
1143svn_wc_prop_set(const char *name,
1144                const svn_string_t *value,
1145                const char *path,
1146                svn_wc_adm_access_t *adm_access,
1147                apr_pool_t *pool)
1148{
1149  return svn_wc_prop_set2(name, value, path, adm_access, FALSE, pool);
1150}
1151
1152/*** From status.c ***/
1153struct status_editor3_compat_baton
1154{
1155  svn_wc_status_func2_t old_func;
1156  void *old_baton;
1157};
1158
1159static svn_error_t *
1160status_editor3_compat_func(void *baton,
1161                           const char *path,
1162                           svn_wc_status2_t *status,
1163                           apr_pool_t *pool)
1164{
1165  struct status_editor3_compat_baton *secb = baton;
1166
1167  secb->old_func(secb->old_baton, path, status);
1168  return SVN_NO_ERROR;
1169}
1170
1171svn_error_t *
1172svn_wc_get_status_editor3(const svn_delta_editor_t **editor,
1173                          void **edit_baton,
1174                          void **set_locks_baton,
1175                          svn_revnum_t *edit_revision,
1176                          svn_wc_adm_access_t *anchor,
1177                          const char *target,
1178                          svn_depth_t depth,
1179                          svn_boolean_t get_all,
1180                          svn_boolean_t no_ignore,
1181                          apr_array_header_t *ignore_patterns,
1182                          svn_wc_status_func2_t status_func,
1183                          void *status_baton,
1184                          svn_cancel_func_t cancel_func,
1185                          void *cancel_baton,
1186                          svn_wc_traversal_info_t *traversal_info,
1187                          apr_pool_t *pool)
1188{
1189  struct status_editor3_compat_baton *secb = apr_palloc(pool, sizeof(*secb));
1190  secb->old_func = status_func;
1191  secb->old_baton = status_baton;
1192
1193  return svn_wc_get_status_editor4(editor, edit_baton, set_locks_baton,
1194                                   edit_revision, anchor, target, depth,
1195                                   get_all, no_ignore, ignore_patterns,
1196                                   status_editor3_compat_func, secb,
1197                                   cancel_func, cancel_baton, traversal_info,
1198                                   pool);
1199}
1200
1201svn_error_t *
1202svn_wc_get_status_editor2(const svn_delta_editor_t **editor,
1203                          void **edit_baton,
1204                          void **set_locks_baton,
1205                          svn_revnum_t *edit_revision,
1206                          svn_wc_adm_access_t *anchor,
1207                          const char *target,
1208                          apr_hash_t *config,
1209                          svn_boolean_t recurse,
1210                          svn_boolean_t get_all,
1211                          svn_boolean_t no_ignore,
1212                          svn_wc_status_func2_t status_func,
1213                          void *status_baton,
1214                          svn_cancel_func_t cancel_func,
1215                          void *cancel_baton,
1216                          svn_wc_traversal_info_t *traversal_info,
1217                          apr_pool_t *pool)
1218{
1219  apr_array_header_t *ignores;
1220  SVN_ERR(svn_wc_get_default_ignores(&ignores, config, pool));
1221  return svn_wc_get_status_editor3(editor,
1222                                   edit_baton,
1223                                   set_locks_baton,
1224                                   edit_revision,
1225                                   anchor,
1226                                   target,
1227                                   SVN_DEPTH_INFINITY_OR_IMMEDIATES(recurse),
1228                                   get_all,
1229                                   no_ignore,
1230                                   ignores,
1231                                   status_func,
1232                                   status_baton,
1233                                   cancel_func,
1234                                   cancel_baton,
1235                                   traversal_info,
1236                                   pool);
1237}
1238
1239
1240/* Helpers for deprecated svn_wc_status_editor(), of type
1241   svn_wc_status_func2_t. */
1242struct old_status_func_cb_baton
1243{
1244  svn_wc_status_func_t original_func;
1245  void *original_baton;
1246};
1247
1248static void old_status_func_cb(void *baton,
1249                               const char *path,
1250                               svn_wc_status2_t *status)
1251{
1252  struct old_status_func_cb_baton *b = baton;
1253  svn_wc_status_t *stat = (svn_wc_status_t *) status;
1254
1255  b->original_func(b->original_baton, path, stat);
1256}
1257
1258svn_error_t *
1259svn_wc_get_status_editor(const svn_delta_editor_t **editor,
1260                         void **edit_baton,
1261                         svn_revnum_t *edit_revision,
1262                         svn_wc_adm_access_t *anchor,
1263                         const char *target,
1264                         apr_hash_t *config,
1265                         svn_boolean_t recurse,
1266                         svn_boolean_t get_all,
1267                         svn_boolean_t no_ignore,
1268                         svn_wc_status_func_t status_func,
1269                         void *status_baton,
1270                         svn_cancel_func_t cancel_func,
1271                         void *cancel_baton,
1272                         svn_wc_traversal_info_t *traversal_info,
1273                         apr_pool_t *pool)
1274{
1275  struct old_status_func_cb_baton *b = apr_pcalloc(pool, sizeof(*b));
1276  apr_array_header_t *ignores;
1277  b->original_func = status_func;
1278  b->original_baton = status_baton;
1279  SVN_ERR(svn_wc_get_default_ignores(&ignores, config, pool));
1280  return svn_wc_get_status_editor3(editor, edit_baton, NULL, edit_revision,
1281                                   anchor, target,
1282                                   SVN_DEPTH_INFINITY_OR_IMMEDIATES(recurse),
1283                                   get_all, no_ignore, ignores,
1284                                   old_status_func_cb, b,
1285                                   cancel_func, cancel_baton,
1286                                   traversal_info, pool);
1287}
1288
1289/*** From update_editor.c ***/
1290svn_error_t *
1291svn_wc_add_repos_file2(const char *dst_path,
1292                       svn_wc_adm_access_t *adm_access,
1293                       const char *new_text_base_path,
1294                       const char *new_text_path,
1295                       apr_hash_t *new_base_props,
1296                       apr_hash_t *new_props,
1297                       const char *copyfrom_url,
1298                       svn_revnum_t copyfrom_rev,
1299                       apr_pool_t *pool)
1300{
1301  svn_stream_t *new_base_contents;
1302  svn_stream_t *new_contents = NULL;
1303
1304  SVN_ERR(svn_stream_open_readonly(&new_base_contents, new_text_base_path,
1305                                   pool, pool));
1306
1307  if (new_text_path)
1308    {
1309      /* NOTE: the specified path may *not* be under version control.
1310         It is most likely sitting in .svn/tmp/. Thus, we cannot use the
1311         typical WC functions to access "special", "keywords" or "EOL"
1312         information. We need to look at the properties given to us. */
1313
1314      /* If the new file is special, then we can simply open the given
1315         contents since it is already in normal form. */
1316      if (apr_hash_get(new_props,
1317                       SVN_PROP_SPECIAL, APR_HASH_KEY_STRING) != NULL)
1318        {
1319          SVN_ERR(svn_stream_open_readonly(&new_contents, new_text_path,
1320                                           pool, pool));
1321        }
1322      else
1323        {
1324          /* The new text contents need to be detrans'd into normal form. */
1325          svn_subst_eol_style_t eol_style;
1326          const char *eol_str;
1327          apr_hash_t *keywords = NULL;
1328          svn_string_t *list;
1329
1330          list = apr_hash_get(new_props,
1331                              SVN_PROP_KEYWORDS, APR_HASH_KEY_STRING);
1332          if (list != NULL)
1333            {
1334              /* Since we are detranslating, all of the keyword values
1335                 can be "". */
1336              SVN_ERR(svn_subst_build_keywords2(&keywords,
1337                                                list->data,
1338                                                "", "", 0, "",
1339                                                pool));
1340              if (apr_hash_count(keywords) == 0)
1341                keywords = NULL;
1342            }
1343
1344          svn_subst_eol_style_from_value(&eol_style, &eol_str,
1345                                         apr_hash_get(new_props,
1346                                                      SVN_PROP_EOL_STYLE,
1347                                                      APR_HASH_KEY_STRING));
1348
1349          if (svn_subst_translation_required(eol_style, eol_str, keywords,
1350                                             FALSE, FALSE))
1351            {
1352              SVN_ERR(svn_subst_stream_detranslated(&new_contents,
1353                                                    new_text_path,
1354                                                    eol_style, eol_str,
1355                                                    FALSE,
1356                                                    keywords,
1357                                                    FALSE,
1358                                                    pool));
1359            }
1360          else
1361            {
1362              SVN_ERR(svn_stream_open_readonly(&new_contents, new_text_path,
1363                                               pool, pool));
1364            }
1365        }
1366    }
1367
1368  SVN_ERR(svn_wc_add_repos_file3(dst_path, adm_access,
1369                                 new_base_contents, new_contents,
1370                                 new_base_props, new_props,
1371                                 copyfrom_url, copyfrom_rev,
1372                                 NULL, NULL, NULL, NULL,
1373                                 pool));
1374
1375  /* The API contract states that the text files will be removed upon
1376     successful completion. add_repos_file3() does not remove the files
1377     since it only has streams on them. Toss 'em now. */
1378  svn_error_clear(svn_io_remove_file(new_text_base_path, pool));
1379  if (new_text_path)
1380    svn_error_clear(svn_io_remove_file(new_text_path, pool));
1381
1382  return SVN_NO_ERROR;
1383}
1384
1385
1386svn_error_t *
1387svn_wc_add_repos_file(const char *dst_path,
1388                      svn_wc_adm_access_t *adm_access,
1389                      const char *new_text_path,
1390                      apr_hash_t *new_props,
1391                      const char *copyfrom_url,
1392                      svn_revnum_t copyfrom_rev,
1393                      apr_pool_t *pool)
1394{
1395  return svn_wc_add_repos_file2(dst_path, adm_access,
1396                                new_text_path, NULL,
1397                                new_props, NULL,
1398                                copyfrom_url, copyfrom_rev,
1399                                pool);
1400}
1401
1402/*** From lock.c ***/
1403
1404/* To preserve API compatibility with Subversion 1.0.0 */
1405svn_error_t *
1406svn_wc_adm_open(svn_wc_adm_access_t **adm_access,
1407                svn_wc_adm_access_t *associated,
1408                const char *path,
1409                svn_boolean_t write_lock,
1410                svn_boolean_t tree_lock,
1411                apr_pool_t *pool)
1412{
1413  return svn_wc_adm_open3(adm_access, associated, path, write_lock,
1414                          (tree_lock ? -1 : 0), NULL, NULL, pool);
1415}
1416
1417svn_error_t *
1418svn_wc_adm_open2(svn_wc_adm_access_t **adm_access,
1419                 svn_wc_adm_access_t *associated,
1420                 const char *path,
1421                 svn_boolean_t write_lock,
1422                 int levels_to_lock,
1423                 apr_pool_t *pool)
1424{
1425  return svn_wc_adm_open3(adm_access, associated, path, write_lock,
1426                          levels_to_lock, NULL, NULL, pool);
1427}
1428
1429svn_error_t *
1430svn_wc_adm_probe_open(svn_wc_adm_access_t **adm_access,
1431                      svn_wc_adm_access_t *associated,
1432                      const char *path,
1433                      svn_boolean_t write_lock,
1434                      svn_boolean_t tree_lock,
1435                      apr_pool_t *pool)
1436{
1437  return svn_wc_adm_probe_open3(adm_access, associated, path,
1438                                write_lock, (tree_lock ? -1 : 0),
1439                                NULL, NULL, pool);
1440}
1441
1442
1443svn_error_t *
1444svn_wc_adm_probe_open2(svn_wc_adm_access_t **adm_access,
1445                       svn_wc_adm_access_t *associated,
1446                       const char *path,
1447                       svn_boolean_t write_lock,
1448                       int levels_to_lock,
1449                       apr_pool_t *pool)
1450{
1451  return svn_wc_adm_probe_open3(adm_access, associated, path, write_lock,
1452                                levels_to_lock, NULL, NULL, pool);
1453}
1454
1455svn_error_t *
1456svn_wc_adm_probe_try(svn_wc_adm_access_t **adm_access,
1457                     svn_wc_adm_access_t *associated,
1458                     const char *path,
1459                     svn_boolean_t write_lock,
1460                     svn_boolean_t tree_lock,
1461                     apr_pool_t *pool)
1462{
1463  return svn_wc_adm_probe_try3(adm_access, associated, path, write_lock,
1464                               (tree_lock ? -1 : 0), NULL, NULL, pool);
1465}
1466
1467svn_error_t *
1468svn_wc_adm_close(svn_wc_adm_access_t *adm_access)
1469{
1470  /* This is the only pool we have access to. */
1471  apr_pool_t *scratch_pool = svn_wc_adm_access_pool(adm_access);
1472
1473  return svn_wc_adm_close2(adm_access, scratch_pool);
1474}
1475
1476
1477/*** From translate.c ***/
1478
1479svn_error_t *
1480svn_wc_translated_file(const char **xlated_p,
1481                       const char *vfile,
1482                       svn_wc_adm_access_t *adm_access,
1483                       svn_boolean_t force_repair,
1484                       apr_pool_t *pool)
1485{
1486  return svn_wc_translated_file2(xlated_p, vfile, vfile, adm_access,
1487                                 SVN_WC_TRANSLATE_TO_NF
1488                                 | (force_repair ?
1489                                    SVN_WC_TRANSLATE_FORCE_EOL_REPAIR : 0),
1490                                 pool);
1491}
Note: See TracBrowser for help on using the repository browser.