liboxen 0.48.0

Oxen is a fast, unstructured data version control, to help version large machine learning datasets written in Rust.
Documentation
//! # oxen config
//!
//! Configuration commands for Oxen
//!

use crate::error::OxenError;
use crate::model::{LocalRepository, Remote};
use crate::opts::StorageOpts;

/// # Set the remote for a repository
/// Tells the CLI where to push the changes to
pub fn set_remote(repo: &mut LocalRepository, name: &str, url: &str) -> Result<Remote, OxenError> {
    if url::Url::parse(url).is_err() {
        return Err(OxenError::invalid_set_remote_url(url));
    }

    if repo.is_remote_mode() {
        return Err(OxenError::basic_str(
            "Error: Cannot change remote of remote-mode repos",
        ));
    }

    let remote = repo.set_remote(name, url);
    repo.save()?;
    Ok(remote)
}

/// # Remove the remote for a repository
/// If you added a remote you no longer want, can remove it by supplying the name
pub fn delete_remote(repo: &mut LocalRepository, name: &str) -> Result<(), OxenError> {
    if repo.is_remote_mode() {
        return Err(OxenError::basic_str(
            "Error: Cannot delete from remote of remote-mode repos",
        ));
    }

    repo.delete_remote(name);
    repo.save()?;
    Ok(())
}

/// # Set the version store location for a repository
/// Tells the CLI where to save version files
pub async fn set_version_store(
    repo: &mut LocalRepository,
    opts: &StorageOpts,
) -> Result<(), OxenError> {
    repo.set_version_store(opts).await?;
    repo.save()?;

    Ok(())
}