Refactor style of `pijul_repository::Repository::find_root()`

finchie
Jul 22, 2025, 6:57 AM
QRFQ24WRFJN3W3SMXC2MHP6RSITUW6O2MHOE7R22RGXGK5XAPVVAC

Dependencies

  • [2] GKSVBEUW Refactor Repository constructors to take Option<&Path> instead of Option<PathBuf>
  • [3] EFY2CITF Make `pijul_repository::max_files()` infallible
  • [4] BZSC7VMY address clippy lints
  • [5] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [6] Q7CHNDXN Init repo with default .ignore file
  • [7] TYAKEAJL A better estimate of the maximum number of open patches we can keep (Unix-only at the moment)
  • [8] 4RV7T4SR Migrate from `pijul::config` to `pijul-config`
  • [9] CCLLB7OI Upgrading to Sanakirja 0.15 + version bump
  • [10] DDJO7X2P Remove dependency on `num_cpus`
  • [11] JL4WKA5P Implement the Sanakirja concurrency model in a cross-process way
  • [12] 5OGOE4VW Store the current channel in the pristine
  • [13] L4JXJHWX pijul/*: reorganize imports and remove extern crate
  • [14] I24UEJQL Various post-fire fixes
  • [15] GYGLQPVX Migrate from `pijul::current_dir` to `std::env::current_dir`
  • [16] H72JG6HL Init feature; specific .ignore configs
  • [17] EUZFFJSO Updating Pijul with the latest changes in Libpijul
  • [18] YN63NUZO Sanakirja 1.0
  • [19] A3RM526Y Integrating identity malleability

Change contents

  • replacement in pijul-repository/src/lib.rs at line 7
    [4.53][4.7666:7684](),[4.5752][4.7666:7684](),[4.21541][4.7666:7684]()
    use anyhow::bail;
    [4.53]
    [4.0]
    use anyhow::{anyhow, bail};
  • replacement in pijul-repository/src/lib.rs at line 58
    [4.22013][2.56:145](),[2.145][4.22375:22422](),[4.22375][4.22375:22422](),[4.22422][2.146:176](),[2.176][4.22438:22482](),[4.22438][4.22438:22482]()
    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()?
    [4.22013]
    [4.22482]
    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()?,
  • replacement in pijul-repository/src/lib.rs at line 66
    [4.22493][4.22493:22740](),[4.22740][4.7720:7775](),[4.7775][4.22798:22860](),[4.22798][4.22798:22860]()
    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;
    [4.22493]
    [4.22860]
    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));
  • edit in pijul-repository/src/lib.rs at line 75
    [4.22874]
    [4.22874]
    current_directory = parent;
  • replacement in pijul-repository/src/lib.rs at line 78
    [4.22884][4.22884:22900]()
    Ok(cur)
    [4.22884]
    [4.22900]
    Err(anyhow!(
    "No Pijul repository found, starting from `{starting_directory:?}`"
    ))
  • replacement in pijul-repository/src/lib.rs at line 85
    [2.251][4.76:127](),[4.76][4.76:127](),[4.127][4.23034:23040](),[4.1067][4.23034:23040](),[4.5810][4.23034:23040](),[4.23034][4.23034:23040]()
    Self::find_root_with_dot_dir(cur, DOT_DIR)
    }
    [2.251]
    [4.23040]
    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);
  • edit in pijul-repository/src/lib.rs at line 90
    [4.23041][4.128:163](),[4.163][2.252:280](),[2.280][4.23106:23129](),[4.23106][4.23106:23129](),[4.1303][4.23129:23219](),[4.23129][4.23129:23219](),[4.23219][2.281:435](),[2.435][4.23466:23515](),[4.23466][4.23466:23515]()
    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);
  • replacement in pijul-repository/src/lib.rs at line 99
    [4.23859][4.23859:23883]()
    Ok(Repository {
    [4.23859]
    [4.5811]
    Ok(Self {
  • replacement in pijul-repository/src/lib.rs at line 103
    [4.156][4.24052:24087](),[4.341][4.24052:24087](),[4.24052][4.24052:24087]()
    &working_copy_dir,
    [4.156]
    [4.157]
    &working_copy_directory,
  • replacement in pijul-repository/src/lib.rs at line 106
    [4.386][4.386:421]()
    &working_copy_dir,
    [4.386]
    [3.455]
    &working_copy_directory,
  • replacement in pijul-repository/src/lib.rs at line 110
    [4.24220][2.436:486]()
    path: working_copy_dir.to_path_buf(),
    [4.24220]
    [4.24256]
    path: working_copy_directory,