From 7187ad66794371fd70da7abcd3444bc235187a35 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Wed, 10 Sep 2025 18:19:41 +0200 Subject: [PATCH] Avoid initializing nested Git repository Previously a Git repository was initialized if a Cargo workspace was detected. However, it's also possible for users to initialize rustlings in an existing Git repository that doesn't contain a Cargo workspace. In that case, it's still undesirable to initialize a nested Git repository for rustlings. We therefore call Git directly to determine if rustlings is being initialized in an existing Git repository. --- src/init.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/init.rs b/src/init.rs index 68011ed4e9..3beeff7e94 100644 --- a/src/init.rs +++ b/src/init.rs @@ -28,6 +28,15 @@ pub fn init() -> Result<()> { bail!(RUSTLINGS_DIR_ALREADY_EXISTS_ERR); } + let is_inside_git_repository = Command::new("git") + .arg("rev-parse") + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + // in case of error, assume not in Git repository + .is_ok_and(|status| status.success()); + let locate_project_output = Command::new("cargo") .arg("locate-project") .arg("-q") @@ -58,7 +67,7 @@ pub fn init() -> Result<()> { } let mut stdout = io::stdout().lock(); - let mut init_git = true; + let mut init_git = !is_inside_git_repository; if locate_project_output.status.success() { if Path::new("exercises").exists() && Path::new("solutions").exists() {