- if (!$AUTH_BATON || !$AUTH_CALLBACKS) {
- SVN::_Core::svn_config_ensure($_config_dir, undef);
- ($AUTH_BATON, $AUTH_CALLBACKS) = SVN::Core::auth_open_helper([
- SVN::Client::get_simple_provider(),
- SVN::Client::get_ssl_server_trust_file_provider(),
- SVN::Client::get_simple_prompt_provider(
- \&_simple_prompt, 2),
- SVN::Client::get_ssl_client_cert_prompt_provider(
- \&_ssl_client_cert_prompt, 2),
- SVN::Client::get_ssl_client_cert_pw_prompt_provider(
- \&_ssl_client_cert_pw_prompt, 2),
- SVN::Client::get_username_provider(),
- SVN::Client::get_ssl_server_trust_prompt_provider(
- \&_ssl_server_trust_prompt),
- SVN::Client::get_username_prompt_provider(
- \&_username_prompt, 2),
- ]);
- }
- SVN::Ra->new(url => $url, auth => $AUTH_BATON,
- auth_provider_callbacks => $AUTH_CALLBACKS);
+ SVN::_Core::svn_config_ensure($_config_dir, undef);
+ my ($baton, $callbacks) = SVN::Core::auth_open_helper([
+ SVN::Client::get_simple_provider(),
+ SVN::Client::get_ssl_server_trust_file_provider(),
+ SVN::Client::get_simple_prompt_provider(
+ \&_simple_prompt, 2),
+ SVN::Client::get_ssl_client_cert_prompt_provider(
+ \&_ssl_client_cert_prompt, 2),
+ SVN::Client::get_ssl_client_cert_pw_prompt_provider(
+ \&_ssl_client_cert_pw_prompt, 2),
+ SVN::Client::get_username_provider(),
+ SVN::Client::get_ssl_server_trust_prompt_provider(
+ \&_ssl_server_trust_prompt),
+ SVN::Client::get_username_prompt_provider(
+ \&_username_prompt, 2),
+ ]);
+ my $ra = SVN::Ra->new(url => $url, auth => $baton,
+ pool => SVN::Pool->new,
+ auth_provider_callbacks => $callbacks);
+ $ra->{svn_path} = $url;
+ $ra->{repos_root} = $ra->get_repos_root;
+ $ra->{svn_path} =~ s#^\Q$ra->{repos_root}\E/*##;
+ push @repo_path_split_cache, qr/^(\Q$ra->{repos_root}\E)/;
+ return $ra;
+}
+
+sub libsvn_dup_ra {
+ my ($ra) = @_;
+ SVN::Ra->new(map { $_ => $ra->{$_} }
+ qw/url auth auth_provider_callbacks repos_root svn_path/);