svn_error_t * svn_cl__changelist_paths(apr_array_header_t **paths, const apr_array_header_t *changelists, const apr_array_header_t *targets, svn_depth_t depth, svn_client_ctx_t *ctx, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { apr_array_header_t *found; apr_hash_t *paths_hash; apr_pool_t *iterpool; int i; if (! (changelists && changelists->nelts)) { *paths = (apr_array_header_t *)targets; return SVN_NO_ERROR; } found = apr_array_make(scratch_pool, 8, sizeof(const char *)); iterpool = svn_pool_create(scratch_pool); for (i = 0; i < targets->nelts; i++) { const char *target = APR_ARRAY_IDX(targets, i, const char *); svn_pool_clear(iterpool); SVN_ERR(svn_client_get_changelists(target, changelists, depth, changelist_receiver, found, ctx, iterpool)); } svn_pool_destroy(iterpool); SVN_ERR(svn_hash_from_cstring_keys(&paths_hash, found, result_pool)); return svn_error_trace(svn_hash_keys(paths, paths_hash, result_pool)); }
Py::Object pysvn_client::cmd_get_changelist( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, name_depth }, { false, name_changelists }, { false, NULL } }; FunctionArguments args( "get_changelists", args_desc, a_args, a_kws ); args.check(); std::string type_error_message; SvnPool pool( m_context ); try { std::string path( args.getUtf8String( name_path ) ); std::string norm_path( svnNormalisedIfPath( path, pool ) ); apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); //for (int j = 0; j < changelists->nelts; ++j) //{ // const char *name = ((const char **)changelists->elts)[j]; // std::cout << "QQQ: get changelist=" << name << std::endl; //} } svn_depth_t depth = args.getDepth( name_depth, svn_depth_files ); Py::List changelist_list; try { checkThreadPermission(); PythonAllowThreads permission( m_context ); ChangelistBaton baton( &permission, pool, changelist_list ); svn_error_t *error = svn_client_get_changelists ( norm_path.c_str(), changelists, depth, changelistReceiver, reinterpret_cast<void *>( &baton ), m_context, pool ); 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 changelist_list; } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return Py::None(); }