@@ -359,12 +359,11 @@ public static byte[] blobId(final MessageDigest messageDigest, final long dataSi
359359 * @throws IOException On error accessing the file.
360360 */
361361 public static byte [] blobId (final MessageDigest messageDigest , final Path data ) throws IOException {
362- messageDigest .reset ();
363362 if (Files .isSymbolicLink (data )) {
364363 final byte [] linkTarget = Files .readSymbolicLink (data ).toString ().getBytes (StandardCharsets .UTF_8 );
365- DigestUtils .updateDigest (messageDigest , getGitBlobPrefix (linkTarget .length ));
366- return DigestUtils .digest (messageDigest , linkTarget );
364+ return blobId (messageDigest , linkTarget );
367365 }
366+ messageDigest .reset ();
368367 DigestUtils .updateDigest (messageDigest , getGitBlobPrefix (Files .size (data )));
369368 return DigestUtils .updateDigest (messageDigest , data ).digest ();
370369 }
@@ -400,19 +399,10 @@ private static void populateFromPath(final TreeIdBuilder builder, final Path dir
400399 for (final Path path : files ) {
401400 final String name = Objects .toString (path .getFileName ());
402401 final FileMode mode = getGitDirectoryEntryType (path );
403- switch (mode ) {
404- case DIRECTORY :
405- populateFromPath (builder .addDirectory (name ), path );
406- break ;
407- case SYMBOLIC_LINK :
408- final byte [] linkTarget = Files .readSymbolicLink (path ).toString ().getBytes (StandardCharsets .UTF_8 );
409- builder .addFile (FileMode .SYMBOLIC_LINK , name , linkTarget );
410- break ;
411- default :
412- try (InputStream is = Files .newInputStream (path )) {
413- builder .addFile (mode , name , Files .size (path ), is );
414- }
415- break ;
402+ if (mode == FileMode .DIRECTORY ) {
403+ populateFromPath (builder .addDirectory (name ), path );
404+ } else {
405+ builder .addFile (mode , name , () -> blobId (builder .messageDigest , path ));
416406 }
417407 }
418408 }
0 commit comments