InfoVector Client::info(const Path & pathOrUrl, bool recurse, const Revision & revision, const Revision & pegRevision) throw(ClientException) { Pool pool; InfoVector infoVector; svn_error_t * error = svn_client_info(pathOrUrl.c_str(), pegRevision.revision(), revision.revision(), infoReceiverFunc, &infoVector, recurse, *m_context, pool); if (error != 0) throw ClientException(error); return infoVector; }
Py::Object pysvn_client::cmd_info2( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_revision }, { false, name_peg_revision}, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_INFO2 ) { false, name_depth }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "info2", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_kind kind = svn_opt_revision_unspecified; if( is_svn_url( path ) ) kind = svn_opt_revision_head; svn_opt_revision_t revision = args.getRevision( name_revision, kind ); svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_INFO2 ) apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_empty ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool is_url = is_svn_url( path ); revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); revisionKindCompatibleCheck( is_url, revision, name_revision, name_url_or_path ); Py::List info_list; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); InfoReceiveBaton info_baton( &permission, info_list, m_wrapper_info, m_wrapper_lock, m_wrapper_wc_info ); #if defined( PYSVN_HAS_CLIENT_INFO2 ) svn_error_t *error = svn_client_info2 ( norm_path.c_str(), &peg_revision, &revision, info_receiver_c, reinterpret_cast<void *>( &info_baton ), depth, changelists, m_context, pool ); #else svn_error_t *error = svn_client_info ( norm_path.c_str(), &peg_revision, &revision, info_receiver_c, reinterpret_cast<void *>( &info_baton ), recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return info_list; }