Support committing multiple files

This commit is contained in:
Patrick Lühne 2018-09-17 17:45:30 +02:00
parent 19c51dc358
commit dd333768b0
Signed by: patrick
GPG Key ID: 05F3611E97A70ABF
2 changed files with 24 additions and 8 deletions

View File

@ -1,7 +1,7 @@
extern crate benchmark_repository; extern crate benchmark_repository;
extern crate pretty_env_logger; extern crate pretty_env_logger;
use benchmark_repository::BenchmarkRepository; use benchmark_repository::{BenchmarkRepository, TargetPath};
use std::path::Path; use std::path::Path;
@ -10,5 +10,12 @@ fn main()
pretty_env_logger::init(); pretty_env_logger::init();
let benchmark_repository = BenchmarkRepository::new("git@git.luehne.de:patrick/tplp-planning-benchmark.git", Path::new("storage"), "git", "Potassco Bot", "bot@potassco.org"); let benchmark_repository = BenchmarkRepository::new("git@git.luehne.de:patrick/tplp-planning-benchmark.git", Path::new("storage"), "git", "Potassco Bot", "bot@potassco.org");
benchmark_repository.commit_file(Path::new("/tmp/test"), Path::new("test-new/fourth"), "test-results");
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");
} }

View File

@ -20,6 +20,12 @@ pub struct BenchmarkRepository
user_email: String, user_email: String,
} }
pub struct TargetPath<'a>
{
pub source: &'a Path,
pub destination: &'a Path,
}
impl BenchmarkRepository impl BenchmarkRepository
{ {
fn progress_bar_style() -> ProgressStyle fn progress_bar_style() -> ProgressStyle
@ -230,7 +236,7 @@ impl BenchmarkRepository
} }
} }
pub fn commit_file(&self, file_path: &Path, result_file_path: &Path, branch_name: &str) pub fn commit_files(&self, file_paths: &[TargetPath], branch_name: &str)
{ {
let tip_reference_name = format!("refs/remotes/origin/{}", branch_name); let tip_reference_name = format!("refs/remotes/origin/{}", branch_name);
let tip_reference = match self.repository.find_reference(&tip_reference_name) let tip_reference = match self.repository.find_reference(&tip_reference_name)
@ -257,11 +263,14 @@ impl BenchmarkRepository
Err(error) => panic!("Could not read parent tree into index: {}", error), Err(error) => panic!("Could not read parent tree into index: {}", error),
}; };
let index_entry = self.read_file_as_index_entry(file_path, result_file_path); for target_path in file_paths
{
let index_entry = self.read_file_as_index_entry(target_path.source, target_path.destination);
if let Err(error) = index.add(&index_entry) if let Err(error) = index.add(&index_entry)
{ {
panic!("Could not add index entry: {}", error); panic!("Could not add index entry for “{}”: {}", target_path.destination.display(), error);
}
} }
let tree_object_id = match index.write_tree_to(&self.repository) let tree_object_id = match index.write_tree_to(&self.repository)
@ -279,7 +288,7 @@ impl BenchmarkRepository
info!("Created tree object “{}”", tree_object_id); info!("Created tree object “{}”", tree_object_id);
let signature = Signature::now(&self.user_name, &self.user_email).expect("Could not create signature"); let signature = Signature::now(&self.user_name, &self.user_email).expect("Could not create signature");
let message = format!("Add file{}", result_file_path.display()); let message = format!("Add files");
let parent = match tip_reference.peel_to_commit() let parent = match tip_reference.peel_to_commit()
{ {