sz_rust_cli/cmd/mod.rs
1//! 命令模块 — 各命令的实现
2//!
3//! ## 模块结构
4//!
5//! | 模块 | 对齐 PHP | 说明 |
6//! |------|---------|------|
7//! | `make` | `think\console\command\make\*` | 代码生成命令 |
8//! | `migrate` | `think\console\command\migrate\*` | 数据库迁移命令 |
9//! | `route` | `think\console\command\RouteList` | 路由列表命令 |
10//! | `cache` | `think\console\command\Cache` | 缓存清理命令 |
11//! | `scheduler` | sz-orm-scheduler 接入 | 调度器命令 |
12//! | `seed` | `think\db\Seed` | 数据填充命令 |
13//! | `optimize` | `think\console\command\optimize\*` | 配置/路由缓存优化命令 |
14
15pub mod cache;
16pub mod make;
17pub mod migrate;
18pub mod optimize;
19pub mod route;
20pub mod scheduler;
21pub mod seed;
22
23/// 测试辅助模块 — 提供跨模块共享的全局互斥锁
24///
25/// `optimize` 与 `make` 测试均通过 `std::env::set_current_dir` 切换工作目录,
26/// 该状态是进程级全局的。若两模块各自持有独立 mutex 并行运行,会互相污染工作目录。
27/// 本模块提供单一全局锁,所有依赖 `set_current_dir` 的测试都通过它串行化。
28#[cfg(test)]
29pub(crate) mod test_support {
30 use std::sync::{Mutex, MutexGuard};
31
32 /// 全局测试互斥锁 — 协调所有使用 `set_current_dir` 的测试,避免跨模块并行竞态
33 pub static GLOBAL_TEST_MUTEX: Mutex<()> = Mutex::new(());
34
35 /// 获取全局互斥锁(处理中毒情况:前一个测试 panic 后恢复)
36 pub fn acquire_global_lock() -> MutexGuard<'static, ()> {
37 GLOBAL_TEST_MUTEX.lock().unwrap_or_else(|e| e.into_inner())
38 }
39}