Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2a5db88

Browse files
authored
Merge pull request #2513 from GitoxideLabs/v2-diff
Use imara-diff-v2 by default
2 parents e6c10bb + e4f380e commit 2a5db88

83 files changed

Lines changed: 1139 additions & 3815 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 5 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,6 @@ members = [
242242
"gix-object",
243243
"gix-glob",
244244
"gix-diff",
245-
"gix-imara-diff-01",
246245
"gix-imara-diff",
247246
"gix-merge",
248247
"gix-date",

gitoxide-core/src/organize.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub fn find_git_repository_workdirs(
101101
// Only return paths which are repositories are further participating in the traversal
102102
// Don't let bare repositories cause siblings to be pruned.
103103
if found_any_repo && !found_bare_repo {
104-
siblings.retain(|e| e.as_ref().map(|e| e.client_state.info.is_some()).unwrap_or(false));
104+
siblings.retain(|e| e.as_ref().is_ok_and(|e| e.client_state.info.is_some()));
105105
}
106106
})
107107
.into_iter()

gitoxide-core/src/query/engine/command.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ impl query::Engine {
9898
}
9999
}
100100

101-
info.sort_by(|a, b| a.id.cmp(&b.id));
101+
info.sort_by_key(|a| a.id);
102102
let max_diff_lines = info
103103
.iter()
104104
.map(|i| i.diff.map_or(0, |d| d.lines_removed + d.lines_added))

gitoxide-core/src/query/engine/update.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -256,17 +256,16 @@ pub fn update(
256256
let tokens = prep.interned_input();
257257
match prep.operation {
258258
Operation::InternalDiff { algorithm } => {
259-
let counts = gix::diff::blob::diff(
260-
algorithm,
261-
&tokens,
262-
gix::diff::blob::sink::Counter::default(
263-
),
259+
let diff = gix::diff::blob::Diff::compute(
260+
algorithm, &tokens,
264261
);
265-
nl += counts.insertions as usize
266-
+ counts.removals as usize;
262+
let added = diff.count_additions() as usize;
263+
let removed =
264+
diff.count_removals() as usize;
265+
nl += added + removed;
267266
let lines = LineStats {
268-
added: counts.insertions as usize,
269-
removed: counts.removals as usize,
267+
added,
268+
removed,
270269
before: tokens.before.len(),
271270
after: tokens.after.len(),
272271
};
@@ -312,8 +311,8 @@ pub fn update(
312311
lines: diff.map(|d| LineStats {
313312
added: d.insertions as usize,
314313
removed: d.removals as usize,
315-
before: d.before as usize,
316-
after: d.after as usize,
314+
before: d.before,
315+
after: d.after,
317316
}),
318317
});
319318
}

gitoxide-core/src/repository/diff.rs

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use anyhow::Context;
2-
use gix::diff::blob::unified_diff::ConsumeBinaryHunk;
32
use gix::{
43
bstr::{BString, ByteSlice},
5-
diff::blob::{intern::TokenSource, unified_diff::ContextSize, UnifiedDiff},
64
objs::tree::EntryMode,
75
odb::store::RefreshMode,
86
prelude::ObjectIdExt,
@@ -202,24 +200,24 @@ pub fn file(
202200
}
203201
};
204202

205-
let interner = gix::diff::blob::intern::InternedInput::new(
203+
let interner = gix::diff::blob::InternedInput::new(
206204
tokens_for_diffing(outcome.old.data.as_slice().unwrap_or_default()),
207205
tokens_for_diffing(outcome.new.data.as_slice().unwrap_or_default()),
208206
);
209207

210-
let unified_diff = UnifiedDiff::new(
208+
let diff = gix::diff::blob::diff_with_slider_heuristics(algorithm, &interner);
209+
let rendered = gix::diff::blob::UnifiedDiff::new(
210+
&diff,
211211
&interner,
212-
ConsumeBinaryHunk::new(BString::default(), "\n"),
213-
ContextSize::symmetrical(3),
214-
);
215-
216-
let unified_diff = gix::diff::blob::diff(algorithm, &interner, unified_diff)?;
217-
218-
out.write_all(unified_diff.as_bytes())?;
212+
gix::diff::blob::unified_diff::ConsumeBinaryHunk::new(BString::default(), "\n"),
213+
gix::diff::blob::unified_diff::ContextSize::symmetrical(3),
214+
)
215+
.consume()?;
216+
write!(out, "{rendered}")?;
219217

220218
Ok(())
221219
}
222220

223-
pub(crate) fn tokens_for_diffing(data: &[u8]) -> impl TokenSource<Token = &[u8]> {
224-
gix::diff::blob::sources::byte_lines(data)
221+
pub(crate) fn tokens_for_diffing(data: &[u8]) -> gix::diff::blob::platform::resource::ByteLinesWithoutTerminator<'_> {
222+
gix::diff::blob::platform::resource::ByteLinesWithoutTerminator::new(data)
225223
}

gitoxide-core/src/repository/exclude.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub fn query(
3838
let mut cache = repo.excludes(
3939
&index,
4040
Some(gix::ignore::Search::from_overrides(
41-
overrides.into_iter(),
41+
overrides,
4242
repo.ignore_pattern_parser()?,
4343
)),
4444
Default::default(),

gix-attributes/tests/search/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,7 @@ mod baseline {
309309

310310
let mut buf = Vec::new();
311311
let mut collection = MetadataCollection::default();
312-
let group =
313-
gix_attributes::Search::new_globals([base.join("user.attributes")].into_iter(), &mut buf, &mut collection)?;
312+
let group = gix_attributes::Search::new_globals([base.join("user.attributes")], &mut buf, &mut collection)?;
314313

315314
Ok((group, collection, base, input))
316315
}

gix-blame/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ gix-commitgraph = { version = "^0.35.0", path = "../gix-commitgraph" }
2929
gix-revwalk = { version = "^0.29.0", path = "../gix-revwalk" }
3030
gix-trace = { version = "^0.1.18", path = "../gix-trace" }
3131
gix-date = { version = "^0.15.1", path = "../gix-date" }
32-
gix-diff = { version = "^0.61.0", path = "../gix-diff", default-features = false, features = ["blob", "blob-experimental"] }
32+
gix-diff = { version = "^0.61.0", path = "../gix-diff", default-features = false, features = ["blob"] }
3333
gix-object = { version = "^0.58.0", path = "../gix-object" }
3434
gix-hash = { version = "^0.23.0", path = "../gix-hash" }
3535
gix-worktree = { version = "^0.50.0", path = "../gix-worktree", default-features = false, features = ["attributes"] }

gix-blame/src/file/function.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::num::NonZeroU32;
22

3-
use gix_diff::{blob::intern::TokenSource, tree::Visit};
3+
use gix_diff::{blob::TokenSource, tree::Visit};
44
use gix_hash::ObjectId;
55
use gix_object::{
66
bstr::{BStr, BString},
@@ -204,13 +204,13 @@ pub fn file(
204204
#[cfg(debug_assertions)]
205205
{
206206
let source_blob = odb.find_blob(&entry_id, &mut buf)?.data.to_vec();
207-
let mut source_interner = gix_diff::blob::intern::Interner::new(source_blob.len() / 100);
207+
let mut source_interner = gix_diff::blob::Interner::new(source_blob.len() / 100);
208208
let source_lines_as_tokens: Vec<_> = tokens_for_diffing(&source_blob)
209209
.tokenize()
210210
.map(|token| source_interner.intern(token))
211211
.collect();
212212

213-
let mut blamed_interner = gix_diff::blob::intern::Interner::new(blamed_file_blob.len() / 100);
213+
let mut blamed_interner = gix_diff::blob::Interner::new(blamed_file_blob.len() / 100);
214214
let blamed_lines_as_tokens: Vec<_> = tokens_for_diffing(&blamed_file_blob)
215215
.tokenize()
216216
.map(|token| blamed_interner.intern(token))
@@ -407,7 +407,7 @@ pub fn file(
407407

408408
// I don’t know yet whether it would make sense to use a data structure instead that preserves
409409
// order on insertion.
410-
out.sort_by(|a, b| a.start_in_blamed_file.cmp(&b.start_in_blamed_file));
410+
out.sort_by_key(|a| a.start_in_blamed_file);
411411
Ok(Outcome {
412412
entries: coalesce_blame_entries(out),
413413
blob: blamed_file_blob,
@@ -758,7 +758,7 @@ fn blob_changes(
758758
diff_algorithm: gix_diff::blob::Algorithm,
759759
stats: &mut Statistics,
760760
) -> Result<Vec<Change>, Error> {
761-
use gix_diff::blob::v2::Hunk;
761+
use gix_diff::blob::Hunk;
762762

763763
resource_cache.set_resource(
764764
previous_oid,
@@ -776,17 +776,12 @@ fn blob_changes(
776776
)?;
777777

778778
let outcome = resource_cache.prepare_diff()?;
779-
let input = gix_diff::blob::v2::InternedInput::new(
779+
let input = gix_diff::blob::InternedInput::new(
780780
outcome.old.data.as_slice().unwrap_or_default(),
781781
outcome.new.data.as_slice().unwrap_or_default(),
782782
);
783783

784-
let diff_algorithm: gix_diff::blob::v2::Algorithm = match diff_algorithm {
785-
gix_diff::blob::Algorithm::Histogram => gix_diff::blob::v2::Algorithm::Histogram,
786-
gix_diff::blob::Algorithm::Myers => gix_diff::blob::v2::Algorithm::Myers,
787-
gix_diff::blob::Algorithm::MyersMinimal => gix_diff::blob::v2::Algorithm::MyersMinimal,
788-
};
789-
let mut diff = gix_diff::blob::v2::Diff::compute(diff_algorithm, &input);
784+
let mut diff = gix_diff::blob::Diff::compute(diff_algorithm, &input);
790785
diff.postprocess_lines(&input);
791786

792787
let mut last_seen_after_end = 0;
@@ -882,5 +877,5 @@ fn collect_parents(
882877
/// Return an iterator over tokens for use in diffing. These are usually lines, but it's important
883878
/// to unify them so the later access shows the right thing.
884879
pub(crate) fn tokens_for_diffing(data: &[u8]) -> impl TokenSource<Token = &[u8]> {
885-
gix_diff::blob::sources::byte_lines_with_terminator(data)
880+
gix_diff::blob::sources::byte_lines(data)
886881
}

0 commit comments

Comments
 (0)