@@ -1459,6 +1459,25 @@ impl Repository {
1459
1459
}
1460
1460
}
1461
1461
1462
+ /// Lookup a reference to one of the objects by id prefix in a repository.
1463
+ pub fn find_object_by_prefix (
1464
+ & self ,
1465
+ prefix_hash : & str ,
1466
+ kind : Option < ObjectType > ,
1467
+ ) -> Result < Object < ' _ > , Error > {
1468
+ let mut raw = ptr:: null_mut ( ) ;
1469
+ unsafe {
1470
+ try_call ! ( raw:: git_object_lookup_prefix(
1471
+ & mut raw,
1472
+ self . raw( ) ,
1473
+ Oid :: from_str( prefix_hash) ?. raw( ) ,
1474
+ prefix_hash. len( ) ,
1475
+ kind
1476
+ ) ) ;
1477
+ Ok ( Binding :: from_raw ( raw) )
1478
+ }
1479
+ }
1480
+
1462
1481
/// Create a new direct reference.
1463
1482
///
1464
1483
/// This function will return an error if a reference already exists with
@@ -3678,6 +3697,17 @@ mod tests {
3678
3697
assert_eq ! ( repo. head( ) . unwrap( ) . target( ) . unwrap( ) , main_oid) ;
3679
3698
}
3680
3699
3700
+ #[ test]
3701
+ fn smoke_find_object_by_prefix ( ) {
3702
+ let ( _td, repo) = crate :: test:: repo_init ( ) ;
3703
+ let head = repo. head ( ) . unwrap ( ) . target ( ) . unwrap ( ) ;
3704
+ let head = repo. find_commit ( head) . unwrap ( ) ;
3705
+ let head_id = head. id ( ) ;
3706
+ let head_prefix = & head_id. to_string ( ) [ ..7 ] ;
3707
+ let obj = repo. find_object_by_prefix ( head_prefix, None ) . unwrap ( ) ;
3708
+ assert_eq ! ( obj. id( ) , head_id) ;
3709
+ }
3710
+
3681
3711
/// create the following:
3682
3712
/// /---o4
3683
3713
/// /---o3
0 commit comments