MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / find_repository_root_from

Function find_repository_root_from

atomic-cli/src/commands/mod.rs:280–309  ·  view source on GitHub ↗

Find the repository root starting from a specific path. Like [`find_repository_root`], but starts from the given path instead of the current working directory. # Arguments `start_path` - The path to start searching from # Returns The path to the repository root. # Errors Returns [`CliError::RepositoryNotFound`] if no `.atomic` directory is found. # Example ```rust,ignore let repo_root = f

(start_path: &Path)

Source from the content-addressed store, hash-verified

278/// let repo_root = find_repository_root_from("/home/user/project/src")?;
279/// ```
280pub fn find_repository_root_from(start_path: &Path) -> CliResult<PathBuf> {
281 let mut current = start_path.to_path_buf();
282
283 // Canonicalize if possible to handle symlinks correctly
284 if let Ok(canonical) = current.canonicalize() {
285 current = canonical;
286 }
287
288 loop {
289 let dot_dir = current.join(DOT_DIR);
290 if dot_dir.is_dir() {
291 return Ok(current);
292 }
293
294 // A sandbox working tree has no `.atomic/` of its own — it carries a
295 // pointer to the canonical graph. Treat the sandbox root as a valid
296 // repository root; `Repository::open*` resolves the pointer.
297 if current.join(SANDBOX_POINTER).is_file() {
298 return Ok(current);
299 }
300
301 // Move to parent directory
302 if !current.pop() {
303 // Reached the root without finding a repository
304 return Err(CliError::RepositoryNotFound {
305 searched_path: start_path.to_path_buf(),
306 });
307 }
308 }
309}
310
311/// Open a repository, optionally at a specific path.
312///

Callers 6

find_repository_rootFunction · 0.85
open_repositoryFunction · 0.85
runMethod · 0.85

Calls 2

is_dirMethod · 0.80
is_fileMethod · 0.45