@@ -532,5 +532,47 @@ public void CalculatingHistoryDivergenceWithBadParamsThrows()
532532 ( ) => repo . ObjectDatabase . CalculateHistoryDivergence ( null , repo . Head . Tip ) ) ;
533533 }
534534 }
535+
536+ [ Fact ]
537+ public void CanShortenObjectIdentifier ( )
538+ {
539+ /*
540+ * $ echo "aabqhq" | git hash-object -t blob --stdin
541+ * dea509d0b3cb8ee0650f6ca210bc83f4678851ba
542+ *
543+ * $ echo "aaazvc" | git hash-object -t blob --stdin
544+ * dea509d097ce692e167dfc6a48a7a280cc5e877e
545+ */
546+
547+ string path = CloneBareTestRepo ( ) ;
548+ using ( var repo = new Repository ( path ) )
549+ {
550+ repo . Config . Set ( "core.abbrev" , 4 ) ;
551+
552+ Blob blob1 = CreateBlob ( repo , "aabqhq\n " ) ;
553+ Assert . Equal ( "dea509d0b3cb8ee0650f6ca210bc83f4678851ba" , blob1 . Sha ) ;
554+
555+ Assert . Equal ( "dea5" , repo . ObjectDatabase . ShortenObjectId ( blob1 ) ) ;
556+ Assert . Equal ( "dea509d0b3cb" , repo . ObjectDatabase . ShortenObjectId ( blob1 , 12 ) ) ;
557+ Assert . Equal ( "dea509d0b3cb8ee0650f6ca210bc83f4678851b" , repo . ObjectDatabase . ShortenObjectId ( blob1 , 39 ) ) ;
558+
559+ Blob blob2 = CreateBlob ( repo , "aaazvc\n " ) ;
560+ Assert . Equal ( "dea509d09" , repo . ObjectDatabase . ShortenObjectId ( blob2 ) ) ;
561+ Assert . Equal ( "dea509d09" , repo . ObjectDatabase . ShortenObjectId ( blob2 , 4 ) ) ;
562+ Assert . Equal ( "dea509d0b" , repo . ObjectDatabase . ShortenObjectId ( blob1 ) ) ;
563+ Assert . Equal ( "dea509d0b" , repo . ObjectDatabase . ShortenObjectId ( blob1 , 7 ) ) ;
564+
565+ Assert . Equal ( "dea509d0b3cb" , repo . ObjectDatabase . ShortenObjectId ( blob1 , 12 ) ) ;
566+ Assert . Equal ( "dea509d097ce" , repo . ObjectDatabase . ShortenObjectId ( blob2 , 12 ) ) ;
567+ }
568+ }
569+
570+ private static Blob CreateBlob ( Repository repo , string content )
571+ {
572+ using ( var stream = new MemoryStream ( Encoding . UTF8 . GetBytes ( content ) ) )
573+ {
574+ return repo . ObjectDatabase . CreateBlob ( stream ) ;
575+ }
576+ }
535577 }
536578}
0 commit comments