#[provable_contracts_macros::contract("pmat-core.yaml", equation = "path_exists")]
pub async fn git_clone(
url: &str,
target_dir: Option<&Path>,
_branch: Option<&str>,
_depth: Option<u32>,
) -> Result<PathBuf> {
Ok(target_dir
.map(std::path::Path::to_path_buf)
.unwrap_or_else(|| {
let repo_name = url
.split('/')
.next_back()
.unwrap_or("repo")
.trim_end_matches(".git");
PathBuf::from(repo_name)
}))
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "path_exists")]
pub async fn git_status(path: &Path) -> Result<Value> {
use crate::models::git_context::GitContext;
let git_context = GitContext::from_current_dir(path)?;
Ok(json!({
"status": "completed",
"message": "Git status retrieved successfully",
"git_status": {
"commit_sha": git_context.commit_sha.clone(),
"commit_sha_short": git_context.commit_sha_short.clone(),
"branch": git_context.branch.clone(),
"author_name": git_context.author_name.clone(),
"author_email": git_context.author_email.clone(),
"commit_timestamp": git_context.commit_timestamp.to_rfc3339(),
"commit_message": git_context.commit_message.clone(),
"tags": git_context.tags.clone(),
"parent_commits": git_context.parent_commits.clone(),
"remote_url": git_context.remote_url.clone(),
"is_clean": git_context.is_clean,
"uncommitted_files": git_context.uncommitted_files,
}
}))
}