svn_error_t * svn_cl__args_to_target_array_print_reserved(apr_array_header_t **targets, apr_getopt_t *os, const apr_array_header_t *known_targets, svn_client_ctx_t *ctx, svn_boolean_t keep_last_origpath_on_truepath_collision, apr_pool_t *pool) { svn_error_t *err = svn_client_args_to_target_array2(targets, os, known_targets, ctx, keep_last_origpath_on_truepath_collision, pool); if (err) { if (err->apr_err == SVN_ERR_RESERVED_FILENAME_SPECIFIED) { svn_handle_error2(err, stderr, FALSE, "svn: Skipping argument: "); svn_error_clear(err); } else return svn_error_trace(err); } return SVN_NO_ERROR; }
static svn_error_t * test_args_to_target_array(apr_pool_t *pool) { apr_size_t i; apr_pool_t *iterpool; svn_client_ctx_t *ctx; static struct { const char *input; const char *output; /* NULL means an error is expected. */ } const tests[] = { { ".", "" }, { ".@BASE", "@BASE" }, { "foo///bar", "foo/bar" }, { "foo///bar@13", "foo/bar@13" }, { "foo///bar@HEAD", "foo/bar@HEAD" }, { "foo///bar@{1999-12-31}", "foo/bar@{1999-12-31}" }, { "http://a//b////", "http://a/b" }, { "http://a///b@27", "http://a/b@27" }, { "http://a/b//@COMMITTED", "http://a/b@COMMITTED" }, { "foo///bar@1:2", "foo/bar@1:2" }, { "foo///bar@baz", "foo/bar@baz" }, { "foo///bar@", "foo/bar@" }, { "foo///bar///@13", "foo/bar@13" }, { "foo///bar@@13", "foo/bar@@13" }, { "foo///@bar@HEAD", "foo/@bar@HEAD" }, { "foo@///bar", "foo@/bar" }, { "foo@HEAD///bar", "foo@HEAD/bar" }, }; SVN_ERR(svn_client_create_context(&ctx, pool)); iterpool = svn_pool_create(pool); for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { const char *input = tests[i].input; const char *expected_output = tests[i].output; apr_array_header_t *targets; apr_getopt_t *os; const int argc = 2; const char *argv[3] = { 0 }; apr_status_t apr_err; svn_error_t *err; argv[0] = "opt-test"; argv[1] = input; argv[2] = NULL; apr_err = apr_getopt_init(&os, iterpool, argc, argv); if (apr_err) return svn_error_wrap_apr(apr_err, "Error initializing command line arguments"); err = svn_client_args_to_target_array2(&targets, os, NULL, ctx, FALSE, iterpool); if (expected_output) { const char *actual_output; if (err) return err; if (argc - 1 != targets->nelts) return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, "Passed %d target(s) to " "svn_client_args_to_target_array() but " "got %d back.", argc - 1, targets->nelts); actual_output = APR_ARRAY_IDX(targets, 0, const char *); if (! svn_path_is_canonical(actual_output, iterpool)) return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, "Input '%s' to " "svn_client_args_to_target_array() should " "have returned a canonical path but " "'%s' is not.", input, actual_output); if (strcmp(expected_output, actual_output) != 0) return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, "Input '%s' to " "svn_client_args_to_target_array() should " "have returned '%s' but returned '%s'.", input, expected_output, actual_output); } else { if (! err) return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, "Unexpected success in passing '%s' " "to svn_client_args_to_target_array().", input); } }