Adding plugin jar's hash to OnosJar rule's key
Change-Id: Ie4ace26814a0dd19e80423a964ccdb3745c69088
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java
index 0f80bd5..0ce1841 100644
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java
+++ b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java
@@ -32,7 +32,13 @@
import com.google.common.collect.ImmutableSortedMap;
import com.google.common.collect.ImmutableSortedSet;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.net.URL;
import java.nio.file.Path;
+import java.security.DigestInputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.util.Set;
import java.util.regex.Pattern;
@@ -43,6 +49,25 @@
public class OnosJar extends DefaultJavaLibrary
implements MavenPublishable{
+ // Inject the SHA of this rule's jar into the rule key
+ private static String RULE_VERSION;
+ static {
+ URL pluginJarLocation = OnosJar.class.getProtectionDomain().getCodeSource().getLocation();
+ try {
+ MessageDigest md = MessageDigest.getInstance("SHA");
+ DigestInputStream dis = new DigestInputStream(pluginJarLocation.openStream(), md);
+ // Consume the InputStream...
+ while (dis.read() != -1);
+ RULE_VERSION = String.format("%032x", new BigInteger(1, md.digest()));
+ } catch (NoSuchAlgorithmException | IOException e) {
+ System.err.println("Failed to compute hash for OnosJar rule");
+ RULE_VERSION = "nil";
+ //TODO consider bailing here instead
+ }
+ }
+ @AddToRuleKey
+ private final String ruleVersion = RULE_VERSION;
+
@AddToRuleKey
final Optional<String> webContext;