Merge "FilesystemDeleteHandler: Use more readable name for trash folder" into stable-2.14
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java
index 72bc172..bd63e1f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java
@@ -56,9 +56,17 @@
      */
     private static final Pattern TRASH_2 = Pattern.compile(".*\\.\\d{13}.%deleted%.git");
 
+    /**
+     * Newer trash folder name format. Besides the changes in TRASH_2, it uses a timestamp format
+     * (YYYYMMddHHmmss) instead of the epoch one for increased readability.
+     */
+    private static final Pattern TRASH_3 = Pattern.compile(".*\\.\\d{14}.%deleted%.git");
+
     @VisibleForTesting
     static final boolean match(String fName) {
-      return TRASH_1.matcher(fName).matches() || TRASH_2.matcher(fName).matches();
+      return TRASH_1.matcher(fName).matches()
+          || TRASH_2.matcher(fName).matches()
+          || TRASH_3.matcher(fName).matches();
     }
 
     static boolean match(Path dir) {
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 ecf14f4..8add19a 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
@@ -28,6 +28,8 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.lib.RepositoryCache;
@@ -36,6 +38,8 @@
 
 public class FilesystemDeleteHandler {
   private static final Logger log = LoggerFactory.getLogger(FilesystemDeleteHandler.class);
+  private static final DateTimeFormatter FORMAT =
+      DateTimeFormatter.ofPattern("YYYYMMddHHmmss").withZone(ZoneId.of("UTC"));
 
   private final GitRepositoryManager repoManager;
   private final DynamicSet<ProjectDeletedListener> deletedListeners;
@@ -87,7 +91,7 @@
   private Path moveToTrash(Path directory, Path basePath, Project.NameKey nameKey)
       throws IOException {
     Path trashRepo =
-        basePath.resolve(nameKey.get() + "." + TimeMachine.now().toEpochMilli() + ".%deleted%.git");
+        basePath.resolve(nameKey.get() + "." + FORMAT.format(TimeMachine.now()) + ".%deleted%.git");
     return Files.move(directory, trashRepo, StandardCopyOption.ATOMIC_MOVE);
   }
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/TrashFolderNameMatcherTest.java b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/TrashFolderNameMatcherTest.java
index 6ce8206..102d8d1 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/TrashFolderNameMatcherTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/TrashFolderNameMatcherTest.java
@@ -30,6 +30,10 @@
     matches("a.1234567890123.%deleted%.git");
     matches("aa.1234567890123.%deleted%.git");
     matches("a.b.c.1234567890123.%deleted%.git");
+
+    matches("a.20181010120101.%deleted%.git");
+    matches("aa.20181010120101.%deleted%.git");
+    matches("a.b.c.20181010120101.%deleted%.git");
   }
 
   @Test
@@ -47,10 +51,13 @@
 
     // missing .git suffix
     doesNotMatch("a.1234567890123.%deleted%");
+    doesNotMatch("a.20181010120101.%deleted%");
 
     // additional characters after the "git" suffix
     doesNotMatch("a.1234567890123.%deleted%.git.");
     doesNotMatch("a.1234567890123.%deleted%.git.git");
+    doesNotMatch("a.20181010120101.%deleted%.git.");
+    doesNotMatch("a.20181010120101.%deleted%.git.git");
   }
 
   private void matches(String name) {