Skip to main content

sz_rust_cli/cmd/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2024-2026 SZ-Rust Team
3//
4//! 命令模块 — 各命令的实现
5//!
6//! ## 模块结构
7//!
8//! | 模块 | 对齐 PHP | 说明 |
9//! |------|---------|------|
10//! | `make` | `think\console\command\make\*` | 代码生成命令 |
11//! | `migrate` | `think\console\command\migrate\*` | 数据库迁移命令 |
12//! | `route` | `think\console\command\RouteList` | 路由列表命令 |
13//! | `cache` | `think\console\command\Cache` | 缓存清理命令 |
14//! | `scheduler` | sz-orm-scheduler 接入 | 调度器命令 |
15//! | `seed` | `think\db\Seed` | 数据填充命令 |
16//! | `optimize` | `think\console\command\optimize\*` | 配置/路由缓存优化命令 |
17//! | `plugin` | 插件市场 | 插件搜索/安装/发布/卸载/更新/列表/登录 |
18//! | `admin` | Admin 后台管理插件 | 迁移/路由列表/Capability列表/初始化 |
19//! | `serve` | think run | 启动 HTTP 服务(可选加载 admin 插件) |
20
21pub mod admin;
22pub mod cache;
23pub mod make;
24pub mod migrate;
25pub mod optimize;
26pub mod plugin;
27pub mod route;
28pub mod scheduler;
29pub mod seed;
30pub mod serve;
31
32/// 测试辅助模块 — 提供跨模块共享的全局互斥锁
33///
34/// `optimize` 与 `make` 测试均通过 `std::env::set_current_dir` 切换工作目录,
35/// 该状态是进程级全局的。若两模块各自持有独立 mutex 并行运行,会互相污染工作目录。
36/// 本模块提供单一全局锁,所有依赖 `set_current_dir` 的测试都通过它串行化。
37#[cfg(test)]
38pub(crate) mod test_support {
39    use std::sync::{Mutex, MutexGuard};
40
41    /// 全局测试互斥锁 — 协调所有使用 `set_current_dir` 的测试,避免跨模块并行竞态
42    pub static GLOBAL_TEST_MUTEX: Mutex<()> = Mutex::new(());
43
44    /// 获取全局互斥锁(处理中毒情况:前一个测试 panic 后恢复)
45    pub fn acquire_global_lock() -> MutexGuard<'static, ()> {
46        GLOBAL_TEST_MUTEX.lock().unwrap_or_else(|e| e.into_inner())
47    }
48}