Merge branch 'stable-2.14' into stable-2.15

* stable-2.14:
  Update mockito to 2.23.4
  Always pass ALLOW_INSECURE to MoreFiles.deleteRecursively
  ArchiveRepositoryRemoverTest: Refactor assertions on repo content
  Format external_plugin_deps.bzl with buildifier
  Upgrade bazlets to latest stable-2.14 to build with 2.14.17 API
  Upgrade bazlets to latest stable-2.14 to build with 2.14.16 API

Change-Id: Ie45390df44f13bf66234cf8b41f3e51eb405701d
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index bd864bf..64ddc2f 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -3,8 +3,8 @@
 def external_plugin_deps():
     maven_jar(
         name = "mockito",
-        artifact = "org.mockito:mockito-core:2.23.0",
-        sha1 = "497ddb32fd5d01f9dbe99a2ec790aeb931dff1b1",
+        artifact = "org.mockito:mockito-core:2.23.4",
+        sha1 = "a35b6f8ffcfa786771eac7d7d903429e790fdf3f",
         deps = [
             "@byte-buddy//jar",
             "@byte-buddy-agent//jar",
@@ -12,18 +12,18 @@
         ],
     )
 
-    BYTE_BUDDY_VERSION = "1.9.0"
+    BYTE_BUDDY_VERSION = "1.9.3"
 
     maven_jar(
         name = "byte-buddy",
         artifact = "net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VERSION,
-        sha1 = "8cb0d5baae526c9df46ae17693bbba302640538b",
+        sha1 = "f32e510b239620852fc9a2387fac41fd053d6a4d",
     )
 
     maven_jar(
         name = "byte-buddy-agent",
         artifact = "net.bytebuddy:byte-buddy-agent:" + BYTE_BUDDY_VERSION,
-        sha1 = "37b5703b4a6290be3fffc63ae9c6bcaaee0ff856",
+        sha1 = "f5b78c16cf4060664d80b6ca32d80dca4bd3d264",
     )
 
     maven_jar(
@@ -35,4 +35,4 @@
         name = "commons-io",
         artifact = "commons-io:commons-io:2.6",
         sha1 = "815893df5f31da2ece4040fe0a12fd44b577afaf",
-   )
+    )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/ArchiveRepositoryRemover.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/ArchiveRepositoryRemover.java
index ec6c29a..4cbf83b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/ArchiveRepositoryRemover.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/ArchiveRepositoryRemover.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.deleteproject.fs;
 
+import static com.google.common.io.RecursiveDeleteOption.ALLOW_INSECURE;
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.concurrent.TimeUnit.SECONDS;
 
@@ -102,7 +103,7 @@
   private void cleanUpOverdueRepositories() {
     for (Path path : listOverdueFiles(config.getArchiveDuration())) {
       try {
-        MoreFiles.deleteRecursively(path);
+        MoreFiles.deleteRecursively(path, ALLOW_INSECURE);
       } catch (IOException e) {
         logger.warn("Error trying to clean the archived git repository: {}", path, e);
       }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java
index b1a1c74..003f154 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java
@@ -103,7 +103,7 @@
     Path basePath = getBasePath(repoPath, projectName);
     Path trash = renameRepository(repoPath, basePath, projectName, "deleted");
     try {
-      MoreFiles.deleteRecursively(trash);
+      MoreFiles.deleteRecursively(trash, ALLOW_INSECURE);
       recursivelyDeleteEmptyParents(repoPath.toFile().getParentFile(), basePath.toFile());
     } catch (IOException e) {
       // Only log if delete failed - repo already moved to trash.
diff --git a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/ArchiveRepositoryRemoverTest.java b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/ArchiveRepositoryRemoverTest.java
index b1265bc..64634b9 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/ArchiveRepositoryRemoverTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/ArchiveRepositoryRemoverTest.java
@@ -16,6 +16,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 import static java.util.concurrent.TimeUnit.SECONDS;
+import static java.util.stream.Collectors.toList;
+import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isA;
@@ -24,6 +26,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import com.google.common.base.Joiner;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.inject.Provider;
 import com.googlesource.gerrit.plugins.deleteproject.Configuration;
@@ -33,9 +36,11 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.time.Instant;
+import java.util.List;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.StreamSupport;
 import org.eclipse.jgit.internal.storage.file.FileRepository;
 import org.eclipse.jgit.lib.Repository;
 import org.junit.Before;
@@ -94,7 +99,7 @@
               String.format(
                   "[%s]: Clean up expired git repositories from the archive [%s]",
                   PLUGIN_NAME, archiveRepo));
-      assertThat(isDirEmpty(archiveRepo)).isTrue();
+      assertDirectoryContents(archiveRepo, true);
     } finally {
       TimeMachine.useSystemDefaultZoneClock();
     }
@@ -122,7 +127,7 @@
     for (int i = 0; i < NUMBER_OF_REPOS; i++) {
       createRepository("Repo_" + i);
     }
-    assertThat(isDirEmpty(archiveRepo)).isFalse();
+    assertDirectoryContents(archiveRepo, false);
   }
 
   private FileRepository createRepository(String repoName) throws IOException {
@@ -132,9 +137,17 @@
     return (FileRepository) repository;
   }
 
-  private boolean isDirEmpty(final Path dir) throws IOException {
+  private void assertDirectoryContents(Path dir, boolean expectEmpty) throws IOException {
     try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(dir)) {
-      return !dirStream.iterator().hasNext();
+      List<Path> paths = StreamSupport.stream(dirStream.spliterator(), false).collect(toList());
+      if (expectEmpty && !paths.isEmpty()) {
+        fail(
+            String.format(
+                "Expected dir [%s] to be empty but it contains: %s",
+                dir, Joiner.on(", ").join(paths)));
+      } else if (!expectEmpty && paths.isEmpty()) {
+        fail(String.format("Expected dir [%s] to be non-empty but it is empty", dir));
+      }
     }
   }
 }