diff options
author | Alyssa Ross <hi@alyssa.is> | 2021-08-17 19:22:05 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2021-08-17 19:22:05 +0000 |
commit | 94a23a6839f3d4632c5abed1cb8846e4d295383e (patch) | |
tree | fbebc5db3366f3fdc70238ca08fbd769838fd063 /src/diff_thread/server.rs | |
parent | 256ac9c8eb8775acd1f812ee4345e13926181f0e (diff) | |
download | git-girf-94a23a6839f3d4632c5abed1cb8846e4d295383e.tar git-girf-94a23a6839f3d4632c5abed1cb8846e4d295383e.tar.gz git-girf-94a23a6839f3d4632c5abed1cb8846e4d295383e.tar.bz2 git-girf-94a23a6839f3d4632c5abed1cb8846e4d295383e.tar.lz git-girf-94a23a6839f3d4632c5abed1cb8846e4d295383e.tar.xz git-girf-94a23a6839f3d4632c5abed1cb8846e4d295383e.tar.zst git-girf-94a23a6839f3d4632c5abed1cb8846e4d295383e.zip |
Proof of concept
Diffstat (limited to 'src/diff_thread/server.rs')
-rw-r--r-- | src/diff_thread/server.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/diff_thread/server.rs b/src/diff_thread/server.rs new file mode 100644 index 0000000..d6d43ab --- /dev/null +++ b/src/diff_thread/server.rs @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: EUPL-1.2 +// SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is> + +use super::{FileDiff, MakeDiff}; + +use std::sync::mpsc::{Receiver, SyncSender}; + +use git2::Repository; + +pub fn main( + repository: &Repository, + receiver: Receiver<(impl MakeDiff, SyncSender<Result<FileDiff, git2::Error>>)>, +) { + for (diff_maker, sender) in receiver { + let diff = match diff_maker.make_diff(&repository) { + Ok(diff) => diff, + Err(e) => { + let _ = sender.send(Err(e)); + return; + } + }; + + if let Err(e) = diff.foreach( + &mut |delta, _| { + let _ = sender.send(Ok(FileDiff { + status: delta.status(), + old_path: delta.old_file().path().map(Into::into), + })); + + true + }, + None, + None, + None, + ) { + let _ = sender.send(Err(e)); + } + } +} |