aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/HttpDownloader.java9
-rwxr-xr-xsrc/test/shell/bazel/external_integration_test.sh9
2 files changed, 18 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpDownloader.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpDownloader.java
index 9dd29aeba5..56f7d33bcc 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpDownloader.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpDownloader.java
@@ -73,6 +73,15 @@ public class HttpDownloader {
}
Path destination = outputDirectory.getRelative(filename);
+ try {
+ String currentSha256 = getHash(Hashing.sha256().newHasher(), destination);
+ if (currentSha256.equals(sha256)) {
+ // No need to download.
+ return destination;
+ }
+ } catch (IOException e) {
+ // Ignore error trying to hash. We'll just download again.
+ }
int currentBytes;
final AtomicInteger totalBytes = new AtomicInteger(0);
final ScheduledFuture<?> loggerHandle = getLoggerHandle(totalBytes);
diff --git a/src/test/shell/bazel/external_integration_test.sh b/src/test/shell/bazel/external_integration_test.sh
index e799302e9b..bdccbd06af 100755
--- a/src/test/shell/bazel/external_integration_test.sh
+++ b/src/test/shell/bazel/external_integration_test.sh
@@ -333,6 +333,15 @@ function test_changed_zip() {
[[ -s $repo_zip ]] || fail "File size was 0"
}
+function test_cached_across_server_restart() {
+ http_archive_helper zip_up
+ bazel shutdown >& $TEST_log || fail "Couldn't shut down"
+ bazel run //zoo:breeding-program >& $TEST_log --show_progress_rate_limit=0 \
+ || echo "Expected build/run to succeed"
+ expect_log $what_does_the_fox_say
+ expect_not_log "Downloading from"
+}
+
# Tests downloading a jar and using it as a Java dependency.
function test_jar_download() {
serve_jar