git working
This commit is contained in:
@@ -16,7 +16,8 @@ use crate::git::{GitTree, GitRepo, GitError};
|
||||
/// * `Result<(), Box<EvalAltResult>>` - Ok if registration was successful, Err otherwise
|
||||
pub fn register_git_module(engine: &mut Engine) -> Result<(), Box<EvalAltResult>> {
|
||||
// Register GitTree constructor
|
||||
engine.register_fn("gittree_new", git_tree_new);
|
||||
engine.register_type::<GitTree>();
|
||||
engine.register_fn("git_tree_new", git_tree_new);
|
||||
|
||||
// Register GitTree methods
|
||||
engine.register_fn("list", git_tree_list);
|
||||
@@ -24,6 +25,7 @@ pub fn register_git_module(engine: &mut Engine) -> Result<(), Box<EvalAltResult>
|
||||
engine.register_fn("get", git_tree_get);
|
||||
|
||||
// Register GitRepo methods
|
||||
engine.register_type::<GitRepo>();
|
||||
engine.register_fn("path", git_repo_path);
|
||||
engine.register_fn("has_changes", git_repo_has_changes);
|
||||
engine.register_fn("pull", git_repo_pull);
|
||||
@@ -72,11 +74,12 @@ pub fn git_tree_list(git_tree: &mut GitTree) -> Result<Array, Box<EvalAltResult>
|
||||
|
||||
/// Wrapper for GitTree::find
|
||||
///
|
||||
/// Finds repositories matching a pattern or partial path.
|
||||
/// Finds repositories matching a pattern and returns them as an array of GitRepo objects.
|
||||
/// Assumes the underlying GitTree::find Rust method now returns Result<Vec<GitRepo>, GitError>.
|
||||
pub fn git_tree_find(git_tree: &mut GitTree, pattern: &str) -> Result<Array, Box<EvalAltResult>> {
|
||||
let repos = git_error_to_rhai_error(git_tree.find(pattern))?;
|
||||
let repos: Vec<GitRepo> = git_error_to_rhai_error(git_tree.find(pattern))?;
|
||||
|
||||
// Convert Vec<String> to Rhai Array
|
||||
// Convert Vec<GitRepo> to Rhai Array
|
||||
let mut array = Array::new();
|
||||
for repo in repos {
|
||||
array.push(Dynamic::from(repo));
|
||||
@@ -87,17 +90,30 @@ pub fn git_tree_find(git_tree: &mut GitTree, pattern: &str) -> Result<Array, Box
|
||||
|
||||
/// Wrapper for GitTree::get
|
||||
///
|
||||
/// Gets one or more GitRepo objects based on a path pattern or URL.
|
||||
pub fn git_tree_get(git_tree: &mut GitTree, path_or_url: &str) -> Result<Array, Box<EvalAltResult>> {
|
||||
let repos = git_error_to_rhai_error(git_tree.get(path_or_url))?;
|
||||
|
||||
// Convert Vec<GitRepo> to Rhai Array
|
||||
let mut array = Array::new();
|
||||
for repo in repos {
|
||||
array.push(Dynamic::from(repo));
|
||||
/// Gets a single GitRepo object based on an exact name or URL.
|
||||
/// The underlying Rust GitTree::get method returns Result<Vec<GitRepo>, GitError>.
|
||||
/// This wrapper ensures that for Rhai, 'get' returns a single GitRepo or an error
|
||||
/// if zero or multiple repositories are found (for local names/patterns),
|
||||
/// or if a URL operation fails or unexpectedly yields not exactly one result.
|
||||
pub fn git_tree_get(git_tree: &mut GitTree, name_or_url: &str) -> Result<GitRepo, Box<EvalAltResult>> {
|
||||
let mut repos_vec: Vec<GitRepo> = git_error_to_rhai_error(git_tree.get(name_or_url))?;
|
||||
|
||||
match repos_vec.len() {
|
||||
1 => Ok(repos_vec.remove(0)), // Efficient for Vec of size 1, transfers ownership
|
||||
0 => Err(Box::new(EvalAltResult::ErrorRuntime(
|
||||
format!("Git error: Repository '{}' not found.", name_or_url).into(),
|
||||
rhai::Position::NONE,
|
||||
))),
|
||||
_ => Err(Box::new(EvalAltResult::ErrorRuntime(
|
||||
format!(
|
||||
"Git error: Multiple repositories ({}) found matching '{}'. Use find() for patterns or provide a more specific name for get().",
|
||||
repos_vec.len(),
|
||||
name_or_url
|
||||
)
|
||||
.into(),
|
||||
rhai::Position::NONE,
|
||||
))),
|
||||
}
|
||||
|
||||
Ok(array)
|
||||
}
|
||||
|
||||
//
|
||||
|
@@ -6,9 +6,7 @@ use rhai::{Engine, EvalAltResult, Array, Map, Position};
|
||||
use std::collections::HashMap;
|
||||
use crate::text::{
|
||||
TextReplacer, TextReplacerBuilder,
|
||||
TemplateBuilder,
|
||||
dedent, prefix,
|
||||
name_fix, path_fix
|
||||
TemplateBuilder
|
||||
};
|
||||
|
||||
/// Register Text module functions with the Rhai engine
|
||||
|
Reference in New Issue
Block a user