diff --git a/benchmark-new/benchmark_repository/examples/test.rs b/benchmark-new/benchmark_repository/examples/test.rs index 703db2432..18ce99028 100644 --- a/benchmark-new/benchmark_repository/examples/test.rs +++ b/benchmark-new/benchmark_repository/examples/test.rs @@ -3,6 +3,7 @@ extern crate pretty_env_logger; use benchmark_repository::{BenchmarkRepository, TargetPath}; +use std::io::{self, copy}; use std::path::Path; fn main() @@ -11,11 +12,15 @@ fn main() let benchmark_repository = BenchmarkRepository::new("git@git.luehne.de:patrick/tplp-planning-benchmark.git", Path::new("storage"), "git", "Potassco Bot", "bot@potassco.org"); - let files = vec! + /*let files = vec! [ TargetPath{source: &Path::new("/tmp/test"), destination: &Path::new("foobar/test")}, TargetPath{source: &Path::new("/tmp/test2"), destination: &Path::new("foobar/test-2")}, ]; - benchmark_repository.commit_files(&files[..], "test-results"); + benchmark_repository.commit_files(&files[..], "test-results");*/ + + let mut file = benchmark_repository.read_file(Path::new("configurations.yml"), "test-config").unwrap(); + + copy(&mut file, &mut io::stdout()); } diff --git a/benchmark-new/benchmark_repository/src/lib.rs b/benchmark-new/benchmark_repository/src/lib.rs index 0a873d923..784ee3b38 100644 --- a/benchmark-new/benchmark_repository/src/lib.rs +++ b/benchmark-new/benchmark_repository/src/lib.rs @@ -7,6 +7,7 @@ extern crate indicatif; use git2::{Cred, Error, FetchOptions, Index, IndexEntry, IndexTime, Progress, PushOptions, RemoteCallbacks, ResetType, Repository, Signature, TreeBuilder}; use git2::build::{CheckoutBuilder, RepoBuilder}; use std::fs::read; +use std::io::Cursor; use std::path::Path; use std::string::String; use std::str; @@ -326,6 +327,36 @@ impl BenchmarkRepository let mut remote = self.repository.find_remote("origin").expect(""); remote.push(&[&push_refspec], Some(&mut push_options)).expect("couldn’t push"); } + + pub fn read_file(&self, file_path: &Path, branch_name: &str) -> Option>> + { + let tip_reference_name = format!("refs/remotes/origin/{}", branch_name); + let tip_reference = match self.repository.find_reference(&tip_reference_name) + { + Ok(value) => value, + Err(error) => panic!("Could not find reference “{}”: {}", tip_reference_name, error), + }; + + let tree = match tip_reference.peel_to_tree() + { + Ok(value) => value, + Err(error) => panic!("Could not peel reference to tree: {}", error), + }; + + let object_id = match tree.get_path(file_path) + { + Ok(tree_entry) => tree_entry.id(), + Err(error) => return None, + }; + + let blob = match self.repository.find_blob(object_id) + { + Ok(blob) => blob, + Err(error) => return None, + }; + + Some(Cursor::new(blob.content().to_owned())) + } } #[cfg(test)]