Skip to content

Commit 43d0025

Browse files
Merge pull request #98 from fahhem/fahhem/memdecrease
Don't store file contents to lazy-calculate digests
2 parents f369333 + eb3b427 commit 43d0025

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

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

+13-11
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,17 @@
1010

1111
interface BazelSourceFileTarget {
1212
String getName();
13-
byte[] getDigest() throws NoSuchAlgorithmException;
13+
byte[] getDigest();
1414
}
1515

1616
class BazelSourceFileTargetImpl implements BazelSourceFileTarget {
1717

1818
private String name;
1919
private byte[] digest;
2020

21-
BazelSourceFileTargetImpl(String name, byte[] digest, Path workingDirectory) throws IOException {
21+
BazelSourceFileTargetImpl(String name, byte[] digest, Path workingDirectory) throws IOException, NoSuchAlgorithmException {
2222
this.name = name;
23+
byte[] data = null;
2324
if (workingDirectory != null && name.startsWith("//")) {
2425
String filenameSubstring = name.substring(2);
2526
String filenamePath = filenameSubstring.replaceFirst(":", "/");
@@ -28,12 +29,18 @@ class BazelSourceFileTargetImpl implements BazelSourceFileTarget {
2829
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
2930
outputStream.write(Files.readAllBytes(sourceFile.toPath()));
3031
outputStream.write(digest);
31-
this.digest = outputStream.toByteArray();
32+
data = outputStream.toByteArray();
3233
outputStream.close();
3334
}
3435
} else {
35-
this.digest = digest;
36+
data = digest;
3637
}
38+
MessageDigest finalDigest = MessageDigest.getInstance("SHA-256");
39+
if (data != null) {
40+
finalDigest.update(data);
41+
}
42+
finalDigest.update(name.getBytes());
43+
this.digest = finalDigest.digest();
3744
}
3845

3946
@Override
@@ -42,12 +49,7 @@ public String getName() {
4249
}
4350

4451
@Override
45-
public byte[] getDigest() throws NoSuchAlgorithmException {
46-
MessageDigest finalDigest = MessageDigest.getInstance("SHA-256");
47-
if (digest != null) {
48-
finalDigest.update(digest);
49-
}
50-
finalDigest.update(name.getBytes());
51-
return finalDigest.digest();
52+
public byte[] getDigest() {
53+
return this.digest;
5254
}
5355
}

0 commit comments

Comments
 (0)