Skip to content

Commit 8c84656

Browse files
committed
git_backend: clean up root tree parsing logic
This makes `extract_root_tree_from_commit()` match `extract_change_id_from_commit()`.
1 parent a95d908 commit 8c84656

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

lib/src/git_backend.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ use std::sync::MutexGuard;
3434
use std::time::SystemTime;
3535

3636
use async_trait::async_trait;
37-
use bstr::BStr;
3837
use futures::stream::BoxStream;
3938
use gix::bstr::BString;
4039
use gix::objs::CommitRefIter;
@@ -533,8 +532,14 @@ fn gix_open_opts_from_settings(settings: &UserSettings) -> gix::open::Options {
533532
.strict_config(true)
534533
}
535534

536-
/// Parses the `jj:trees` header value.
537-
fn root_tree_from_git_extra_header(value: &BStr) -> Result<Merge<TreeId>, ()> {
535+
/// Parses the `jj:trees` header value if present, otherwise returns the
536+
/// resolved tree ID from Git.
537+
fn extract_root_tree_from_commit(commit: &gix::objs::CommitRef) -> Result<Merge<TreeId>, ()> {
538+
let Some(value) = commit.extra_headers().find(JJ_TREES_COMMIT_HEADER) else {
539+
let tree_id = TreeId::from_bytes(commit.tree().as_bytes());
540+
return Ok(Merge::resolved(tree_id));
541+
};
542+
538543
let mut tree_ids = SmallVec::new();
539544
for hex in value.split(|b| *b == b' ') {
540545
let tree_id = TreeId::try_from_hex(hex).ok_or(())?;
@@ -581,16 +586,8 @@ fn commit_from_git_without_root_parent(
581586
// (~March 2024) may have the root trees stored in the extra metadata table
582587
// instead. For such commits, we'll update the root tree later when we read the
583588
// extra metadata.
584-
let root_tree = commit
585-
.extra_headers()
586-
.find(JJ_TREES_COMMIT_HEADER)
587-
.map(root_tree_from_git_extra_header)
588-
.transpose()
589-
.map_err(|()| to_read_object_err("Invalid jj:trees header", id))?
590-
.unwrap_or_else(|| {
591-
let tree_id = TreeId::from_bytes(commit.tree().as_bytes());
592-
Merge::resolved(tree_id)
593-
});
589+
let root_tree = extract_root_tree_from_commit(&commit)
590+
.map_err(|()| to_read_object_err("Invalid jj:trees header", id))?;
594591
// Use lossy conversion as commit message with "mojibake" is still better than
595592
// nothing.
596593
// TODO: what should we do with commit.encoding?

0 commit comments

Comments
 (0)