static StatusEntries localStatus(const char * path, const bool descend, const bool get_all, const bool update, const bool no_ignore, Context * context, const bool ignore_externals) { svn_error_t *error; StatusEntries entries; svn_revnum_t revnum; Revision rev(Revision::HEAD); Pool pool; error = svn_client_status2( &revnum, // revnum path, // path rev, // revision statusEntriesFunc, // status func &entries, // status baton descend, // recurse get_all, update, // need 'update' to be true to get repository lock info no_ignore, ignore_externals, // ignore_externals *context, // client ctx pool); if (error!=NULL) throw ClientException(error); return entries; }
static svn_revnum_t localFilteredStatus(const char * path, const StatusFilter & filter, const bool descend, const bool update, StatusEntries & entries, Context * context) { svn_error_t *error; svn_revnum_t revnum; Revision rev(Revision::HEAD); Pool pool; StatusBaton baton(filter, entries); error = svn_client_status2( &revnum, // revnum path, // path rev, // revision filteredStatusFunc, // status func &baton, // status baton descend, // recurse filter.showUnmodified, update, // need 'update' to be true to get repository lock info filter.showIgnored, // no_ignores !filter.showExternals, // ignore_externals *context, // client ctx pool); if (error!=NULL) throw ClientException(error); return revnum; }
static int l_status (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); svn_opt_revision_t revision; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = svn_opt_revision_head; } 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); svn_revnum_t rev; status_bt baton; baton.L = L; baton.pool = pool; lua_newtable (L); err = svn_client_status2 (&rev, path, &revision, status_func, &baton, TRUE, TRUE, TRUE, FALSE, FALSE, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 1; }
static int l_status (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); svn_opt_revision_t revision; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = svn_opt_revision_head; } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } svn_boolean_t recursive = TRUE; svn_boolean_t verbose = FALSE; svn_boolean_t show_updates = FALSE; svn_boolean_t no_ignore = FALSE; svn_boolean_t ignore_externals = 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, "verbose"); if (lua_isboolean (L, -1)) { verbose = lua_toboolean (L, -1); } lua_getfield (L, itable, "show_updates"); if (lua_isboolean (L, -1)) { show_updates = lua_toboolean (L, -1); } lua_getfield (L, itable, "no_ignore"); if (lua_isboolean (L, -1)) { no_ignore = lua_toboolean (L, -1); } lua_getfield (L, itable, "ignore_externals"); if (lua_isboolean (L, -1)) { ignore_externals = 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); svn_revnum_t rev; status_bt baton; baton.L = L; baton.detailed = (verbose || show_updates); baton.show_last_committed = verbose; baton.repos_locks = show_updates; baton.pool = pool; lua_newtable (L); err = svn_client_status2 (&rev, path, &revision, status_func, &baton, recursive, verbose, show_updates, no_ignore, ignore_externals, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 1; }
Py::Object pysvn_client::cmd_status( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, name_recurse }, { false, name_get_all }, { false, name_update }, { false, name_ignore }, #if defined( PYSVN_HAS_CLIENT_STATUS2 ) { false, name_ignore_externals }, #endif #if defined( PYSVN_HAS_CLIENT_STATUS3 ) { false, name_depth }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "status", args_desc, a_args, a_kws ); args.check(); Py::String path( args.getUtf8String( name_path ) ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_STATUS3 ) 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_immediates ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool get_all = args.getBoolean( name_get_all, true ); bool update = args.getBoolean( name_update, false ); bool ignore = args.getBoolean( name_ignore, false ); #if defined( PYSVN_HAS_CLIENT_STATUS2 ) bool ignore_externals = args.getBoolean( name_ignore_externals, false ); #endif apr_hash_t *status_hash = NULL; Py::List entries_list; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_revnum_t revnum; svn_opt_revision_t rev = { svn_opt_revision_head, {0} }; StatusEntriesBaton baton; status_hash = apr_hash_make( pool ); baton.hash = status_hash; baton.pool = pool; #if defined( PYSVN_HAS_CLIENT_STATUS4 ) svn_error_t *error = svn_client_status4 ( &revnum, // revnum norm_path.c_str(), // path &rev, StatusEntriesFunc, // status func &baton, // status baton depth, get_all, update, !ignore, ignore_externals, changelists, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_STATUS3 ) svn_error_t *error = svn_client_status3 ( &revnum, // revnum norm_path.c_str(), // path &rev, StatusEntriesFunc, // status func &baton, // status baton depth, get_all, update, !ignore, ignore_externals, changelists, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_STATUS2 ) svn_error_t *error = svn_client_status2 ( &revnum, // revnum norm_path.c_str(), // path &rev, StatusEntriesFunc, // status func &baton, // status baton recurse, get_all, update, !ignore, ignore_externals, m_context, pool ); #else svn_error_t *error = svn_client_status ( &revnum, // revnum norm_path.c_str(), // path &rev, StatusEntriesFunc, // status func &baton, // status baton recurse, get_all, update, !ignore, 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 ); } apr_array_header_t *statusarray = svn_sort__hash( status_hash, svn_sort_compare_items_as_paths, pool ); // Loop over array, printing each name/status-structure for (int i = statusarray->nelts-1; i >= 0; i--) { const svn_sort__item_t *item = &APR_ARRAY_IDX( statusarray, i, const svn_sort__item_t ); pysvn_wc_status_t *status = (pysvn_wc_status_t *)item->value; entries_list.append( toObject( Py::String( osNormalisedPath( (const char *)item->key, pool ), "UTF-8" ), *status, pool, m_wrapper_status, m_wrapper_entry, m_wrapper_lock ) ); } return entries_list; }