1251881Speter/*
2251881Speter * deprecated.c:  holding file for all deprecated APIs.
3251881Speter *                "we can't lose 'em, but we can shun 'em!"
4251881Speter *
5251881Speter * ====================================================================
6251881Speter *    Licensed to the Apache Software Foundation (ASF) under one
7251881Speter *    or more contributor license agreements.  See the NOTICE file
8251881Speter *    distributed with this work for additional information
9251881Speter *    regarding copyright ownership.  The ASF licenses this file
10251881Speter *    to you under the Apache License, Version 2.0 (the
11251881Speter *    "License"); you may not use this file except in compliance
12251881Speter *    with the License.  You may obtain a copy of the License at
13251881Speter *
14251881Speter *      http://www.apache.org/licenses/LICENSE-2.0
15251881Speter *
16251881Speter *    Unless required by applicable law or agreed to in writing,
17251881Speter *    software distributed under the License is distributed on an
18251881Speter *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19251881Speter *    KIND, either express or implied.  See the License for the
20251881Speter *    specific language governing permissions and limitations
21251881Speter *    under the License.
22251881Speter * ====================================================================
23251881Speter */
24251881Speter
25251881Speter/* ==================================================================== */
26251881Speter
27251881Speter
28251881Speter
29251881Speter/*** Includes. ***/
30251881Speter
31251881Speter/* We define this here to remove any further warnings about the usage of
32251881Speter   deprecated functions in this file. */
33251881Speter#define SVN_DEPRECATED
34251881Speter
35251881Speter#include "svn_diff.h"
36251881Speter#include "svn_utf.h"
37251881Speter
38251881Speter#include "svn_private_config.h"
39251881Speter
40251881Speter
41251881Speter
42251881Speter
43251881Speter/*** Code. ***/
44251881Speterstruct fns_wrapper_baton
45251881Speter{
46251881Speter  /* We put the old baton in front of this one, so that we can still use
47251881Speter     this baton in place of the old.  This prevents us from having to
48251881Speter     implement simple wrappers around each member of diff_fns_t. */
49251881Speter  void *old_baton;
50251881Speter  const svn_diff_fns_t *vtable;
51251881Speter};
52251881Speter
53251881Speterstatic svn_error_t *
54251881Speterdatasources_open(void *baton,
55251881Speter                 apr_off_t *prefix_lines,
56251881Speter                 apr_off_t *suffix_lines,
57251881Speter                 const svn_diff_datasource_e *datasources,
58251881Speter                 apr_size_t datasource_len)
59251881Speter{
60251881Speter  struct fns_wrapper_baton *fwb = baton;
61251881Speter  apr_size_t i;
62251881Speter
63251881Speter  /* Just iterate over the datasources, using the old singular version. */
64251881Speter  for (i = 0; i < datasource_len; i++)
65251881Speter    {
66251881Speter      SVN_ERR(fwb->vtable->datasource_open(fwb->old_baton, datasources[i]));
67251881Speter    }
68251881Speter
69251881Speter  /* Don't claim any prefix or suffix matches. */
70251881Speter  *prefix_lines = 0;
71251881Speter  *suffix_lines = 0;
72251881Speter
73251881Speter  return SVN_NO_ERROR;
74251881Speter}
75251881Speter
76251881Speterstatic svn_error_t *
77251881Speterdatasource_close(void *baton,
78251881Speter                 svn_diff_datasource_e datasource)
79251881Speter{
80251881Speter  struct fns_wrapper_baton *fwb = baton;
81251881Speter  return fwb->vtable->datasource_close(fwb->old_baton, datasource);
82251881Speter}
83251881Speter
84251881Speterstatic svn_error_t *
85251881Speterdatasource_get_next_token(apr_uint32_t *hash,
86251881Speter                          void **token,
87251881Speter                          void *baton,
88251881Speter                          svn_diff_datasource_e datasource)
89251881Speter{
90251881Speter  struct fns_wrapper_baton *fwb = baton;
91251881Speter  return fwb->vtable->datasource_get_next_token(hash, token, fwb->old_baton,
92251881Speter                                                datasource);
93251881Speter}
94251881Speter
95251881Speterstatic svn_error_t *
96251881Spetertoken_compare(void *baton,
97251881Speter              void *ltoken,
98251881Speter              void *rtoken,
99251881Speter              int *compare)
100251881Speter{
101251881Speter  struct fns_wrapper_baton *fwb = baton;
102251881Speter  return fwb->vtable->token_compare(fwb->old_baton, ltoken, rtoken, compare);
103251881Speter}
104251881Speter
105251881Speterstatic void
106251881Spetertoken_discard(void *baton,
107251881Speter              void *token)
108251881Speter{
109251881Speter  struct fns_wrapper_baton *fwb = baton;
110251881Speter  fwb->vtable->token_discard(fwb->old_baton, token);
111251881Speter}
112251881Speter
113251881Speterstatic void
114251881Spetertoken_discard_all(void *baton)
115251881Speter{
116251881Speter  struct fns_wrapper_baton *fwb = baton;
117251881Speter  fwb->vtable->token_discard_all(fwb->old_baton);
118251881Speter}
119251881Speter
120251881Speter
121251881Speterstatic void
122251881Speterwrap_diff_fns(svn_diff_fns2_t **diff_fns2,
123251881Speter              struct fns_wrapper_baton **baton2,
124251881Speter              const svn_diff_fns_t *diff_fns,
125251881Speter              void *baton,
126251881Speter              apr_pool_t *result_pool)
127251881Speter{
128251881Speter  /* Initialize the return vtable. */
129251881Speter  *diff_fns2 = apr_palloc(result_pool, sizeof(**diff_fns2));
130251881Speter
131251881Speter  (*diff_fns2)->datasources_open = datasources_open;
132251881Speter  (*diff_fns2)->datasource_close = datasource_close;
133251881Speter  (*diff_fns2)->datasource_get_next_token = datasource_get_next_token;
134251881Speter  (*diff_fns2)->token_compare = token_compare;
135251881Speter  (*diff_fns2)->token_discard = token_discard;
136251881Speter  (*diff_fns2)->token_discard_all = token_discard_all;
137251881Speter
138251881Speter  /* Initialize the wrapper baton. */
139251881Speter  *baton2 = apr_palloc(result_pool, sizeof (**baton2));
140251881Speter  (*baton2)->old_baton = baton;
141251881Speter  (*baton2)->vtable = diff_fns;
142251881Speter}
143251881Speter
144251881Speter
145251881Speter/*** From diff_file.c ***/
146289180Speter
147251881Spetersvn_error_t *
148289180Spetersvn_diff_file_output_unified3(svn_stream_t *output_stream,
149289180Speter                              svn_diff_t *diff,
150289180Speter                              const char *original_path,
151289180Speter                              const char *modified_path,
152289180Speter                              const char *original_header,
153289180Speter                              const char *modified_header,
154289180Speter                              const char *header_encoding,
155289180Speter                              const char *relative_to_dir,
156289180Speter                              svn_boolean_t show_c_function,
157289180Speter                              apr_pool_t *pool)
158289180Speter{
159289180Speter  return svn_error_trace(
160289180Speter              svn_diff_file_output_unified4(output_stream,
161289180Speter                                            diff,
162289180Speter                                            original_path,
163289180Speter                                            modified_path,
164289180Speter                                            original_header,
165289180Speter                                            modified_header,
166289180Speter                                            header_encoding,
167289180Speter                                            relative_to_dir,
168289180Speter                                            show_c_function,
169289180Speter                                            -1 /* context_size */,
170289180Speter                                            NULL, NULL, /* cancel */
171289180Speter                                            pool));
172289180Speter}
173289180Speter
174289180Spetersvn_error_t *
175251881Spetersvn_diff_file_output_unified2(svn_stream_t *output_stream,
176251881Speter                              svn_diff_t *diff,
177251881Speter                              const char *original_path,
178251881Speter                              const char *modified_path,
179251881Speter                              const char *original_header,
180251881Speter                              const char *modified_header,
181251881Speter                              const char *header_encoding,
182251881Speter                              apr_pool_t *pool)
183251881Speter{
184251881Speter  return svn_diff_file_output_unified3(output_stream, diff,
185251881Speter                                       original_path, modified_path,
186251881Speter                                       original_header, modified_header,
187251881Speter                                       header_encoding, NULL, FALSE, pool);
188251881Speter}
189251881Speter
190251881Spetersvn_error_t *
191251881Spetersvn_diff_file_output_unified(svn_stream_t *output_stream,
192251881Speter                             svn_diff_t *diff,
193251881Speter                             const char *original_path,
194251881Speter                             const char *modified_path,
195251881Speter                             const char *original_header,
196251881Speter                             const char *modified_header,
197251881Speter                             apr_pool_t *pool)
198251881Speter{
199251881Speter  return svn_diff_file_output_unified2(output_stream, diff,
200251881Speter                                       original_path, modified_path,
201251881Speter                                       original_header, modified_header,
202251881Speter                                       SVN_APR_LOCALE_CHARSET, pool);
203251881Speter}
204251881Speter
205251881Spetersvn_error_t *
206251881Spetersvn_diff_file_diff(svn_diff_t **diff,
207251881Speter                   const char *original,
208251881Speter                   const char *modified,
209251881Speter                   apr_pool_t *pool)
210251881Speter{
211251881Speter  return svn_diff_file_diff_2(diff, original, modified,
212251881Speter                              svn_diff_file_options_create(pool), pool);
213251881Speter}
214251881Speter
215251881Spetersvn_error_t *
216251881Spetersvn_diff_file_diff3(svn_diff_t **diff,
217251881Speter                    const char *original,
218251881Speter                    const char *modified,
219251881Speter                    const char *latest,
220251881Speter                    apr_pool_t *pool)
221251881Speter{
222251881Speter  return svn_diff_file_diff3_2(diff, original, modified, latest,
223251881Speter                               svn_diff_file_options_create(pool), pool);
224251881Speter}
225251881Speter
226251881Spetersvn_error_t *
227251881Spetersvn_diff_file_diff4(svn_diff_t **diff,
228251881Speter                    const char *original,
229251881Speter                    const char *modified,
230251881Speter                    const char *latest,
231251881Speter                    const char *ancestor,
232251881Speter                    apr_pool_t *pool)
233251881Speter{
234251881Speter  return svn_diff_file_diff4_2(diff, original, modified, latest, ancestor,
235251881Speter                               svn_diff_file_options_create(pool), pool);
236251881Speter}
237251881Speter
238251881Spetersvn_error_t *
239251881Spetersvn_diff_file_output_merge(svn_stream_t *output_stream,
240251881Speter                           svn_diff_t *diff,
241251881Speter                           const char *original_path,
242251881Speter                           const char *modified_path,
243251881Speter                           const char *latest_path,
244251881Speter                           const char *conflict_original,
245251881Speter                           const char *conflict_modified,
246251881Speter                           const char *conflict_latest,
247251881Speter                           const char *conflict_separator,
248251881Speter                           svn_boolean_t display_original_in_conflict,
249251881Speter                           svn_boolean_t display_resolved_conflicts,
250251881Speter                           apr_pool_t *pool)
251251881Speter{
252251881Speter  svn_diff_conflict_display_style_t style =
253251881Speter    svn_diff_conflict_display_modified_latest;
254251881Speter
255251881Speter  if (display_resolved_conflicts)
256251881Speter    style = svn_diff_conflict_display_resolved_modified_latest;
257251881Speter
258251881Speter  if (display_original_in_conflict)
259251881Speter    style = svn_diff_conflict_display_modified_original_latest;
260251881Speter
261251881Speter  return svn_diff_file_output_merge2(output_stream,
262251881Speter                                     diff,
263251881Speter                                     original_path,
264251881Speter                                     modified_path,
265251881Speter                                     latest_path,
266251881Speter                                     conflict_original,
267251881Speter                                     conflict_modified,
268251881Speter                                     conflict_latest,
269251881Speter                                     conflict_separator,
270251881Speter                                     style,
271251881Speter                                     pool);
272251881Speter}
273251881Speter
274289180Spetersvn_error_t *
275289180Spetersvn_diff_file_output_merge2(svn_stream_t *output_stream,
276289180Speter                            svn_diff_t *diff,
277289180Speter                            const char *original_path,
278289180Speter                            const char *modified_path,
279289180Speter                            const char *latest_path,
280289180Speter                            const char *conflict_original,
281289180Speter                            const char *conflict_modified,
282289180Speter                            const char *conflict_latest,
283289180Speter                            const char *conflict_separator,
284289180Speter                            svn_diff_conflict_display_style_t conflict_style,
285289180Speter                            apr_pool_t *pool)
286289180Speter{
287289180Speter  return svn_error_trace(svn_diff_file_output_merge3(output_stream,
288289180Speter                                                     diff, original_path,
289289180Speter                                                     modified_path,
290289180Speter                                                     latest_path,
291289180Speter                                                     conflict_original,
292289180Speter                                                     conflict_modified,
293289180Speter                                                     conflict_latest,
294289180Speter                                                     conflict_separator,
295289180Speter                                                     conflict_style,
296289180Speter                                                     NULL, NULL, /* cancel */
297289180Speter                                                     pool));
298289180Speter}
299251881Speter
300251881Speter/*** From diff.c ***/
301251881Spetersvn_error_t *
302251881Spetersvn_diff_diff(svn_diff_t **diff,
303251881Speter              void *diff_baton,
304251881Speter              const svn_diff_fns_t *vtable,
305251881Speter              apr_pool_t *pool)
306251881Speter{
307251881Speter  svn_diff_fns2_t *diff_fns2;
308251881Speter  struct fns_wrapper_baton *fwb;
309251881Speter
310251881Speter  wrap_diff_fns(&diff_fns2, &fwb, vtable, diff_baton, pool);
311251881Speter  return svn_diff_diff_2(diff, fwb, diff_fns2, pool);
312251881Speter}
313251881Speter
314251881Speter
315251881Speter/*** From diff3.c ***/
316251881Spetersvn_error_t *
317251881Spetersvn_diff_diff3(svn_diff_t **diff,
318251881Speter               void *diff_baton,
319251881Speter               const svn_diff_fns_t *vtable,
320251881Speter               apr_pool_t *pool)
321251881Speter{
322251881Speter  svn_diff_fns2_t *diff_fns2;
323251881Speter  struct fns_wrapper_baton *fwb;
324251881Speter
325251881Speter  wrap_diff_fns(&diff_fns2, &fwb, vtable, diff_baton, pool);
326251881Speter  return svn_diff_diff3_2(diff, fwb, diff_fns2, pool);
327251881Speter}
328251881Speter
329251881Speter
330251881Speter/*** From diff4.c ***/
331251881Spetersvn_error_t *
332251881Spetersvn_diff_diff4(svn_diff_t **diff,
333251881Speter               void *diff_baton,
334251881Speter               const svn_diff_fns_t *vtable,
335251881Speter               apr_pool_t *pool)
336251881Speter{
337251881Speter  svn_diff_fns2_t *diff_fns2;
338251881Speter  struct fns_wrapper_baton *fwb;
339251881Speter
340251881Speter  wrap_diff_fns(&diff_fns2, &fwb, vtable, diff_baton, pool);
341251881Speter  return svn_diff_diff4_2(diff, fwb, diff_fns2, pool);
342251881Speter}
343289180Speter
344289180Speter/*** From util.c ***/
345289180Spetersvn_error_t *
346289180Spetersvn_diff_output(svn_diff_t *diff,
347289180Speter                void *output_baton,
348289180Speter                const svn_diff_output_fns_t *output_fns)
349289180Speter{
350289180Speter  return svn_error_trace(svn_diff_output2(diff, output_baton, output_fns,
351289180Speter                                          NULL, NULL /* cancel */));
352289180Speter}
353289180Speter
354289180Speter/*** From diff_memory.c ***/
355289180Spetersvn_error_t *
356289180Spetersvn_diff_mem_string_output_merge(svn_stream_t *output_stream,
357289180Speter                                 svn_diff_t *diff,
358289180Speter                                 const svn_string_t *original,
359289180Speter                                 const svn_string_t *modified,
360289180Speter                                 const svn_string_t *latest,
361289180Speter                                 const char *conflict_original,
362289180Speter                                 const char *conflict_modified,
363289180Speter                                 const char *conflict_latest,
364289180Speter                                 const char *conflict_separator,
365289180Speter                                 svn_boolean_t display_original_in_conflict,
366289180Speter                                 svn_boolean_t display_resolved_conflicts,
367289180Speter                                 apr_pool_t *pool)
368289180Speter{
369289180Speter  svn_diff_conflict_display_style_t style =
370289180Speter    svn_diff_conflict_display_modified_latest;
371289180Speter
372289180Speter  if (display_resolved_conflicts)
373289180Speter    style = svn_diff_conflict_display_resolved_modified_latest;
374289180Speter
375289180Speter  if (display_original_in_conflict)
376289180Speter    style = svn_diff_conflict_display_modified_original_latest;
377289180Speter
378289180Speter  return svn_diff_mem_string_output_merge2(output_stream,
379289180Speter                                           diff,
380289180Speter                                           original,
381289180Speter                                           modified,
382289180Speter                                           latest,
383289180Speter                                           conflict_original,
384289180Speter                                           conflict_modified,
385289180Speter                                           conflict_latest,
386289180Speter                                           conflict_separator,
387289180Speter                                           style,
388289180Speter                                           pool);
389289180Speter}
390289180Speter
391289180Spetersvn_error_t *
392289180Spetersvn_diff_mem_string_output_merge2(svn_stream_t *output_stream,
393289180Speter                                  svn_diff_t *diff,
394289180Speter                                  const svn_string_t *original,
395289180Speter                                  const svn_string_t *modified,
396289180Speter                                  const svn_string_t *latest,
397289180Speter                                  const char *conflict_original,
398289180Speter                                  const char *conflict_modified,
399289180Speter                                  const char *conflict_latest,
400289180Speter                                  const char *conflict_separator,
401289180Speter                                  svn_diff_conflict_display_style_t style,
402289180Speter                                  apr_pool_t *pool)
403289180Speter{
404289180Speter  return svn_error_trace(svn_diff_mem_string_output_merge3(output_stream, diff,
405289180Speter                                                           original,
406289180Speter                                                           modified, latest,
407289180Speter                                                           conflict_original,
408289180Speter                                                           conflict_modified,
409289180Speter                                                           conflict_latest,
410289180Speter                                                           conflict_separator,
411289180Speter                                                           style,
412289180Speter                                                           /* no cancelation */
413289180Speter                                                           NULL, NULL,
414289180Speter                                                           pool));
415289180Speter}
416289180Speter
417289180Spetersvn_error_t *
418289180Spetersvn_diff_mem_string_output_unified(svn_stream_t *output_stream,
419289180Speter                                   svn_diff_t *diff,
420289180Speter                                   const char *original_header,
421289180Speter                                   const char *modified_header,
422289180Speter                                   const char *header_encoding,
423289180Speter                                   const svn_string_t *original,
424289180Speter                                   const svn_string_t *modified,
425289180Speter                                   apr_pool_t *pool)
426289180Speter{
427289180Speter  return svn_error_trace(svn_diff_mem_string_output_unified2(output_stream,
428289180Speter                                                             diff,
429289180Speter                                                             TRUE,
430289180Speter                                                             NULL,
431289180Speter                                                             original_header,
432289180Speter                                                             modified_header,
433289180Speter                                                             header_encoding,
434289180Speter                                                             original,
435289180Speter                                                             modified,
436289180Speter                                                             pool));
437289180Speter}
438289180Speter
439289180Spetersvn_error_t *
440289180Spetersvn_diff_mem_string_output_unified2(svn_stream_t *output_stream,
441289180Speter                                    svn_diff_t *diff,
442289180Speter                                    svn_boolean_t with_diff_header,
443289180Speter                                    const char *hunk_delimiter,
444289180Speter                                    const char *original_header,
445289180Speter                                    const char *modified_header,
446289180Speter                                    const char *header_encoding,
447289180Speter                                    const svn_string_t *original,
448289180Speter                                    const svn_string_t *modified,
449289180Speter                                    apr_pool_t *pool)
450289180Speter{
451289180Speter  return svn_error_trace(svn_diff_mem_string_output_unified3(output_stream,
452289180Speter                                                             diff,
453289180Speter                                                             with_diff_header,
454289180Speter                                                             hunk_delimiter,
455289180Speter                                                             original_header,
456289180Speter                                                             modified_header,
457289180Speter                                                             header_encoding,
458289180Speter                                                             original,
459289180Speter                                                             modified,
460289180Speter                                                             -1 /* context */,
461289180Speter                                                             /* cancel */
462289180Speter                                                             NULL, NULL,
463289180Speter                                                             pool));
464289180Speter}
465