@@ -34,7 +34,6 @@ use std::sync::MutexGuard;
3434use std:: time:: SystemTime ;
3535
3636use async_trait:: async_trait;
37- use bstr:: BStr ;
3837use futures:: stream:: BoxStream ;
3938use gix:: bstr:: BString ;
4039use 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