pray-core 1.22.0

Core library for Prayfile, the package manager for the language placed before inference
Documentation
use crate::resolve_git::finalize_git_repository;
use crate::resolve_git_legacy::quarantine_legacy_project_git_checkouts;
use crate::resolve_git_materialize::materialize_catalog_tree;
use crate::resolve_git_paths::git_source_cache_directory_with_subdir;
use crate::resolve_git_store::ensure_global_git_db;
use crate::PrayResult;
use std::path::{Path, PathBuf};

pub(crate) fn ensure_git_repository(
    project_root: &Path,
    clone_url: &str,
    refresh: bool,
    pinned_revision: Option<&str>,
    sparse_subdir: Option<&str>,
    offline: bool,
) -> PrayResult<(PathBuf, String)> {
    let (db, revision) =
        ensure_global_git_db(clone_url, pinned_revision, refresh, offline, project_root)?;
    quarantine_legacy_project_git_checkouts(project_root, clone_url)?;
    let catalog = git_source_cache_directory_with_subdir(project_root, clone_url, sparse_subdir);
    // Gate the pinned revision before unpacking catalog bytes onto disk.
    finalize_git_repository(clone_url, &db, catalog.clone(), revision.clone())?;
    materialize_catalog_tree(&db, &catalog, &revision, sparse_subdir, refresh, offline)?;
    Ok((catalog, revision))
}