Merge "Ensure root repository is a FileRepository"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/UpdateGitMetricsTask.java b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/UpdateGitMetricsTask.java
index bb885d3..191a5e7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/UpdateGitMetricsTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/UpdateGitMetricsTask.java
@@ -19,6 +19,7 @@
 import com.google.gerrit.server.git.DelegateRepository;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.inject.Inject;
+import com.google.inject.ProvisionException;
 import com.google.inject.assistedinject.Assisted;
 import com.googlesource.gerrit.plugins.gitrepometrics.collectors.GitRepoMetric;
 import java.io.IOException;
@@ -57,16 +58,11 @@
           "Running task to collect stats: repo %s, project %s",
           repository.getIdentifier(), projectName);
 
-      Repository unwrappedRepo =
-          repository instanceof DelegateRepository
-              ? ((DelegateRepository) repository).delegate()
-              : repository;
-
       gitRepoMetricsCache.getCollectors().stream()
           .forEach(
               metricsCollector -> {
                 metricsCollector.collect(
-                    (FileRepository) unwrappedRepo,
+                    getFileRepository(repository),
                     projectName,
                     metrics -> {
                       Map<GitRepoMetric, Long> newMetrics = new HashMap<>();
@@ -89,6 +85,18 @@
     }
   }
 
+  private FileRepository getFileRepository(Repository repo) {
+    if (repo instanceof DelegateRepository) {
+      return getFileRepository(((DelegateRepository) repo).delegate());
+    }
+
+    if (repo instanceof FileRepository) {
+      return (FileRepository) repo;
+    }
+
+    throw new ProvisionException("git-repo-metrics plugin can only be used with FileRepository");
+  }
+
   @Override
   public String toString() {
     return "UpdateGitMetricsTask " + projectName;