summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--locales/help_docs/en.yml2
-rw-r--r--locales/help_docs/zh-CN.yml2
-rw-r--r--src/bin/jv.rs56
3 files changed, 46 insertions, 14 deletions
diff --git a/locales/help_docs/en.yml b/locales/help_docs/en.yml
index 237b507..70b0b1c 100644
--- a/locales/help_docs/en.yml
+++ b/locales/help_docs/en.yml
@@ -517,6 +517,8 @@ jv:
current_dir_name: Failed to get current directory name
set_current_dir: Failed to set current directory to %{dir}
+ not_root_dir: This command needs to be execute in the workspace root directory!
+
move:
rename_failed: |
**Warning**: Failed to move local file `%{from}` to `%{to}`: %{error}
diff --git a/locales/help_docs/zh-CN.yml b/locales/help_docs/zh-CN.yml
index 5173daf..606f260 100644
--- a/locales/help_docs/zh-CN.yml
+++ b/locales/help_docs/zh-CN.yml
@@ -505,6 +505,8 @@ jv:
current_dir_name: 无法获得当前目录的名称
set_current_dir: 无法设置到目录 %{dir}
+ not_root_dir: 该命令需要在工作区根目录运行!
+
move:
rename_failed: |
**警告**:移动本地文件 `%{from}` 至 `%{to}` 失败:%{error}
diff --git a/src/bin/jv.rs b/src/bin/jv.rs
index 60055da..4397e17 100644
--- a/src/bin/jv.rs
+++ b/src/bin/jv.rs
@@ -800,6 +800,8 @@ async fn main() {
return;
};
+ let _ = correct_current_dir();
+
// Check if account list is not empty
let Some(dir) = UserDirectory::current_cfg_dir() else {
return;
@@ -1024,7 +1026,9 @@ async fn main() {
}
SheetManage::List(sheet_list_args) => jv_sheet_list(sheet_list_args).await,
SheetManage::Use(sheet_use_args) => jv_sheet_use(sheet_use_args).await,
- SheetManage::Exit(sheet_exit_args) => jv_sheet_exit(sheet_exit_args).await,
+ SheetManage::Exit(sheet_exit_args) => {
+ let _ = jv_sheet_exit(sheet_exit_args).await;
+ }
SheetManage::Make(sheet_make_args) => jv_sheet_make(sheet_make_args).await,
SheetManage::Drop(sheet_drop_args) => jv_sheet_drop(sheet_drop_args).await,
SheetManage::Align(sheet_align_args) => jv_sheet_align(sheet_align_args).await,
@@ -1100,15 +1104,16 @@ async fn main() {
jv_docs(docs_args).await;
}
JustEnoughVcsWorkspaceCommand::Exit => {
- jv_sheet_exit(SheetExitArgs { help: false }).await;
+ let _ = jv_sheet_exit(SheetExitArgs { help: false }).await;
}
JustEnoughVcsWorkspaceCommand::Use(use_args) => {
- jv_sheet_exit(SheetExitArgs { help: false }).await;
- jv_sheet_use(SheetUseArgs {
- help: false,
- sheet_name: use_args.sheet_name,
- })
- .await;
+ if let Ok(_) = jv_sheet_exit(SheetExitArgs { help: false }).await {
+ jv_sheet_use(SheetUseArgs {
+ help: false,
+ sheet_name: use_args.sheet_name,
+ })
+ .await;
+ }
}
JustEnoughVcsWorkspaceCommand::Sheets => {
jv_sheet_list(SheetListArgs {
@@ -1222,16 +1227,19 @@ async fn main() {
};
}
JustEnoughVcsWorkspaceCommand::GetCurrentAccount => {
+ let _ = correct_current_dir();
if let Ok(local_config) = LocalConfig::read().await {
println!("{}", local_config.current_account())
};
}
JustEnoughVcsWorkspaceCommand::GetCurrentUpstream => {
+ let _ = correct_current_dir();
if let Ok(local_config) = LocalConfig::read().await {
println!("{}", local_config.upstream_addr())
};
}
JustEnoughVcsWorkspaceCommand::GetCurrentSheet => {
+ let _ = correct_current_dir();
if let Ok(local_config) = LocalConfig::read().await {
println!(
"{}",
@@ -1980,6 +1988,8 @@ async fn jv_status(_args: StatusArgs) {
}
async fn jv_sheet_list(args: SheetListArgs) {
+ let _ = correct_current_dir();
+
let Some(local_dir) = current_local_path() else {
if !args.raw {
eprintln!("{}", t!("jv.fail.workspace_not_found").trim());
@@ -2096,11 +2106,18 @@ async fn jv_sheet_list(args: SheetListArgs) {
}
async fn jv_sheet_use(args: SheetUseArgs) {
- let Some(_local_dir) = current_local_path() else {
+ let Some(local_dir) = current_local_path() else {
eprintln!("{}", t!("jv.fail.workspace_not_found").trim());
return;
};
+ let current_dir = current_dir().unwrap();
+
+ if local_dir != current_dir {
+ eprintln!("{}", t!("jv.fail.not_root_dir").trim());
+ return;
+ }
+
let Ok(mut local_cfg) = LocalConfig::read().await else {
eprintln!("{}", md(t!("jv.fail.read_cfg")));
return;
@@ -2139,26 +2156,35 @@ async fn jv_sheet_use(args: SheetUseArgs) {
}
}
-async fn jv_sheet_exit(_args: SheetExitArgs) {
- let Some(_local_dir) = current_local_path() else {
+async fn jv_sheet_exit(_args: SheetExitArgs) -> Result<(), ()> {
+ let Some(local_dir) = current_local_path() else {
eprintln!("{}", t!("jv.fail.workspace_not_found").trim());
- return;
+ return Err(());
};
+ let current_dir = current_dir().unwrap();
+
+ if local_dir != current_dir {
+ eprintln!("{}", t!("jv.fail.not_root_dir").trim());
+ return Err(());
+ }
+
let Ok(mut local_cfg) = LocalConfig::read().await else {
eprintln!("{}", md(t!("jv.fail.read_cfg")));
- return;
+ return Err(());
};
match local_cfg.exit_sheet().await {
Ok(_) => {
let Ok(_) = LocalConfig::write(&local_cfg).await else {
eprintln!("{}", t!("jv.fail.write_cfg").trim());
- return;
+ return Err(());
};
+ return Ok(());
}
Err(e) => {
handle_err(e.into());
+ return Err(());
}
}
}
@@ -3804,6 +3830,8 @@ async fn jv_account_remove(user_dir: UserDirectory, args: AccountRemoveArgs) {
}
async fn jv_account_list(user_dir: UserDirectory, args: AccountListArgs) {
+ let _ = correct_current_dir();
+
if args.raw {
let Ok(account_ids) = user_dir.account_ids() else {
return;