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#include <assert.h> 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_hash.h" 36251881Speter#include "svn_subst.h" 37251881Speter#include "svn_path.h" 38251881Speter#include "svn_opt.h" 39251881Speter#include "svn_cmdline.h" 40251881Speter#include "svn_version.h" 41251881Speter#include "svn_pools.h" 42251881Speter#include "svn_dso.h" 43251881Speter#include "svn_mergeinfo.h" 44251881Speter#include "svn_utf.h" 45251881Speter#include "svn_xml.h" 46251881Speter 47251881Speter#include "opt.h" 48251881Speter#include "private/svn_opt_private.h" 49251881Speter#include "private/svn_mergeinfo_private.h" 50262253Speter#include "private/svn_subr_private.h" 51251881Speter 52251881Speter#include "svn_private_config.h" 53251881Speter 54251881Speter 55251881Speter 56251881Speter 57251881Speter/*** Code. ***/ 58251881Speter 59251881Speter/*** From subst.c ***/ 60251881Speter/* Convert an old-style svn_subst_keywords_t struct * into a new-style 61251881Speter * keywords hash. Keyword values are shallow copies, so the produced 62251881Speter * hash must not be assumed to have lifetime longer than the struct it 63251881Speter * is based on. A NULL input causes a NULL output. */ 64251881Speterstatic apr_hash_t * 65251881Speterkwstruct_to_kwhash(const svn_subst_keywords_t *kwstruct, 66251881Speter apr_pool_t *pool) 67251881Speter{ 68251881Speter apr_hash_t *kwhash; 69251881Speter 70251881Speter if (kwstruct == NULL) 71251881Speter return NULL; 72251881Speter 73251881Speter kwhash = apr_hash_make(pool); 74251881Speter 75251881Speter if (kwstruct->revision) 76251881Speter { 77251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_LONG, kwstruct->revision); 78251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_MEDIUM, kwstruct->revision); 79251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_SHORT, kwstruct->revision); 80251881Speter } 81251881Speter if (kwstruct->date) 82251881Speter { 83251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_DATE_LONG, kwstruct->date); 84251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_DATE_SHORT, kwstruct->date); 85251881Speter } 86251881Speter if (kwstruct->author) 87251881Speter { 88251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_AUTHOR_LONG, kwstruct->author); 89251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_AUTHOR_SHORT, kwstruct->author); 90251881Speter } 91251881Speter if (kwstruct->url) 92251881Speter { 93251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_URL_LONG, kwstruct->url); 94251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_URL_SHORT, kwstruct->url); 95251881Speter } 96251881Speter if (kwstruct->id) 97251881Speter { 98251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_ID, kwstruct->id); 99251881Speter } 100251881Speter 101251881Speter return kwhash; 102251881Speter} 103251881Speter 104251881Speter 105251881Spetersvn_error_t * 106251881Spetersvn_subst_translate_stream3(svn_stream_t *src_stream, 107251881Speter svn_stream_t *dst_stream, 108251881Speter const char *eol_str, 109251881Speter svn_boolean_t repair, 110251881Speter apr_hash_t *keywords, 111251881Speter svn_boolean_t expand, 112251881Speter apr_pool_t *pool) 113251881Speter{ 114251881Speter /* The docstring requires that *some* translation be requested. */ 115251881Speter SVN_ERR_ASSERT(eol_str || keywords); 116251881Speter 117251881Speter /* We don't want the copy3 to close the provided streams. */ 118251881Speter src_stream = svn_stream_disown(src_stream, pool); 119251881Speter dst_stream = svn_stream_disown(dst_stream, pool); 120251881Speter 121251881Speter /* Wrap the destination stream with our translation stream. It is more 122251881Speter efficient than wrapping the source stream. */ 123251881Speter dst_stream = svn_subst_stream_translated(dst_stream, eol_str, repair, 124251881Speter keywords, expand, pool); 125251881Speter 126251881Speter return svn_error_trace(svn_stream_copy3(src_stream, dst_stream, 127251881Speter NULL, NULL, pool)); 128251881Speter} 129251881Speter 130251881Spetersvn_error_t * 131251881Spetersvn_subst_translate_stream2(svn_stream_t *s, /* src stream */ 132251881Speter svn_stream_t *d, /* dst stream */ 133251881Speter const char *eol_str, 134251881Speter svn_boolean_t repair, 135251881Speter const svn_subst_keywords_t *keywords, 136251881Speter svn_boolean_t expand, 137251881Speter apr_pool_t *pool) 138251881Speter{ 139251881Speter apr_hash_t *kh = kwstruct_to_kwhash(keywords, pool); 140251881Speter 141251881Speter return svn_error_trace(svn_subst_translate_stream3(s, d, eol_str, repair, 142251881Speter kh, expand, pool)); 143251881Speter} 144251881Speter 145251881Spetersvn_error_t * 146251881Spetersvn_subst_translate_stream(svn_stream_t *s, /* src stream */ 147251881Speter svn_stream_t *d, /* dst stream */ 148251881Speter const char *eol_str, 149251881Speter svn_boolean_t repair, 150251881Speter const svn_subst_keywords_t *keywords, 151251881Speter svn_boolean_t expand) 152251881Speter{ 153251881Speter apr_pool_t *pool = svn_pool_create(NULL); 154251881Speter svn_error_t *err = svn_subst_translate_stream2(s, d, eol_str, repair, 155251881Speter keywords, expand, pool); 156251881Speter svn_pool_destroy(pool); 157251881Speter return svn_error_trace(err); 158251881Speter} 159251881Speter 160251881Spetersvn_error_t * 161251881Spetersvn_subst_translate_cstring(const char *src, 162251881Speter const char **dst, 163251881Speter const char *eol_str, 164251881Speter svn_boolean_t repair, 165251881Speter const svn_subst_keywords_t *keywords, 166251881Speter svn_boolean_t expand, 167251881Speter apr_pool_t *pool) 168251881Speter{ 169251881Speter apr_hash_t *kh = kwstruct_to_kwhash(keywords, pool); 170251881Speter 171251881Speter return svn_error_trace(svn_subst_translate_cstring2(src, dst, eol_str, 172251881Speter repair, kh, expand, 173251881Speter pool)); 174251881Speter} 175251881Speter 176251881Spetersvn_error_t * 177251881Spetersvn_subst_copy_and_translate(const char *src, 178251881Speter const char *dst, 179251881Speter const char *eol_str, 180251881Speter svn_boolean_t repair, 181251881Speter const svn_subst_keywords_t *keywords, 182251881Speter svn_boolean_t expand, 183251881Speter apr_pool_t *pool) 184251881Speter{ 185251881Speter return svn_error_trace(svn_subst_copy_and_translate2(src, dst, eol_str, 186251881Speter repair, keywords, 187251881Speter expand, FALSE, pool)); 188251881Speter} 189251881Speter 190251881Spetersvn_error_t * 191251881Spetersvn_subst_copy_and_translate2(const char *src, 192251881Speter const char *dst, 193251881Speter const char *eol_str, 194251881Speter svn_boolean_t repair, 195251881Speter const svn_subst_keywords_t *keywords, 196251881Speter svn_boolean_t expand, 197251881Speter svn_boolean_t special, 198251881Speter apr_pool_t *pool) 199251881Speter{ 200251881Speter apr_hash_t *kh = kwstruct_to_kwhash(keywords, pool); 201251881Speter 202251881Speter return svn_error_trace(svn_subst_copy_and_translate3(src, dst, eol_str, 203251881Speter repair, kh, expand, 204251881Speter special, pool)); 205251881Speter} 206251881Speter 207251881Spetersvn_error_t * 208251881Spetersvn_subst_copy_and_translate3(const char *src, 209251881Speter const char *dst, 210251881Speter const char *eol_str, 211251881Speter svn_boolean_t repair, 212251881Speter apr_hash_t *keywords, 213251881Speter svn_boolean_t expand, 214251881Speter svn_boolean_t special, 215251881Speter apr_pool_t *pool) 216251881Speter{ 217251881Speter return svn_error_trace(svn_subst_copy_and_translate4(src, dst, eol_str, 218251881Speter repair, keywords, 219251881Speter expand, special, 220251881Speter NULL, NULL, 221251881Speter pool)); 222251881Speter} 223251881Speter 224251881Speter 225251881Spetersvn_error_t * 226251881Spetersvn_subst_stream_translated_to_normal_form(svn_stream_t **stream, 227251881Speter svn_stream_t *source, 228251881Speter svn_subst_eol_style_t eol_style, 229251881Speter const char *eol_str, 230251881Speter svn_boolean_t always_repair_eols, 231251881Speter apr_hash_t *keywords, 232251881Speter apr_pool_t *pool) 233251881Speter{ 234251881Speter if (eol_style == svn_subst_eol_style_native) 235251881Speter eol_str = SVN_SUBST_NATIVE_EOL_STR; 236251881Speter else if (! (eol_style == svn_subst_eol_style_fixed 237251881Speter || eol_style == svn_subst_eol_style_none)) 238251881Speter return svn_error_create(SVN_ERR_IO_UNKNOWN_EOL, NULL, NULL); 239251881Speter 240251881Speter *stream = svn_subst_stream_translated(source, eol_str, 241251881Speter eol_style == svn_subst_eol_style_fixed 242251881Speter || always_repair_eols, 243251881Speter keywords, FALSE, pool); 244251881Speter 245251881Speter return SVN_NO_ERROR; 246251881Speter} 247251881Speter 248251881Spetersvn_error_t * 249251881Spetersvn_subst_translate_string(svn_string_t **new_value, 250251881Speter const svn_string_t *value, 251251881Speter const char *encoding, 252251881Speter apr_pool_t *pool) 253251881Speter{ 254251881Speter return svn_subst_translate_string2(new_value, NULL, NULL, value, 255251881Speter encoding, FALSE, pool, pool); 256251881Speter} 257251881Speter 258251881Spetersvn_error_t * 259251881Spetersvn_subst_stream_detranslated(svn_stream_t **stream_p, 260251881Speter const char *src, 261251881Speter svn_subst_eol_style_t eol_style, 262251881Speter const char *eol_str, 263251881Speter svn_boolean_t always_repair_eols, 264251881Speter apr_hash_t *keywords, 265251881Speter svn_boolean_t special, 266251881Speter apr_pool_t *pool) 267251881Speter{ 268251881Speter svn_stream_t *src_stream; 269251881Speter 270251881Speter if (special) 271251881Speter return svn_subst_read_specialfile(stream_p, src, pool, pool); 272251881Speter 273251881Speter /* This will be closed by svn_subst_stream_translated_to_normal_form 274251881Speter when the returned stream is closed. */ 275251881Speter SVN_ERR(svn_stream_open_readonly(&src_stream, src, pool, pool)); 276251881Speter 277251881Speter return svn_error_trace(svn_subst_stream_translated_to_normal_form( 278251881Speter stream_p, src_stream, 279251881Speter eol_style, eol_str, 280251881Speter always_repair_eols, 281251881Speter keywords, pool)); 282251881Speter} 283251881Speter 284251881Spetersvn_error_t * 285251881Spetersvn_subst_translate_to_normal_form(const char *src, 286251881Speter const char *dst, 287251881Speter svn_subst_eol_style_t eol_style, 288251881Speter const char *eol_str, 289251881Speter svn_boolean_t always_repair_eols, 290251881Speter apr_hash_t *keywords, 291251881Speter svn_boolean_t special, 292251881Speter apr_pool_t *pool) 293251881Speter{ 294251881Speter 295251881Speter if (eol_style == svn_subst_eol_style_native) 296251881Speter eol_str = SVN_SUBST_NATIVE_EOL_STR; 297251881Speter else if (! (eol_style == svn_subst_eol_style_fixed 298251881Speter || eol_style == svn_subst_eol_style_none)) 299251881Speter return svn_error_create(SVN_ERR_IO_UNKNOWN_EOL, NULL, NULL); 300251881Speter 301251881Speter return svn_error_trace(svn_subst_copy_and_translate3( 302251881Speter src, dst, eol_str, 303251881Speter eol_style == svn_subst_eol_style_fixed 304251881Speter || always_repair_eols, 305251881Speter keywords, 306251881Speter FALSE /* contract keywords */, 307251881Speter special, 308251881Speter pool)); 309251881Speter} 310251881Speter 311251881Speter 312251881Speter/*** From opt.c ***/ 313251881Speter/* Same as print_command_info2(), but with deprecated struct revision. */ 314251881Speterstatic svn_error_t * 315251881Speterprint_command_info(const svn_opt_subcommand_desc_t *cmd, 316251881Speter const apr_getopt_option_t *options_table, 317251881Speter svn_boolean_t help, 318251881Speter apr_pool_t *pool, 319251881Speter FILE *stream) 320251881Speter{ 321251881Speter svn_boolean_t first_time; 322251881Speter apr_size_t i; 323251881Speter 324251881Speter /* Print the canonical command name. */ 325251881Speter SVN_ERR(svn_cmdline_fputs(cmd->name, stream, pool)); 326251881Speter 327251881Speter /* Print the list of aliases. */ 328251881Speter first_time = TRUE; 329251881Speter for (i = 0; i < SVN_OPT_MAX_ALIASES; i++) 330251881Speter { 331251881Speter if (cmd->aliases[i] == NULL) 332251881Speter break; 333251881Speter 334251881Speter if (first_time) { 335251881Speter SVN_ERR(svn_cmdline_fputs(" (", stream, pool)); 336251881Speter first_time = FALSE; 337251881Speter } 338251881Speter else 339251881Speter SVN_ERR(svn_cmdline_fputs(", ", stream, pool)); 340251881Speter 341251881Speter SVN_ERR(svn_cmdline_fputs(cmd->aliases[i], stream, pool)); 342251881Speter } 343251881Speter 344251881Speter if (! first_time) 345251881Speter SVN_ERR(svn_cmdline_fputs(")", stream, pool)); 346251881Speter 347251881Speter if (help) 348251881Speter { 349251881Speter const apr_getopt_option_t *option; 350251881Speter svn_boolean_t have_options = FALSE; 351251881Speter 352251881Speter SVN_ERR(svn_cmdline_fprintf(stream, pool, ": %s", _(cmd->help))); 353251881Speter 354251881Speter /* Loop over all valid option codes attached to the subcommand */ 355251881Speter for (i = 0; i < SVN_OPT_MAX_OPTIONS; i++) 356251881Speter { 357251881Speter if (cmd->valid_options[i]) 358251881Speter { 359251881Speter if (!have_options) 360251881Speter { 361251881Speter SVN_ERR(svn_cmdline_fputs(_("\nValid options:\n"), 362251881Speter stream, pool)); 363251881Speter have_options = TRUE; 364251881Speter } 365251881Speter 366251881Speter /* convert each option code into an option */ 367251881Speter option = 368251881Speter svn_opt_get_option_from_code2(cmd->valid_options[i], 369251881Speter options_table, NULL, pool); 370251881Speter 371251881Speter /* print the option's docstring */ 372251881Speter if (option && option->description) 373251881Speter { 374251881Speter const char *optstr; 375251881Speter svn_opt_format_option(&optstr, option, TRUE, pool); 376251881Speter SVN_ERR(svn_cmdline_fprintf(stream, pool, " %s\n", 377251881Speter optstr)); 378251881Speter } 379251881Speter } 380251881Speter } 381251881Speter 382251881Speter if (have_options) 383251881Speter SVN_ERR(svn_cmdline_fprintf(stream, pool, "\n")); 384251881Speter } 385251881Speter 386251881Speter return SVN_NO_ERROR; 387251881Speter} 388251881Speter 389251881Speterconst svn_opt_subcommand_desc_t * 390251881Spetersvn_opt_get_canonical_subcommand(const svn_opt_subcommand_desc_t *table, 391251881Speter const char *cmd_name) 392251881Speter{ 393251881Speter int i = 0; 394251881Speter 395251881Speter if (cmd_name == NULL) 396251881Speter return NULL; 397251881Speter 398251881Speter while (table[i].name) { 399251881Speter int j; 400251881Speter if (strcmp(cmd_name, table[i].name) == 0) 401251881Speter return table + i; 402251881Speter for (j = 0; (j < SVN_OPT_MAX_ALIASES) && table[i].aliases[j]; j++) 403251881Speter if (strcmp(cmd_name, table[i].aliases[j]) == 0) 404251881Speter return table + i; 405251881Speter 406251881Speter i++; 407251881Speter } 408251881Speter 409251881Speter /* If we get here, there was no matching subcommand name or alias. */ 410251881Speter return NULL; 411251881Speter} 412251881Speter 413251881Spetervoid 414251881Spetersvn_opt_subcommand_help2(const char *subcommand, 415251881Speter const svn_opt_subcommand_desc2_t *table, 416251881Speter const apr_getopt_option_t *options_table, 417251881Speter apr_pool_t *pool) 418251881Speter{ 419251881Speter svn_opt_subcommand_help3(subcommand, table, options_table, 420251881Speter NULL, pool); 421251881Speter} 422251881Speter 423251881Spetervoid 424251881Spetersvn_opt_subcommand_help(const char *subcommand, 425251881Speter const svn_opt_subcommand_desc_t *table, 426251881Speter const apr_getopt_option_t *options_table, 427251881Speter apr_pool_t *pool) 428251881Speter{ 429251881Speter const svn_opt_subcommand_desc_t *cmd = 430251881Speter svn_opt_get_canonical_subcommand(table, subcommand); 431251881Speter svn_error_t *err; 432251881Speter 433251881Speter if (cmd) 434251881Speter err = print_command_info(cmd, options_table, TRUE, pool, stdout); 435251881Speter else 436251881Speter err = svn_cmdline_fprintf(stderr, pool, 437251881Speter _("\"%s\": unknown command.\n\n"), subcommand); 438251881Speter 439251881Speter if (err) { 440251881Speter svn_handle_error2(err, stderr, FALSE, "svn: "); 441251881Speter svn_error_clear(err); 442251881Speter } 443251881Speter} 444251881Speter 445251881Spetersvn_error_t * 446251881Spetersvn_opt_args_to_target_array3(apr_array_header_t **targets_p, 447251881Speter apr_getopt_t *os, 448251881Speter const apr_array_header_t *known_targets, 449251881Speter apr_pool_t *pool) 450251881Speter{ 451251881Speter return svn_error_trace(svn_opt__args_to_target_array(targets_p, os, 452251881Speter known_targets, pool)); 453251881Speter} 454251881Speter 455251881Spetersvn_error_t * 456251881Spetersvn_opt_args_to_target_array2(apr_array_header_t **targets_p, 457251881Speter apr_getopt_t *os, 458251881Speter const apr_array_header_t *known_targets, 459251881Speter apr_pool_t *pool) 460251881Speter{ 461251881Speter svn_error_t *err = svn_opt_args_to_target_array3(targets_p, os, 462251881Speter known_targets, pool); 463251881Speter 464251881Speter if (err && err->apr_err == SVN_ERR_RESERVED_FILENAME_SPECIFIED) 465251881Speter { 466251881Speter svn_error_clear(err); 467251881Speter return SVN_NO_ERROR; 468251881Speter } 469251881Speter 470251881Speter return err; 471251881Speter} 472251881Speter 473251881Spetersvn_error_t * 474251881Spetersvn_opt_args_to_target_array(apr_array_header_t **targets_p, 475251881Speter apr_getopt_t *os, 476251881Speter const apr_array_header_t *known_targets, 477251881Speter svn_opt_revision_t *start_revision, 478251881Speter svn_opt_revision_t *end_revision, 479251881Speter svn_boolean_t extract_revisions, 480251881Speter apr_pool_t *pool) 481251881Speter{ 482251881Speter apr_array_header_t *output_targets; 483251881Speter 484251881Speter SVN_ERR(svn_opt_args_to_target_array2(&output_targets, os, 485251881Speter known_targets, pool)); 486251881Speter 487251881Speter if (extract_revisions) 488251881Speter { 489251881Speter svn_opt_revision_t temprev; 490251881Speter const char *path; 491251881Speter 492251881Speter if (output_targets->nelts > 0) 493251881Speter { 494251881Speter path = APR_ARRAY_IDX(output_targets, 0, const char *); 495251881Speter SVN_ERR(svn_opt_parse_path(&temprev, &path, path, pool)); 496251881Speter if (temprev.kind != svn_opt_revision_unspecified) 497251881Speter { 498251881Speter APR_ARRAY_IDX(output_targets, 0, const char *) = path; 499251881Speter start_revision->kind = temprev.kind; 500251881Speter start_revision->value = temprev.value; 501251881Speter } 502251881Speter } 503251881Speter if (output_targets->nelts > 1) 504251881Speter { 505251881Speter path = APR_ARRAY_IDX(output_targets, 1, const char *); 506251881Speter SVN_ERR(svn_opt_parse_path(&temprev, &path, path, pool)); 507251881Speter if (temprev.kind != svn_opt_revision_unspecified) 508251881Speter { 509251881Speter APR_ARRAY_IDX(output_targets, 1, const char *) = path; 510251881Speter end_revision->kind = temprev.kind; 511251881Speter end_revision->value = temprev.value; 512251881Speter } 513251881Speter } 514251881Speter } 515251881Speter 516251881Speter *targets_p = output_targets; 517251881Speter return SVN_NO_ERROR; 518251881Speter} 519251881Speter 520251881Spetersvn_error_t * 521251881Spetersvn_opt_print_help3(apr_getopt_t *os, 522251881Speter const char *pgm_name, 523251881Speter svn_boolean_t print_version, 524251881Speter svn_boolean_t quiet, 525251881Speter const char *version_footer, 526251881Speter const char *header, 527251881Speter const svn_opt_subcommand_desc2_t *cmd_table, 528251881Speter const apr_getopt_option_t *option_table, 529251881Speter const int *global_options, 530251881Speter const char *footer, 531251881Speter apr_pool_t *pool) 532251881Speter{ 533251881Speter return svn_error_trace(svn_opt_print_help4(os, 534251881Speter pgm_name, 535251881Speter print_version, 536251881Speter quiet, 537251881Speter FALSE, 538251881Speter version_footer, 539251881Speter header, 540251881Speter cmd_table, 541251881Speter option_table, 542251881Speter global_options, 543251881Speter footer, 544251881Speter pool)); 545251881Speter} 546251881Speter 547251881Spetersvn_error_t * 548251881Spetersvn_opt_print_help2(apr_getopt_t *os, 549251881Speter const char *pgm_name, 550251881Speter svn_boolean_t print_version, 551251881Speter svn_boolean_t quiet, 552251881Speter const char *version_footer, 553251881Speter const char *header, 554251881Speter const svn_opt_subcommand_desc2_t *cmd_table, 555251881Speter const apr_getopt_option_t *option_table, 556251881Speter const char *footer, 557251881Speter apr_pool_t *pool) 558251881Speter{ 559251881Speter return svn_error_trace(svn_opt_print_help4(os, 560251881Speter pgm_name, 561251881Speter print_version, 562251881Speter quiet, 563251881Speter FALSE, 564251881Speter version_footer, 565251881Speter header, 566251881Speter cmd_table, 567251881Speter option_table, 568251881Speter NULL, 569251881Speter footer, 570251881Speter pool)); 571251881Speter} 572251881Speter 573251881Spetersvn_error_t * 574251881Spetersvn_opt_print_help(apr_getopt_t *os, 575251881Speter const char *pgm_name, 576251881Speter svn_boolean_t print_version, 577251881Speter svn_boolean_t quiet, 578251881Speter const char *version_footer, 579251881Speter const char *header, 580251881Speter const svn_opt_subcommand_desc_t *cmd_table, 581251881Speter const apr_getopt_option_t *option_table, 582251881Speter const char *footer, 583251881Speter apr_pool_t *pool) 584251881Speter{ 585251881Speter apr_array_header_t *targets = NULL; 586251881Speter 587251881Speter if (os) 588251881Speter SVN_ERR(svn_opt_parse_all_args(&targets, os, pool)); 589251881Speter 590251881Speter if (os && targets->nelts) /* help on subcommand(s) requested */ 591251881Speter { 592251881Speter int i; 593251881Speter 594251881Speter for (i = 0; i < targets->nelts; i++) 595251881Speter { 596251881Speter svn_opt_subcommand_help(APR_ARRAY_IDX(targets, i, const char *), 597251881Speter cmd_table, option_table, pool); 598251881Speter } 599251881Speter } 600251881Speter else if (print_version) /* just --version */ 601251881Speter { 602251881Speter SVN_ERR(svn_opt__print_version_info(pgm_name, version_footer, 603251881Speter svn_version_extended(FALSE, pool), 604251881Speter quiet, FALSE, pool)); 605251881Speter } 606251881Speter else if (os && !targets->nelts) /* `-h', `--help', or `help' */ 607251881Speter svn_opt_print_generic_help(header, 608251881Speter cmd_table, 609251881Speter option_table, 610251881Speter footer, 611251881Speter pool, 612251881Speter stdout); 613251881Speter else /* unknown option or cmd */ 614251881Speter SVN_ERR(svn_cmdline_fprintf(stderr, pool, 615251881Speter _("Type '%s help' for usage.\n"), pgm_name)); 616251881Speter 617251881Speter return SVN_NO_ERROR; 618251881Speter} 619251881Speter 620251881Spetervoid 621251881Spetersvn_opt_print_generic_help(const char *header, 622251881Speter const svn_opt_subcommand_desc_t *cmd_table, 623251881Speter const apr_getopt_option_t *opt_table, 624251881Speter const char *footer, 625251881Speter apr_pool_t *pool, FILE *stream) 626251881Speter{ 627251881Speter int i = 0; 628251881Speter svn_error_t *err; 629251881Speter 630251881Speter if (header) 631251881Speter if ((err = svn_cmdline_fputs(header, stream, pool))) 632251881Speter goto print_error; 633251881Speter 634251881Speter while (cmd_table[i].name) 635251881Speter { 636251881Speter if ((err = svn_cmdline_fputs(" ", stream, pool)) 637251881Speter || (err = print_command_info(cmd_table + i, opt_table, FALSE, 638251881Speter pool, stream)) 639251881Speter || (err = svn_cmdline_fputs("\n", stream, pool))) 640251881Speter goto print_error; 641251881Speter i++; 642251881Speter } 643251881Speter 644251881Speter if ((err = svn_cmdline_fputs("\n", stream, pool))) 645251881Speter goto print_error; 646251881Speter 647251881Speter if (footer) 648251881Speter if ((err = svn_cmdline_fputs(footer, stream, pool))) 649251881Speter goto print_error; 650251881Speter 651251881Speter return; 652251881Speter 653251881Speter print_error: 654251881Speter svn_handle_error2(err, stderr, FALSE, "svn: "); 655251881Speter svn_error_clear(err); 656251881Speter} 657251881Speter 658251881Speter/*** From io.c ***/ 659251881Spetersvn_error_t * 660251881Spetersvn_io_open_unique_file2(apr_file_t **file, 661251881Speter const char **temp_path, 662251881Speter const char *path, 663251881Speter const char *suffix, 664251881Speter svn_io_file_del_t delete_when, 665251881Speter apr_pool_t *pool) 666251881Speter{ 667251881Speter const char *dirpath; 668251881Speter const char *filename; 669251881Speter 670251881Speter svn_path_split(path, &dirpath, &filename, pool); 671251881Speter return svn_error_trace(svn_io_open_uniquely_named(file, temp_path, 672251881Speter dirpath, filename, suffix, 673251881Speter delete_when, 674251881Speter pool, pool)); 675251881Speter} 676251881Speter 677251881Spetersvn_error_t * 678251881Spetersvn_io_open_unique_file(apr_file_t **file, 679251881Speter const char **temp_path, 680251881Speter const char *path, 681251881Speter const char *suffix, 682251881Speter svn_boolean_t delete_on_close, 683251881Speter apr_pool_t *pool) 684251881Speter{ 685251881Speter return svn_error_trace(svn_io_open_unique_file2(file, temp_path, 686251881Speter path, suffix, 687251881Speter delete_on_close 688251881Speter ? svn_io_file_del_on_close 689251881Speter : svn_io_file_del_none, 690251881Speter pool)); 691251881Speter} 692251881Speter 693251881Spetersvn_error_t * 694251881Spetersvn_io_run_diff(const char *dir, 695251881Speter const char *const *user_args, 696251881Speter int num_user_args, 697251881Speter const char *label1, 698251881Speter const char *label2, 699251881Speter const char *from, 700251881Speter const char *to, 701251881Speter int *pexitcode, 702251881Speter apr_file_t *outfile, 703251881Speter apr_file_t *errfile, 704251881Speter const char *diff_cmd, 705251881Speter apr_pool_t *pool) 706251881Speter{ 707251881Speter SVN_ERR(svn_path_cstring_to_utf8(&diff_cmd, diff_cmd, pool)); 708251881Speter 709251881Speter return svn_error_trace(svn_io_run_diff2(dir, user_args, num_user_args, 710251881Speter label1, label2, 711251881Speter from, to, pexitcode, 712251881Speter outfile, errfile, diff_cmd, 713251881Speter pool)); 714251881Speter} 715251881Speter 716251881Spetersvn_error_t * 717251881Spetersvn_io_run_diff3_2(int *exitcode, 718251881Speter const char *dir, 719251881Speter const char *mine, 720251881Speter const char *older, 721251881Speter const char *yours, 722251881Speter const char *mine_label, 723251881Speter const char *older_label, 724251881Speter const char *yours_label, 725251881Speter apr_file_t *merged, 726251881Speter const char *diff3_cmd, 727251881Speter const apr_array_header_t *user_args, 728251881Speter apr_pool_t *pool) 729251881Speter{ 730251881Speter SVN_ERR(svn_path_cstring_to_utf8(&diff3_cmd, diff3_cmd, pool)); 731251881Speter 732251881Speter return svn_error_trace(svn_io_run_diff3_3(exitcode, dir, 733251881Speter mine, older, yours, 734251881Speter mine_label, older_label, 735251881Speter yours_label, merged, 736251881Speter diff3_cmd, user_args, pool)); 737251881Speter} 738251881Speter 739251881Spetersvn_error_t * 740251881Spetersvn_io_run_diff3(const char *dir, 741251881Speter const char *mine, 742251881Speter const char *older, 743251881Speter const char *yours, 744251881Speter const char *mine_label, 745251881Speter const char *older_label, 746251881Speter const char *yours_label, 747251881Speter apr_file_t *merged, 748251881Speter int *exitcode, 749251881Speter const char *diff3_cmd, 750251881Speter apr_pool_t *pool) 751251881Speter{ 752251881Speter return svn_error_trace(svn_io_run_diff3_2(exitcode, dir, mine, older, yours, 753251881Speter mine_label, older_label, 754251881Speter yours_label, 755251881Speter merged, diff3_cmd, NULL, pool)); 756251881Speter} 757251881Speter 758251881Spetersvn_error_t * 759251881Spetersvn_io_remove_file(const char *path, 760251881Speter apr_pool_t *scratch_pool) 761251881Speter{ 762251881Speter return svn_error_trace(svn_io_remove_file2(path, FALSE, scratch_pool)); 763251881Speter} 764251881Speter 765251881Spetersvn_error_t *svn_io_file_lock(const char *lock_file, 766251881Speter svn_boolean_t exclusive, 767251881Speter apr_pool_t *pool) 768251881Speter{ 769251881Speter return svn_io_file_lock2(lock_file, exclusive, FALSE, pool); 770251881Speter} 771251881Speter 772251881Spetersvn_error_t * 773251881Spetersvn_io_get_dirents2(apr_hash_t **dirents, 774251881Speter const char *path, 775251881Speter apr_pool_t *pool) 776251881Speter{ 777251881Speter /* Note that the first part of svn_io_dirent2_t is identical 778251881Speter to svn_io_dirent_t to allow this construct */ 779251881Speter return svn_error_trace( 780251881Speter svn_io_get_dirents3(dirents, path, FALSE, pool, pool)); 781251881Speter} 782251881Speter 783251881Spetersvn_error_t * 784251881Spetersvn_io_get_dirents(apr_hash_t **dirents, 785251881Speter const char *path, 786251881Speter apr_pool_t *pool) 787251881Speter{ 788251881Speter /* Note that in C, padding is not allowed at the beginning of structs, 789251881Speter so this is actually portable, since the kind field of svn_io_dirent_t 790251881Speter is first in that struct. */ 791251881Speter return svn_io_get_dirents2(dirents, path, pool); 792251881Speter} 793251881Speter 794251881Spetersvn_error_t * 795251881Spetersvn_io_start_cmd2(apr_proc_t *cmd_proc, 796251881Speter const char *path, 797251881Speter const char *cmd, 798251881Speter const char *const *args, 799251881Speter svn_boolean_t inherit, 800251881Speter svn_boolean_t infile_pipe, 801251881Speter apr_file_t *infile, 802251881Speter svn_boolean_t outfile_pipe, 803251881Speter apr_file_t *outfile, 804251881Speter svn_boolean_t errfile_pipe, 805251881Speter apr_file_t *errfile, 806251881Speter apr_pool_t *pool) 807251881Speter{ 808251881Speter return svn_io_start_cmd3(cmd_proc, path, cmd, args, NULL, inherit, 809251881Speter infile_pipe, infile, outfile_pipe, outfile, 810251881Speter errfile_pipe, errfile, pool); 811251881Speter} 812251881Speter 813251881Spetersvn_error_t * 814251881Spetersvn_io_start_cmd(apr_proc_t *cmd_proc, 815251881Speter const char *path, 816251881Speter const char *cmd, 817251881Speter const char *const *args, 818251881Speter svn_boolean_t inherit, 819251881Speter apr_file_t *infile, 820251881Speter apr_file_t *outfile, 821251881Speter apr_file_t *errfile, 822251881Speter apr_pool_t *pool) 823251881Speter{ 824251881Speter return svn_io_start_cmd2(cmd_proc, path, cmd, args, inherit, FALSE, 825251881Speter infile, FALSE, outfile, FALSE, errfile, pool); 826251881Speter} 827251881Speter 828251881Spetersvn_error_t * 829251881Spetersvn_io_file_read_full(apr_file_t *file, void *buf, 830251881Speter apr_size_t nbytes, apr_size_t *bytes_read, 831251881Speter apr_pool_t *pool) 832251881Speter{ 833251881Speter return svn_io_file_read_full2(file, buf, nbytes, bytes_read, NULL, pool); 834251881Speter} 835251881Speter 836251881Speterstruct walk_func_filter_baton_t 837251881Speter{ 838251881Speter svn_io_walk_func_t walk_func; 839251881Speter void *walk_baton; 840251881Speter}; 841251881Speter 842251881Speter/* Implements svn_io_walk_func_t, but only allows APR_DIR and APR_REG 843251881Speter finfo types through to the wrapped function/baton. */ 844251881Speterstatic svn_error_t * 845251881Speterwalk_func_filter_func(void *baton, 846251881Speter const char *path, 847251881Speter const apr_finfo_t *finfo, 848251881Speter apr_pool_t *pool) 849251881Speter{ 850251881Speter struct walk_func_filter_baton_t *b = baton; 851251881Speter 852251881Speter if (finfo->filetype == APR_DIR || finfo->filetype == APR_REG) 853251881Speter SVN_ERR(b->walk_func(b->walk_baton, path, finfo, pool)); 854251881Speter 855251881Speter return SVN_NO_ERROR; 856251881Speter} 857251881Speter 858251881Spetersvn_error_t * 859251881Spetersvn_io_dir_walk(const char *dirname, 860251881Speter apr_int32_t wanted, 861251881Speter svn_io_walk_func_t walk_func, 862251881Speter void *walk_baton, 863251881Speter apr_pool_t *pool) 864251881Speter{ 865251881Speter struct walk_func_filter_baton_t baton; 866251881Speter baton.walk_func = walk_func; 867251881Speter baton.walk_baton = walk_baton; 868251881Speter return svn_error_trace(svn_io_dir_walk2(dirname, wanted, 869251881Speter walk_func_filter_func, 870251881Speter &baton, pool)); 871251881Speter} 872251881Speter 873251881Spetersvn_error_t * 874251881Spetersvn_io_stat_dirent(const svn_io_dirent2_t **dirent_p, 875251881Speter const char *path, 876251881Speter svn_boolean_t ignore_enoent, 877251881Speter apr_pool_t *result_pool, 878251881Speter apr_pool_t *scratch_pool) 879251881Speter{ 880251881Speter return svn_error_trace( 881251881Speter svn_io_stat_dirent2(dirent_p, 882251881Speter path, 883251881Speter FALSE, 884251881Speter ignore_enoent, 885251881Speter result_pool, 886251881Speter scratch_pool)); 887251881Speter} 888251881Speter 889251881Speter/*** From constructors.c ***/ 890251881Spetersvn_log_changed_path_t * 891251881Spetersvn_log_changed_path_dup(const svn_log_changed_path_t *changed_path, 892251881Speter apr_pool_t *pool) 893251881Speter{ 894251881Speter svn_log_changed_path_t *new_changed_path 895251881Speter = apr_palloc(pool, sizeof(*new_changed_path)); 896251881Speter 897251881Speter *new_changed_path = *changed_path; 898251881Speter 899251881Speter if (new_changed_path->copyfrom_path) 900251881Speter new_changed_path->copyfrom_path = 901251881Speter apr_pstrdup(pool, new_changed_path->copyfrom_path); 902251881Speter 903251881Speter return new_changed_path; 904251881Speter} 905251881Speter 906251881Speter/*** From cmdline.c ***/ 907251881Spetersvn_error_t * 908251881Spetersvn_cmdline_prompt_user(const char **result, 909251881Speter const char *prompt_str, 910251881Speter apr_pool_t *pool) 911251881Speter{ 912251881Speter return svn_error_trace(svn_cmdline_prompt_user2(result, prompt_str, NULL, 913251881Speter pool)); 914251881Speter} 915251881Speter 916251881Spetersvn_error_t * 917251881Spetersvn_cmdline_setup_auth_baton(svn_auth_baton_t **ab, 918251881Speter svn_boolean_t non_interactive, 919251881Speter const char *auth_username, 920251881Speter const char *auth_password, 921251881Speter const char *config_dir, 922251881Speter svn_boolean_t no_auth_cache, 923251881Speter svn_config_t *cfg, 924251881Speter svn_cancel_func_t cancel_func, 925251881Speter void *cancel_baton, 926251881Speter apr_pool_t *pool) 927251881Speter{ 928251881Speter return svn_error_trace(svn_cmdline_create_auth_baton( 929251881Speter ab, non_interactive, 930251881Speter auth_username, auth_password, 931251881Speter config_dir, no_auth_cache, FALSE, 932251881Speter cfg, cancel_func, cancel_baton, pool)); 933251881Speter} 934251881Speter 935251881Speter/*** From dso.c ***/ 936251881Spetervoid 937251881Spetersvn_dso_initialize(void) 938251881Speter{ 939251881Speter svn_error_t *err = svn_dso_initialize2(); 940251881Speter if (err) 941251881Speter { 942251881Speter svn_error_clear(err); 943251881Speter abort(); 944251881Speter } 945251881Speter} 946251881Speter 947251881Speter/*** From simple_providers.c ***/ 948251881Spetervoid 949251881Spetersvn_auth_get_simple_provider(svn_auth_provider_object_t **provider, 950251881Speter apr_pool_t *pool) 951251881Speter{ 952251881Speter svn_auth_get_simple_provider2(provider, NULL, NULL, pool); 953251881Speter} 954251881Speter 955251881Speter/*** From ssl_client_cert_pw_providers.c ***/ 956251881Spetervoid 957251881Spetersvn_auth_get_ssl_client_cert_pw_file_provider 958251881Speter (svn_auth_provider_object_t **provider, 959251881Speter apr_pool_t *pool) 960251881Speter{ 961251881Speter svn_auth_get_ssl_client_cert_pw_file_provider2(provider, NULL, NULL, pool); 962251881Speter} 963251881Speter 964251881Speter/*** From path.c ***/ 965251881Speter 966251881Speter#define SVN_EMPTY_PATH "" 967251881Speter 968251881Speterconst char * 969251881Spetersvn_path_url_add_component(const char *url, 970251881Speter const char *component, 971251881Speter apr_pool_t *pool) 972251881Speter{ 973251881Speter /* URL can have trailing '/' */ 974251881Speter url = svn_path_canonicalize(url, pool); 975251881Speter 976251881Speter return svn_path_url_add_component2(url, component, pool); 977251881Speter} 978251881Speter 979251881Spetervoid 980251881Spetersvn_path_split(const char *path, 981251881Speter const char **dirpath, 982251881Speter const char **base_name, 983251881Speter apr_pool_t *pool) 984251881Speter{ 985251881Speter assert(dirpath != base_name); 986251881Speter 987251881Speter if (dirpath) 988251881Speter *dirpath = svn_path_dirname(path, pool); 989251881Speter 990251881Speter if (base_name) 991251881Speter *base_name = svn_path_basename(path, pool); 992251881Speter} 993251881Speter 994251881Speter 995251881Spetersvn_error_t * 996251881Spetersvn_path_split_if_file(const char *path, 997251881Speter const char **pdirectory, 998251881Speter const char **pfile, 999251881Speter apr_pool_t *pool) 1000251881Speter{ 1001251881Speter apr_finfo_t finfo; 1002251881Speter svn_error_t *err; 1003251881Speter 1004251881Speter SVN_ERR_ASSERT(svn_path_is_canonical(path, pool)); 1005251881Speter 1006251881Speter err = svn_io_stat(&finfo, path, APR_FINFO_TYPE, pool); 1007251881Speter if (err && ! APR_STATUS_IS_ENOENT(err->apr_err)) 1008251881Speter return err; 1009251881Speter 1010251881Speter if (err || finfo.filetype == APR_REG) 1011251881Speter { 1012251881Speter svn_error_clear(err); 1013251881Speter svn_path_split(path, pdirectory, pfile, pool); 1014251881Speter } 1015251881Speter else if (finfo.filetype == APR_DIR) 1016251881Speter { 1017251881Speter *pdirectory = path; 1018251881Speter *pfile = SVN_EMPTY_PATH; 1019251881Speter } 1020251881Speter else 1021251881Speter { 1022251881Speter return svn_error_createf(SVN_ERR_BAD_FILENAME, NULL, 1023251881Speter _("'%s' is neither a file nor a directory name"), 1024251881Speter svn_path_local_style(path, pool)); 1025251881Speter } 1026251881Speter 1027251881Speter return SVN_NO_ERROR; 1028251881Speter} 1029251881Speter 1030251881Speter/*** From stream.c ***/ 1031251881Spetersvn_error_t *svn_stream_copy2(svn_stream_t *from, svn_stream_t *to, 1032251881Speter svn_cancel_func_t cancel_func, 1033251881Speter void *cancel_baton, 1034251881Speter apr_pool_t *scratch_pool) 1035251881Speter{ 1036251881Speter return svn_error_trace(svn_stream_copy3( 1037251881Speter svn_stream_disown(from, scratch_pool), 1038251881Speter svn_stream_disown(to, scratch_pool), 1039251881Speter cancel_func, cancel_baton, scratch_pool)); 1040251881Speter} 1041251881Speter 1042251881Spetersvn_error_t *svn_stream_copy(svn_stream_t *from, svn_stream_t *to, 1043251881Speter apr_pool_t *scratch_pool) 1044251881Speter{ 1045251881Speter return svn_error_trace(svn_stream_copy3( 1046251881Speter svn_stream_disown(from, scratch_pool), 1047251881Speter svn_stream_disown(to, scratch_pool), 1048251881Speter NULL, NULL, scratch_pool)); 1049251881Speter} 1050251881Speter 1051251881Spetersvn_stream_t * 1052251881Spetersvn_stream_from_aprfile(apr_file_t *file, apr_pool_t *pool) 1053251881Speter{ 1054251881Speter return svn_stream_from_aprfile2(file, TRUE, pool); 1055251881Speter} 1056251881Speter 1057251881Spetersvn_error_t * 1058251881Spetersvn_stream_contents_same(svn_boolean_t *same, 1059251881Speter svn_stream_t *stream1, 1060251881Speter svn_stream_t *stream2, 1061251881Speter apr_pool_t *pool) 1062251881Speter{ 1063251881Speter return svn_error_trace(svn_stream_contents_same2( 1064251881Speter same, 1065251881Speter svn_stream_disown(stream1, pool), 1066251881Speter svn_stream_disown(stream2, pool), 1067251881Speter pool)); 1068251881Speter} 1069251881Speter 1070251881Speter/*** From path.c ***/ 1071251881Speter 1072251881Speterconst char * 1073251881Spetersvn_path_internal_style(const char *path, apr_pool_t *pool) 1074251881Speter{ 1075251881Speter if (svn_path_is_url(path)) 1076251881Speter return svn_uri_canonicalize(path, pool); 1077251881Speter else 1078251881Speter return svn_dirent_internal_style(path, pool); 1079251881Speter} 1080251881Speter 1081251881Speter 1082251881Speterconst char * 1083251881Spetersvn_path_local_style(const char *path, apr_pool_t *pool) 1084251881Speter{ 1085251881Speter if (svn_path_is_url(path)) 1086251881Speter return apr_pstrdup(pool, path); 1087251881Speter else 1088251881Speter return svn_dirent_local_style(path, pool); 1089251881Speter} 1090251881Speter 1091251881Speterconst char * 1092251881Spetersvn_path_canonicalize(const char *path, apr_pool_t *pool) 1093251881Speter{ 1094251881Speter if (svn_path_is_url(path)) 1095251881Speter return svn_uri_canonicalize(path, pool); 1096251881Speter else 1097251881Speter return svn_dirent_canonicalize(path, pool); 1098251881Speter} 1099251881Speter 1100251881Speter 1101251881Speter/*** From mergeinfo.c ***/ 1102251881Speter 1103251881Spetersvn_error_t * 1104251881Spetersvn_mergeinfo_inheritable(svn_mergeinfo_t *output, 1105251881Speter svn_mergeinfo_t mergeinfo, 1106251881Speter const char *path, 1107251881Speter svn_revnum_t start, 1108251881Speter svn_revnum_t end, 1109251881Speter apr_pool_t *pool) 1110251881Speter{ 1111251881Speter return svn_error_trace(svn_mergeinfo_inheritable2(output, mergeinfo, path, 1112251881Speter start, end, 1113251881Speter TRUE, pool, pool)); 1114251881Speter} 1115251881Speter 1116251881Spetersvn_error_t * 1117251881Spetersvn_rangelist_inheritable(svn_rangelist_t **inheritable_rangelist, 1118251881Speter const svn_rangelist_t *rangelist, 1119251881Speter svn_revnum_t start, 1120251881Speter svn_revnum_t end, 1121251881Speter apr_pool_t *pool) 1122251881Speter{ 1123251881Speter return svn_error_trace(svn_rangelist_inheritable2(inheritable_rangelist, 1124251881Speter rangelist, 1125251881Speter start, end, TRUE, 1126251881Speter pool, pool)); 1127251881Speter} 1128251881Speter 1129251881Spetersvn_error_t * 1130251881Spetersvn_rangelist_merge(svn_rangelist_t **rangelist, 1131251881Speter const svn_rangelist_t *changes, 1132251881Speter apr_pool_t *pool) 1133251881Speter{ 1134251881Speter SVN_ERR(svn_rangelist_merge2(*rangelist, changes, 1135251881Speter pool, pool)); 1136251881Speter 1137251881Speter return svn_error_trace( 1138251881Speter svn_rangelist__combine_adjacent_ranges(*rangelist, pool)); 1139251881Speter} 1140251881Speter 1141251881Spetersvn_error_t * 1142251881Spetersvn_mergeinfo_diff(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added, 1143251881Speter svn_mergeinfo_t from, svn_mergeinfo_t to, 1144251881Speter svn_boolean_t consider_inheritance, 1145251881Speter apr_pool_t *pool) 1146251881Speter{ 1147251881Speter return svn_error_trace(svn_mergeinfo_diff2(deleted, added, from, to, 1148251881Speter consider_inheritance, pool, 1149251881Speter pool)); 1150251881Speter} 1151251881Speter 1152251881Spetersvn_error_t * 1153251881Spetersvn_mergeinfo_merge(svn_mergeinfo_t mergeinfo, 1154251881Speter svn_mergeinfo_t changes, 1155251881Speter apr_pool_t *pool) 1156251881Speter{ 1157251881Speter return svn_error_trace(svn_mergeinfo_merge2(mergeinfo, changes, pool, 1158251881Speter pool)); 1159251881Speter} 1160251881Speter 1161251881Spetersvn_error_t * 1162251881Spetersvn_mergeinfo_remove(svn_mergeinfo_t *mergeinfo, svn_mergeinfo_t eraser, 1163251881Speter svn_mergeinfo_t whiteboard, apr_pool_t *pool) 1164251881Speter{ 1165251881Speter return svn_mergeinfo_remove2(mergeinfo, eraser, whiteboard, TRUE, pool, 1166251881Speter pool); 1167251881Speter} 1168251881Speter 1169251881Spetersvn_error_t * 1170251881Spetersvn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo, 1171251881Speter svn_mergeinfo_t mergeinfo1, 1172251881Speter svn_mergeinfo_t mergeinfo2, 1173251881Speter apr_pool_t *pool) 1174251881Speter{ 1175251881Speter return svn_mergeinfo_intersect2(mergeinfo, mergeinfo1, mergeinfo2, 1176251881Speter TRUE, pool, pool); 1177251881Speter} 1178251881Speter 1179251881Speter/*** From config.c ***/ 1180251881Spetersvn_error_t * 1181251881Spetersvn_config_create(svn_config_t **cfgp, 1182251881Speter svn_boolean_t section_names_case_sensitive, 1183251881Speter apr_pool_t *result_pool) 1184251881Speter{ 1185251881Speter return svn_error_trace(svn_config_create2(cfgp, 1186251881Speter section_names_case_sensitive, 1187251881Speter FALSE, 1188251881Speter result_pool)); 1189251881Speter} 1190251881Speter 1191251881Spetersvn_error_t * 1192251881Spetersvn_config_read2(svn_config_t **cfgp, const char *file, 1193251881Speter svn_boolean_t must_exist, 1194251881Speter svn_boolean_t section_names_case_sensitive, 1195251881Speter apr_pool_t *result_pool) 1196251881Speter{ 1197251881Speter return svn_error_trace(svn_config_read3(cfgp, file, 1198251881Speter must_exist, 1199251881Speter section_names_case_sensitive, 1200251881Speter FALSE, 1201251881Speter result_pool)); 1202251881Speter} 1203251881Speter 1204251881Spetersvn_error_t * 1205251881Spetersvn_config_read(svn_config_t **cfgp, const char *file, 1206251881Speter svn_boolean_t must_exist, 1207251881Speter apr_pool_t *result_pool) 1208251881Speter{ 1209251881Speter return svn_error_trace(svn_config_read3(cfgp, file, 1210251881Speter must_exist, 1211251881Speter FALSE, FALSE, 1212251881Speter result_pool)); 1213251881Speter} 1214251881Speter 1215251881Speter#ifdef SVN_DISABLE_FULL_VERSION_MATCH 1216251881Speter/* This double underscore name is used by the 1.6 command line client. 1217251881Speter Keeping this name is sufficient for the 1.6 client to use the 1.7 1218251881Speter libraries at runtime. */ 1219251881Spetersvn_error_t * 1220251881Spetersvn_opt__eat_peg_revisions(apr_array_header_t **true_targets_p, 1221251881Speter apr_array_header_t *targets, 1222251881Speter apr_pool_t *pool); 1223251881Spetersvn_error_t * 1224251881Spetersvn_opt__eat_peg_revisions(apr_array_header_t **true_targets_p, 1225251881Speter apr_array_header_t *targets, 1226251881Speter apr_pool_t *pool) 1227251881Speter{ 1228251881Speter unsigned int i; 1229251881Speter apr_array_header_t *true_targets; 1230251881Speter 1231251881Speter true_targets = apr_array_make(pool, 5, sizeof(const char *)); 1232251881Speter 1233251881Speter for (i = 0; i < targets->nelts; i++) 1234251881Speter { 1235251881Speter const char *target = APR_ARRAY_IDX(targets, i, const char *); 1236251881Speter const char *true_target; 1237251881Speter 1238251881Speter SVN_ERR(svn_opt__split_arg_at_peg_revision(&true_target, NULL, 1239251881Speter target, pool)); 1240251881Speter APR_ARRAY_PUSH(true_targets, const char *) = true_target; 1241251881Speter } 1242251881Speter 1243251881Speter SVN_ERR_ASSERT(true_targets_p); 1244251881Speter *true_targets_p = true_targets; 1245251881Speter 1246251881Speter return SVN_NO_ERROR; 1247251881Speter} 1248251881Speter#endif 1249251881Speter 1250251881Spetervoid 1251251881Spetersvn_xml_make_header(svn_stringbuf_t **str, apr_pool_t *pool) 1252251881Speter{ 1253251881Speter svn_xml_make_header2(str, NULL, pool); 1254251881Speter} 1255251881Speter 1256251881Spetervoid 1257251881Spetersvn_utf_initialize(apr_pool_t *pool) 1258251881Speter{ 1259251881Speter svn_utf_initialize2(FALSE, pool); 1260251881Speter} 1261251881Speter 1262251881Spetersvn_error_t * 1263251881Spetersvn_subst_build_keywords(svn_subst_keywords_t *kw, 1264251881Speter const char *keywords_val, 1265251881Speter const char *rev, 1266251881Speter const char *url, 1267251881Speter apr_time_t date, 1268251881Speter const char *author, 1269251881Speter apr_pool_t *pool) 1270251881Speter{ 1271251881Speter apr_hash_t *kwhash; 1272251881Speter const svn_string_t *val; 1273251881Speter 1274251881Speter SVN_ERR(svn_subst_build_keywords2(&kwhash, keywords_val, rev, 1275251881Speter url, date, author, pool)); 1276251881Speter 1277251881Speter /* The behaviour of pre-1.3 svn_subst_build_keywords, which we are 1278251881Speter * replicating here, is to write to a slot in the svn_subst_keywords_t 1279251881Speter * only if the relevant keyword was present in keywords_val, otherwise 1280251881Speter * leaving that slot untouched. */ 1281251881Speter 1282251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_REVISION_LONG); 1283251881Speter if (val) 1284251881Speter kw->revision = val; 1285251881Speter 1286251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_DATE_LONG); 1287251881Speter if (val) 1288251881Speter kw->date = val; 1289251881Speter 1290251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_AUTHOR_LONG); 1291251881Speter if (val) 1292251881Speter kw->author = val; 1293251881Speter 1294251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_URL_LONG); 1295251881Speter if (val) 1296251881Speter kw->url = val; 1297251881Speter 1298251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_ID); 1299251881Speter if (val) 1300251881Speter kw->id = val; 1301251881Speter 1302251881Speter return SVN_NO_ERROR; 1303251881Speter} 1304251881Speter 1305262253Speter/*** From version.c ***/ 1306262253Spetersvn_error_t * 1307262253Spetersvn_ver_check_list(const svn_version_t *my_version, 1308262253Speter const svn_version_checklist_t *checklist) 1309262253Speter{ 1310262253Speter return svn_ver_check_list2(my_version, checklist, svn_ver_compatible); 1311262253Speter} 1312