gitdataai/lib/git/cmd/diff/mod.rs
2026-05-30 01:38:40 +08:00

114 lines
2.6 KiB
Rust

use serde::{Deserialize, Serialize};
use crate::cmd::oid::ObjectId;
pub mod diff_index_to_tree;
pub mod diff_patch;
pub mod diff_stats;
pub mod diff_tree_to_tree;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum DiffDeltaStatus {
Unmodified,
Added,
Deleted,
Modified,
Renamed,
Copied,
Typechange,
Conflicted,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiffFile {
pub oid: Option<ObjectId>,
pub path: Option<String>,
pub size: u64,
pub is_binary: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiffHunk {
pub old_start: u32,
pub old_lines: u32,
pub new_start: u32,
pub new_lines: u32,
pub header: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiffDelta {
pub status: DiffDeltaStatus,
pub old_file: DiffFile,
pub new_file: DiffFile,
pub nfiles: u16,
pub hunks: Vec<DiffHunk>,
pub lines: Vec<DiffLine>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiffLine {
pub content: String,
pub origin: char,
pub old_lineno: Option<u32>,
pub new_lineno: Option<u32>,
pub num_lines: u32,
pub content_offset: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiffStats {
pub files_changed: usize,
pub insertions: usize,
pub deletions: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiffResult {
pub stats: DiffStats,
pub deltas: Vec<DiffDelta>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SideBySideChangeType {
Unchanged,
Added,
Removed,
Modified,
Empty,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SideBySideLine {
pub left_line_no: Option<u32>,
pub right_line_no: Option<u32>,
pub left_content: String,
pub right_content: String,
pub change_type: SideBySideChangeType,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SideBySideFile {
pub path: String,
pub additions: usize,
pub deletions: usize,
pub is_binary: bool,
pub is_rename: bool,
pub lines: Vec<SideBySideLine>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SideBySideDiffResult {
pub files: Vec<SideBySideFile>,
pub total_additions: usize,
pub total_deletions: usize,
}
#[derive(Debug, Clone, Default)]
pub struct DiffOptions {
pub context_lines: u32,
pub pathspec: Vec<String>,
pub ignore_whitespace: bool,
pub force_text: bool,
pub reverse: bool,
}