static int l_list (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); svn_opt_revision_t revision; svn_opt_revision_t peg_revision; peg_revision.kind = svn_opt_revision_unspecified; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = get_revision_kind (path); } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); lua_newtable (L); err = svn_client_list (path, &peg_revision, &revision, TRUE, SVN_DIRENT_ALL, TRUE, list_func, L, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 1; }
static int l_list (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); svn_opt_revision_t revision; svn_opt_revision_t peg_revision; peg_revision.kind = svn_opt_revision_unspecified; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = get_revision_kind (path); } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } svn_boolean_t recursive = FALSE; svn_boolean_t fetch_locks = FALSE; int itable = 3; if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "recursive"); if (lua_isboolean (L, -1)) { recursive = lua_toboolean (L, -1); } lua_getfield (L, itable, "fetch_locks"); if (lua_isboolean (L, -1)) { fetch_locks = lua_toboolean (L, -1); } } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); lua_newtable (L); err = svn_client_list (path, &peg_revision, &revision, recursive, SVN_DIRENT_ALL, fetch_locks, list_func, L, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 1; }
Py::Object pysvn_client::cmd_list( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_peg_revision }, { false, name_revision }, { false, name_recurse }, { false, name_dirent_fields }, { false, name_fetch_locks }, #if defined( PYSVN_HAS_CLIENT_LIST2 ) { false, name_depth }, #endif { false, NULL } }; FunctionArguments args( "list", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, svn_opt_revision_unspecified ); bool is_url = is_svn_url( path ); svn_opt_revision_t revision; if( is_url ) revision = args.getRevision( name_revision, svn_opt_revision_head ); else revision = args.getRevision( name_revision, svn_opt_revision_working ); #if defined( PYSVN_HAS_CLIENT_LIST2 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_immediates, svn_depth_infinity, svn_depth_immediates ); #else bool recurse = args.getBoolean( name_recurse, false ); #endif apr_uint32_t dirent_fields = args.getLong( name_dirent_fields, SVN_DIRENT_ALL ); bool fetch_locks = args.getBoolean( name_fetch_locks, false ); revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); revisionKindCompatibleCheck( is_url, revision, name_revision, name_url_or_path ); SvnPool pool( m_context ); std::string norm_path( svnNormalisedIfPath( path, pool ) ); Py::List list_list; try { checkThreadPermission(); PythonAllowThreads permission( m_context ); ListReceiveBaton list_baton( &permission, list_list ); list_baton.m_dirent_fields = dirent_fields; list_baton.m_is_url = is_url; list_baton.m_fetch_locks = fetch_locks; list_baton.m_url_or_path = norm_path; list_baton.m_wrapper_lock = &m_wrapper_lock; list_baton.m_wrapper_list = &m_wrapper_list; #if defined( PYSVN_HAS_CLIENT_LIST2 ) svn_error_t *error = svn_client_list2 ( norm_path.c_str(), &peg_revision, &revision, depth, dirent_fields, fetch_locks, list_receiver_c, reinterpret_cast<void *>( &list_baton ), m_context, pool ); #else svn_error_t *error = svn_client_list ( norm_path.c_str(), &peg_revision, &revision, recurse, dirent_fields, fetch_locks, list_receiver_c, reinterpret_cast<void *>( &list_baton ), m_context, pool ); #endif permission.allowThisThread(); if( error != 0 ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return list_list; }