blob: 244e2f45e6c59384770a6e6b15dfe3852c5dad73 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
//! Wrappers for libgit2
pub mod log;
pub mod tree;
use git2::{self, Repository};
use log::CommitGraph;
use tree::Tree;
/// A top-level wrapper API for all libgit2 functions
pub struct Repo {
inner: Repository,
commits: Option<CommitGraph>,
rev: Option<String>,
}
impl Repo {
pub(crate) fn new(path: &str) -> Self {
Self {
inner: Repository::open(path).expect(&format!("`{}` is not a valid git repo", path)),
commits: None,
rev: None,
}
}
pub(self) fn get_inner(&self) -> &Repository {
&self.inner
}
pub(self) fn get_tree<'r>(&'r self, rev: &str) -> git2::Tree<'r> {
self.inner
.revparse_single(rev)
.unwrap()
.peel_to_tree()
.unwrap()
}
pub(crate) fn clear_cache(&mut self) {
self.rev = None;
self.commits = None;
}
/// Load and cache commits for a specific rev
pub(crate) fn load_commits(&mut self, rev: String) {
self.rev = Some(rev.clone());
self.commits = Some(log::create_commit_log(rev, &self));
}
/// Load the tree of files for the current rev
///
/// Will fail if no rev was previously cached
pub(crate) fn get_file_tree(&self) -> Tree {
tree::parse_tree(
self.get_tree(self.rev.as_ref().unwrap().as_str()),
self.get_inner(),
)
}
}
|