Skip to content

Commit bbb920e

Browse files
Merge pull request #111 from molar/add_support_for_large_files
2 parents 4739b8a + f165baa commit bbb920e

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

src/main/java/com/bazel_diff/BazelSourceFileTarget.java

+14-16
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,41 @@
22

33
import java.io.ByteArrayOutputStream;
44
import java.io.File;
5-
import java.nio.file.Path;
5+
import java.io.FileInputStream;
6+
import java.io.IOException;
67
import java.nio.file.Files;
8+
import java.nio.file.Path;
79
import java.security.MessageDigest;
810
import java.security.NoSuchAlgorithmException;
9-
import java.io.IOException;
1011

1112
interface BazelSourceFileTarget {
1213
String getName();
1314
byte[] getDigest();
1415
}
1516

1617
class BazelSourceFileTargetImpl implements BazelSourceFileTarget {
17-
1818
private String name;
1919
private byte[] digest;
2020

21-
BazelSourceFileTargetImpl(String name, byte[] digest, Path workingDirectory) throws IOException, NoSuchAlgorithmException {
21+
BazelSourceFileTargetImpl(String name, byte[] digest, Path workingDirectory)
22+
throws IOException, NoSuchAlgorithmException {
2223
this.name = name;
23-
byte[] data = null;
24+
MessageDigest finalDigest = MessageDigest.getInstance("SHA-256");
2425
if (workingDirectory != null && name.startsWith("//")) {
2526
String filenameSubstring = name.substring(2);
2627
String filenamePath = filenameSubstring.replaceFirst(":", "/");
2728
File sourceFile = new File(workingDirectory.toString(), filenamePath);
2829
if (sourceFile.isFile() && sourceFile.canRead()) {
29-
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
30-
outputStream.write(Files.readAllBytes(sourceFile.toPath()));
31-
outputStream.write(digest);
32-
data = outputStream.toByteArray();
33-
outputStream.close();
30+
byte[] buffer = new byte[16384];
31+
FileInputStream in = new FileInputStream(sourceFile);
32+
int rc = in.read(buffer);
33+
while (rc != -1) {
34+
finalDigest.update(buffer, 0, rc);
35+
rc = in.read(buffer);
36+
}
3437
}
35-
} else {
36-
data = digest;
37-
}
38-
MessageDigest finalDigest = MessageDigest.getInstance("SHA-256");
39-
if (data != null) {
40-
finalDigest.update(data);
4138
}
39+
finalDigest.update(digest);
4240
finalDigest.update(name.getBytes());
4341
this.digest = finalDigest.digest();
4442
}

0 commit comments

Comments
 (0)