use std::collections::{HashMap, HashSet};
use std::path::PathBuf;
use crate::diff::{DiffLine, FileDiff};
use crate::limits::DiffMetrics;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct StackPosition {
pub current: usize,
pub total: usize,
pub head_count: usize,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum VcsBackend {
Git,
Jj,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum DiffBase {
#[default]
ForkPoint,
TrunkTip,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct UpstreamDivergence {
pub behind_count: usize,
pub upstream_files: HashSet<String>,
}
#[derive(Debug, Clone)]
pub struct ComparisonContext {
pub from_label: String,
pub to_label: String,
pub stack_position: Option<StackPosition>,
pub vcs_backend: VcsBackend,
pub bookmark_name: Option<String>,
pub divergence: Option<UpstreamDivergence>,
}
#[derive(Debug)]
pub struct RefreshResult {
pub files: Vec<FileDiff>,
pub lines: Vec<DiffLine>,
pub base_identifier: String,
pub base_label: Option<String>,
pub current_branch: Option<String>,
pub metrics: DiffMetrics,
pub file_links: HashMap<String, String>,
pub stack_position: Option<StackPosition>,
pub bookmark_name: Option<String>,
pub revision_id: Option<String>,
pub divergence: Option<UpstreamDivergence>,
}
pub struct VcsWatchPaths {
pub files: Vec<PathBuf>,
pub recursive_dirs: Vec<PathBuf>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum VcsEventType {
Internal,
RevisionChange,
Lock,
Source,
}