Skip to content

Commit 8525634

Browse files
Merge pull request #91 from KevinJiao/master
Fix bug during registration of generating targets
2 parents 171326d + 4cfee66 commit 8525634

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

src/main/java/com/bazel_diff/TargetHashingClient.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,16 @@ private Map<String, String> hashAllTargets(byte[] seedHash, Map<String, BazelSou
166166
if (targetName == null) {
167167
continue;
168168
}
169-
if(target.hasGeneratedFile()) {
170-
allRulesMap.put(targetName, allRulesMap.get(target.getGeneratingRuleName()));
171-
}
172169
if(target.hasRule()) {
173170
allRulesMap.put(targetName, target.getRule());
174171
}
175172
}
173+
for (BazelTarget target: allTargets) {
174+
if(target.hasGeneratedFile()) {
175+
allRulesMap.put(getNameForTarget(target), allRulesMap.get(target.getGeneratingRuleName()));
176+
}
177+
}
178+
176179
for (BazelTarget target : allTargets) {
177180
String targetName = getNameForTarget(target);
178181
if (targetName == null) {

test/java/com/bazel_diff/TargetHashingClientImplTests.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,40 @@ public void hashAllBazelTargets_ruleTargets_ruleInputsWithSelfInput() throws IOE
122122
}
123123
}
124124

125+
@Test
126+
public void HashAllBazelTargets_generatedTargets() throws IOException, NoSuchAlgorithmException {
127+
BazelTarget generator = createRuleTarget("rule1", new ArrayList<String>(), "rule1Digest");
128+
BazelTarget target = createGeneratedTarget("rule0", "rule1");
129+
130+
List<String> ruleInputs = new ArrayList<>();
131+
ruleInputs.add("rule0");
132+
BazelTarget rule3 = createRuleTarget("rule3", ruleInputs, "digest");
133+
134+
String oldHash = "";
135+
String newHash = "";
136+
137+
when(bazelClientMock.queryAllTargets()).thenReturn(Arrays.asList(rule3, target, generator));
138+
TargetHashingClientImpl client = new TargetHashingClientImpl(bazelClientMock, filesClientMock);
139+
try {
140+
Map<String, String> hash = client.hashAllBazelTargetsAndSourcefiles(new HashSet<>());
141+
assertEquals(3, hash.size());
142+
oldHash = hash.get("rule3");
143+
} catch (IOException | NoSuchAlgorithmException e) {
144+
fail(e.getMessage());
145+
}
146+
147+
when(generator.getRule().getDigest()).thenReturn("newDigest".getBytes());
148+
try {
149+
Map<String, String> hash = client.hashAllBazelTargetsAndSourcefiles(new HashSet<>());
150+
assertEquals(3, hash.size());
151+
newHash = hash.get("rule3");
152+
} catch (IOException | NoSuchAlgorithmException e) {
153+
fail(e.getMessage());
154+
}
155+
156+
assertNotEquals(oldHash, newHash);
157+
}
158+
125159
private BazelTarget createRuleTarget(String ruleName, List<String> ruleInputs, String ruleDigest) throws NoSuchAlgorithmException {
126160
BazelTarget target = mock(BazelTarget.class);
127161
BazelRule rule = mock(BazelRule.class);
@@ -149,4 +183,14 @@ private BazelSourceFileTarget createSourceFileTarget(String name, String digest)
149183
when(target.getDigest()).thenReturn(digest.getBytes());
150184
return target;
151185
}
186+
187+
private BazelTarget createGeneratedTarget(String name, String generatingRuleName) throws NoSuchAlgorithmException {
188+
BazelTarget target = mock(BazelTarget.class);
189+
when(target.hasRule()).thenReturn(false);
190+
when(target.hasSourceFile()).thenReturn(false);
191+
when(target.hasGeneratedFile()).thenReturn(true);
192+
when(target.getGeneratedFileName()).thenReturn(name);
193+
when(target.getGeneratingRuleName()).thenReturn(generatingRuleName);
194+
return target;
195+
}
152196
}

0 commit comments

Comments
 (0)