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/client.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/client.rs')
-rw-r--r-- | src/diff_thread/client.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/diff_thread/client.rs b/src/diff_thread/client.rs new file mode 100644 index 0000000..dcc9cfe --- /dev/null +++ b/src/diff_thread/client.rs @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: EUPL-1.2 +// SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is> + +use super::{server, FileDiff, MakeDiff}; + +use std::sync::mpsc::{sync_channel, SyncSender}; +use std::thread::spawn; + +use git2::Repository; + +pub struct DiffThread<D: MakeDiff> { + sender: SyncSender<(D, SyncSender<Result<FileDiff, git2::Error>>)>, +} + +impl<D: MakeDiff> DiffThread<D> { + pub fn new(repo: Repository) -> Self { + let (sender, receiver) = sync_channel(0); + + spawn(move || server::main(&repo, receiver)); + + Self { sender } + } + + pub fn diff_files(&self, diff_maker: D) -> impl Iterator<Item = Result<FileDiff, git2::Error>> { + let (sender, receiver) = sync_channel(2); + self.sender + .send((diff_maker, sender)) + .expect("sending to diff thread"); + receiver.into_iter() + } +} |