#![cfg_attr(coverage_nightly, coverage(off))]
use super::{CommitEmbedder, CommitInfo, GitHistoryError, GitHistoryIndex};
use rusqlite::params;
#[derive(Debug, Clone, Default)]
pub struct GitSearchOptions {
pub limit: usize,
pub author_email: Option<String>,
pub since_timestamp: Option<i64>,
pub until_timestamp: Option<i64>,
pub only_fixes: bool,
pub only_features: bool,
pub file_path: Option<String>,
}
#[derive(Debug, Clone)]
pub struct GitSearchResult {
pub commit: CommitInfo,
pub relevance_score: f32,
pub files: Vec<String>,
}
pub struct GitHistorySearchEngine<'a> {
index: &'a GitHistoryIndex,
embedder: CommitEmbedder,
}
fn cosine_similarity(a: &[f32], b: &[f32]) -> f32 {
batuta_common::math::cosine_similarity_f32(a, b)
}
include!("search_engine_queries.rs");
include!("search_engine_tests.rs");