Skip to content

Commit 915c43b

Browse files
committed
Don't depend on gix-odb
1 parent 3f95cd4 commit 915c43b

File tree

3 files changed

+35
-18
lines changed

3 files changed

+35
-18
lines changed

gix-blame/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ gix-hash = { version = "^0.14.2", path = "../gix-hash" }
2020
gix-worktree = { version = "^0.36.0", path = "../gix-worktree", default-features = false, features = ["attributes"] }
2121

2222
# TODO: remove dependencies below this comment by abstracting them away, or passing 'big' types as argument
23-
gix-odb = { version = "^0.63.0", path = "../gix-odb" }
2423
gix-ref = { version = "^0.47.0", path = "../gix-ref" }
2524
gix-traverse = { version = "^0.41.0", path = "../gix-traverse" }
2625
gix-fs = { version = "^0.11.3", path = "../gix-fs" }
2726
gix-index = { version = "^0.35.0", path = "../gix-index" }
2827
gix-filter = { version = "^0.13.0", path = "../gix-filter" }
2928

3029
[dev-dependencies]
30+
gix-odb = { version = "^0.63.0", path = "../gix-odb" }
3131
gix-testtools = { path = "../tests/tools" }

gix-blame/src/lib.rs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::{
1010
use gix_diff::blob::Sink;
1111
use gix_hash::ObjectId;
1212
use gix_object::FindExt;
13-
use gix_ref::{bstr::BStr, file::ReferenceExt, store::WriteReflog};
13+
use gix_ref::bstr::BStr;
1414

1515
#[derive(Clone, Copy, Debug, PartialEq)]
1616
pub enum Offset {
@@ -641,7 +641,12 @@ fn coalesce_blame_entries(lines_blamed: Vec<BlameEntry>) -> Vec<BlameEntry> {
641641
}
642642

643643
// TODO: do not instantiate anything, get everything passed as argument.
644-
pub fn blame_file(worktree_path: PathBuf, file_path: &BStr) -> Vec<BlameEntry> {
644+
pub fn blame_file<T: gix_object::Find + gix_object::FindHeader>(
645+
odb: T,
646+
start_id: ObjectId,
647+
worktree_path: PathBuf,
648+
file_path: &BStr,
649+
) -> Vec<BlameEntry> {
645650
// TODO
646651
// At a high level, what we want to do is the following:
647652
//
@@ -660,20 +665,7 @@ pub fn blame_file(worktree_path: PathBuf, file_path: &BStr) -> Vec<BlameEntry> {
660665
// <---><---><-----><-------><-----><------->
661666
// <---><---><-----><-------><-----><-><-><->
662667

663-
let store = gix_ref::file::Store::at(
664-
worktree_path.join(".git"),
665-
gix_ref::store::init::Options {
666-
write_reflog: WriteReflog::Disable,
667-
..Default::default()
668-
},
669-
);
670-
let odb = gix_odb::at(worktree_path.join(".git/objects")).unwrap();
671-
672-
let mut reference = gix_ref::file::Store::find(&store, "HEAD").unwrap();
673-
674-
let head_id = reference.peel_to_id_in_place(&store, &odb).unwrap();
675-
676-
let mut traverse = gix_traverse::commit::Simple::new(Some(head_id), &odb);
668+
let mut traverse = gix_traverse::commit::Simple::new(Some(start_id), &odb);
677669

678670
let git_dir = worktree_path.join(".git");
679671
let index = gix_index::File::at(git_dir.join("index"), gix_hash::Kind::Sha1, false, Default::default()).unwrap();

gix-blame/tests/blame.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,32 @@ macro_rules! mktest {
8585
($name:ident, $case:expr, $number_of_lines:literal) => {
8686
#[test]
8787
fn $name() {
88-
let lines_blamed = blame_file(fixture_path(), format!("{}.txt", $case).as_str().into());
88+
let worktree_path = fixture_path();
89+
90+
use gix_ref::store::WriteReflog;
91+
92+
let store = gix_ref::file::Store::at(
93+
worktree_path.join(".git"),
94+
gix_ref::store::init::Options {
95+
write_reflog: WriteReflog::Disable,
96+
..Default::default()
97+
},
98+
);
99+
let odb = gix_odb::at(worktree_path.join(".git/objects")).unwrap();
100+
101+
let mut reference = gix_ref::file::Store::find(&store, "HEAD").unwrap();
102+
103+
// Needed for `peel_to_id_in_place`.
104+
use gix_ref::file::ReferenceExt;
105+
106+
let head_id = reference.peel_to_id_in_place(&store, &odb).unwrap();
107+
108+
let lines_blamed = blame_file(
109+
odb,
110+
head_id,
111+
worktree_path,
112+
format!("{}.txt", $case).as_str().into(),
113+
);
89114

90115
assert_eq!(lines_blamed.len(), $number_of_lines);
91116

0 commit comments

Comments
 (0)