Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/main/java/com/bazel_diff/TargetHashingClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -166,13 +166,16 @@ private Map<String, String> hashAllTargets(byte[] seedHash, Map<String, BazelSou
if (targetName == null) {
continue;
}
if(target.hasGeneratedFile()) {
allRulesMap.put(targetName, allRulesMap.get(target.getGeneratingRuleName()));
}
if(target.hasRule()) {
allRulesMap.put(targetName, target.getRule());
}
}
for (BazelTarget target: allTargets) {
if(target.hasGeneratedFile()) {
allRulesMap.put(getNameForTarget(target), allRulesMap.get(target.getGeneratingRuleName()));
}
}

for (BazelTarget target : allTargets) {
String targetName = getNameForTarget(target);
if (targetName == null) {
Expand Down
44 changes: 44 additions & 0 deletions test/java/com/bazel_diff/TargetHashingClientImplTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,40 @@ public void hashAllBazelTargets_ruleTargets_ruleInputsWithSelfInput() throws IOE
}
}

@Test
public void HashAllBazelTargets_generatedTargets() throws IOException, NoSuchAlgorithmException {
BazelTarget generator = createRuleTarget("rule1", new ArrayList<String>(), "rule1Digest");
BazelTarget target = createGeneratedTarget("rule0", "rule1");

List<String> ruleInputs = new ArrayList<>();
ruleInputs.add("rule0");
BazelTarget rule3 = createRuleTarget("rule3", ruleInputs, "digest");

String oldHash = "";
String newHash = "";

when(bazelClientMock.queryAllTargets()).thenReturn(Arrays.asList(rule3, target, generator));
TargetHashingClientImpl client = new TargetHashingClientImpl(bazelClientMock, filesClientMock);
try {
Map<String, String> hash = client.hashAllBazelTargetsAndSourcefiles(new HashSet<>());
assertEquals(3, hash.size());
oldHash = hash.get("rule3");
} catch (IOException | NoSuchAlgorithmException e) {
fail(e.getMessage());
}

when(generator.getRule().getDigest()).thenReturn("newDigest".getBytes());
try {
Map<String, String> hash = client.hashAllBazelTargetsAndSourcefiles(new HashSet<>());
assertEquals(3, hash.size());
newHash = hash.get("rule3");
} catch (IOException | NoSuchAlgorithmException e) {
fail(e.getMessage());
}

assertNotEquals(oldHash, newHash);
}

private BazelTarget createRuleTarget(String ruleName, List<String> ruleInputs, String ruleDigest) throws NoSuchAlgorithmException {
BazelTarget target = mock(BazelTarget.class);
BazelRule rule = mock(BazelRule.class);
Expand Down Expand Up @@ -149,4 +183,14 @@ private BazelSourceFileTarget createSourceFileTarget(String name, String digest)
when(target.getDigest()).thenReturn(digest.getBytes());
return target;
}

private BazelTarget createGeneratedTarget(String name, String generatingRuleName) throws NoSuchAlgorithmException {
BazelTarget target = mock(BazelTarget.class);
when(target.hasRule()).thenReturn(false);
when(target.hasSourceFile()).thenReturn(false);
when(target.hasGeneratedFile()).thenReturn(true);
when(target.getGeneratedFileName()).thenReturn(name);
when(target.getGeneratingRuleName()).thenReturn(generatingRuleName);
return target;
}
}