mirror of
https://github.com/MrBeanCpp/MIT.git
synced 2026-02-09 13:15:00 +08:00
47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
use std::{env, fs, io};
|
|
use crate::utils::util::ROOT_DIR;
|
|
|
|
/**
|
|
初始化mit仓库 创建.mit/objects .mit/refs/heads .mit/HEAD
|
|
<br>并设置 .mit 为隐藏文件夹
|
|
<br>无法重复初始化
|
|
*/
|
|
pub fn init() -> io::Result<()> {
|
|
let dir = env::current_dir()?;
|
|
let mit_dir = dir.join(ROOT_DIR);
|
|
if mit_dir.exists() {
|
|
println!("!Already a mit repo - [{}]", dir.display());
|
|
return Ok(());
|
|
}
|
|
|
|
let dirs = [
|
|
mit_dir.join("objects"),
|
|
mit_dir.join("refs/heads"),
|
|
];
|
|
// 创建 .git 目录和子目录
|
|
for dir in &dirs {
|
|
fs::create_dir_all(dir)?;
|
|
}
|
|
fs::write(mit_dir.join("HEAD"), "ref: refs/heads/master\n")?;
|
|
|
|
set_dir_hidden(&mit_dir.to_str().unwrap())?; // 设置目录隐藏 (跨平台)
|
|
println!("Initialized empty mit repository in {}", dir.display());
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(target_os = "windows")]
|
|
fn set_dir_hidden(dir: &str) -> io::Result<()> {
|
|
use std::process::Command;
|
|
Command::new("attrib")
|
|
.arg("+H")
|
|
.arg(dir)
|
|
.spawn()?
|
|
.wait()?; // 等待命令执行完成
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg( not(target_os = "windows"))]
|
|
fn set_dir_hidden(dir: &str) -> io::Result<()> { //类unix系统下'.'开头就已经是隐藏文件(夹)了
|
|
Ok(())
|
|
}
|