Mostly improving readability, and removed Repository::find_root_with_dot_dir()
as it seemed unnecessarily specific.
QRFQ24WRFJN3W3SMXC2MHP6RSITUW6O2MHOE7R22RGXGK5XAPVVAC
GKSVBEUW7Q2M4QPKPHOUPGP36AMXMJVGX7KCSNYXEFQZOURGBSMQC
EFY2CITFEAIGNPBPNXY3RV4LONYYSXKBNWPVPHKTCHCFK2OBQ5AAC
4RV7T4SRYIQLBW3EZFWBO5G65QAVG2GHPI4KMDDZERCX65KQWSPQC
CCLLB7OIFNFYJZTG3UCI7536TOCWSCSXR67VELSB466R24WLJSDAC
SXEYMYF7P4RZMZ46WPL4IZUTSQ2ATBWYZX7QNVMS3SGOYXYOHAGQC
YN63NUZO4LVJ7XPMURDULTXBVJKW5MVCTZ24R7Z52QMHO3HPDUVQC
L4JXJHWXYNCL4QGJXNKKTOKKTAXKKXBJUUY7HFZGEUZ5A2V5H34QC
A3RM526Y7LUXNYW4TL56YKQ5GVOK2R5D7JJVTSQ6TT5MEXIR6YAAC
JL4WKA5PBKXRNAMETYO4I52QKASQ3COYHH2JKGA7W5YLIRZZH53AC
EUZFFJSOWV4PXDFFPDAFBHFUUMOFEU6ST7JH57YYRRR2SEOXLN6QC
I24UEJQLCH2SOXA4UHIYWTRDCHSOPU7AFTRUOTX7HZIAV4AZKYEQC
TYAKEAJLABCZQDYAI4YBGIJNQ7HJS4DVULEGPCZOGJPJUYYNR6TAC
fn find_root_(cur: Option<&Path>, dot_dir: &str) -> Result<PathBuf, anyhow::Error> {
let mut cur = if let Some(cur) = cur {
cur.to_path_buf()
} else {
current_dir()?
fn find_repository_root(
directory_override: Option<&Path>,
dot_dir: &str,
) -> Result<(PathBuf, PathBuf), anyhow::Error> {
let starting_directory = match directory_override {
Some(starting_directory) => starting_directory.to_path_buf(),
None => std::env::current_dir()?,
cur.push(dot_dir);
loop {
debug!("{:?}", cur);
if std::fs::metadata(&cur).is_err() {
cur.pop();
if cur.pop() {
cur.push(DOT_DIR);
} else {
bail!("No Pijul repository found")
}
} else {
break;
let mut current_directory = starting_directory.as_path();
while let Some(parent) = current_directory.parent() {
let candidate_path = current_directory.join(dot_dir);
debug!("Checking if `{candidate_path:?}` exists");
if candidate_path.exists() && candidate_path.is_dir() {
return Ok((current_directory.to_path_buf(), candidate_path));
Self::find_root_with_dot_dir(cur, DOT_DIR)
}
let (working_copy_directory, dot_directory) = Self::find_repository_root(cur, DOT_DIR)?;
let pristine_dir = dot_directory.join(PRISTINE_DIR);
let changes_dir = dot_directory.join(CHANGES_DIR);
let config_path = dot_directory.join(CONFIG_FILE);
pub fn find_root_with_dot_dir(
cur: Option<&Path>,
dot_dir: &str,
) -> Result<Self, anyhow::Error> {
let cur = Self::find_root_(cur, dot_dir)?;
let pristine_dir = cur.join(PRISTINE_DIR);
let changes_dir = cur.join(CHANGES_DIR);
let working_copy_dir = cur.parent().unwrap();
let config_path = cur.join(CONFIG_FILE);