From 94a23a6839f3d4632c5abed1cb8846e4d295383e Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Tue, 17 Aug 2021 19:22:05 +0000 Subject: Proof of concept --- src/diff_thread/mod.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/diff_thread/mod.rs (limited to 'src/diff_thread/mod.rs') diff --git a/src/diff_thread/mod.rs b/src/diff_thread/mod.rs new file mode 100644 index 0000000..9416509 --- /dev/null +++ b/src/diff_thread/mod.rs @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: EUPL-1.2 +// SPDX-FileCopyrightText: 2021 Alyssa Ross + +//! libgit2's diffing API gives us a callback whenever a file diff is ready, but +//! that's not very convenient for Rust code, because it can't be used as an +//! iterator. So we run the diff in a thread, and send the diff information we need +//! to the main thread over a channel. When the main thread is processing diff +//! information too slowly, we block the diff thread until the main thread catches +//! up. + +mod server; +mod client; + +pub use client::DiffThread; + +use std::path::PathBuf; + +use git2::{Repository, Diff, Delta}; + +pub trait MakeDiff: Send + 'static { + fn make_diff(self, _: &Repository) -> Result; +} + +/// `new_path` isn't included because it's not currently used in git-girf. +pub struct FileDiff { + pub status: Delta, + pub old_path: Option, +} -- cgit 1.4.1