Avoid making long filesystem keys
Concatenating several hashes together can make a really long filename,
so instead simply hash all the items together (after all a hash function
is a compression function) without fear of collision.
Change-Id: I9221d20fe835cc1b50e82cd302c41ba48258750a
diff --git a/src/vogar/Md5Cache.java b/src/vogar/Md5Cache.java
index 6aff6c5..a1ad389 100644
--- a/src/vogar/Md5Cache.java
+++ b/src/vogar/Md5Cache.java
@@ -125,8 +125,13 @@
/**
* Returns a key corresponding to the MD5ed contents of the element.
*/
- public String makeKey(String element) {
- return keyPrefix + "-" + md5(element);
+ public String makeKey(String... elements) {
+ StringBuilder sb = new StringBuilder();
+ for (String element : elements) {
+ sb.append(element);
+ sb.append('|');
+ }
+ return keyPrefix + "-" + md5(sb.toString());
}
/**
diff --git a/src/vogar/android/JackDexTask.java b/src/vogar/android/JackDexTask.java
index e427807..0af03d6 100644
--- a/src/vogar/android/JackDexTask.java
+++ b/src/vogar/android/JackDexTask.java
@@ -77,11 +77,8 @@
// classpathSubKey and do not cache.
// cacheKey includes all the arguments that could affect the output.
- cacheKey =
- jackCache.makeKey(inputFile) +
- classpathSubKey +
- jackCache.makeKey(run.language.toString()) +
- jackCache.makeKey(Boolean.toString(run.debugging));
+ cacheKey = jackCache.makeKey(inputFile.toString(), classpathSubKey,
+ run.language.toString(), Boolean.toString(run.debugging));
if (jackCache.getFromCache(localDex, cacheKey)) {
run.log.verbose("JackDexTask: Obtained " + localDex + " from jackCache");