Revert "Move extract-issues to analytics.config"
This reverts commit 2c6a8d095a23e061249858fc5c907c2e377cd59f.
diff --git a/README.md b/README.md
index 8338bcd..0f9f244 100644
--- a/README.md
+++ b/README.md
@@ -70,6 +70,7 @@
- --until -e Ending timestamp (excluded) to consider
- --aggregate -granularity -g one of email, email_year, email_month, email_day, email_hour defaulting to aggregation by email
- --extract-branches -r enables splitting of aggregation by branch name and expose branch name in the payload
+- --extract-issues -i enables the extraction of issues from commentLink
NOTE: Timestamp format is consistent with Gerrit's query syntax, see /Documentation/user-search.html for details.
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 6c08a06..89a6806 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -22,16 +22,4 @@
```
Keep in mind that plugin configurations are written in [git-config style syntax](https://git-scm.com/docs/git-config#_syntax),
- so you should be escaping regular expressions accordingly.
-
-- `contributors.extract-issues`
-
- when set to true, enables the extraction of issues from commentLink
-
- Default: false
-
- example:
- ```ini
- [contributors]
- extract-issues = true
- ```
\ No newline at end of file
+ so you should be escaping regular expressions accordingly.
\ No newline at end of file
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/analytics/AnalyticsConfig.scala b/src/main/scala/com/googlesource/gerrit/plugins/analytics/AnalyticsConfig.scala
index fd31626..8035a43 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/analytics/AnalyticsConfig.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/analytics/AnalyticsConfig.scala
@@ -16,22 +16,17 @@
import com.google.gerrit.extensions.annotations.PluginName
import com.google.gerrit.server.config.PluginConfigFactory
-import com.google.inject.{ImplementedBy, Inject}
+import com.google.inject.Inject
import org.eclipse.jgit.lib.Config
-@ImplementedBy(classOf[AnalyticsConfigImpl])
-trait AnalyticsConfig {
- def botlikeFilenameRegexps: List[String]
- def isExtractIssues: Boolean
-}
+class AnalyticsConfig @Inject() (val pluginConfigFactory: PluginConfigFactory, @PluginName val pluginName: String) {
-class AnalyticsConfigImpl @Inject() (val pluginConfigFactory: PluginConfigFactory, @PluginName val pluginName: String) extends AnalyticsConfig{
+ lazy val pluginConfig: Config = pluginConfigFactory.getGlobalPluginConfig(pluginName)
+
+ val Contributors = "contributors"
+ val BotlikeFilenameRegexp = "botlike-filename-regexp"
+
lazy val botlikeFilenameRegexps: List[String] = pluginConfigBotLikeFilenameRegexp
- lazy val isExtractIssues: Boolean = pluginConfig.getBoolean(Contributors, null, ExtractIssues, false)
- private lazy val pluginConfig: Config = pluginConfigFactory.getGlobalPluginConfig(pluginName)
- private val Contributors = "contributors"
- private val BotlikeFilenameRegexp = "botlike-filename-regexp"
- private val ExtractIssues = "extract-issues"
private lazy val pluginConfigBotLikeFilenameRegexp = pluginConfig.getStringList(Contributors, null, BotlikeFilenameRegexp).toList
}
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/analytics/Contributors.scala b/src/main/scala/com/googlesource/gerrit/plugins/analytics/Contributors.scala
index e57cd1d..8e048e2 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/analytics/Contributors.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/analytics/Contributors.scala
@@ -14,14 +14,19 @@
package com.googlesource.gerrit.plugins.analytics
+import com.google.common.cache.{Cache, LoadingCache}
+import com.google.gerrit.extensions.api.projects.CommentLinkInfo
import com.google.gerrit.extensions.restapi.{BadRequestException, Response, RestReadView}
import com.google.gerrit.server.git.GitRepositoryManager
import com.google.gerrit.server.project.{ProjectCache, ProjectResource}
import com.google.gerrit.server.restapi.project.ProjectsCollection
import com.google.gerrit.sshd.{CommandMetaData, SshCommand}
import com.google.inject.Inject
+import com.google.inject.name.Named
import com.googlesource.gerrit.plugins.analytics.common.DateConversions._
import com.googlesource.gerrit.plugins.analytics.common._
+import com.googlesource.gerrit.plugins.analytics.common.CommitsStatisticsCache.COMMITS_STATISTICS_CACHE
+import org.eclipse.jgit.lib.ObjectId
import org.kohsuke.args4j.{Option => ArgOption}
@@ -71,9 +76,13 @@
}
}
+ @ArgOption(name = "--extract-issues", aliases = Array("-i"),
+ usage = "Extract a list of issues and links using the Gerrit's commentLink configuration")
+ private var extractIssues: Boolean = false
+
override protected def run =
gsonFmt.format(executor.get(projectRes, beginDate, endDate,
- granularity.getOrElse(AggregationStrategy.EMAIL), extractBranches), stdout)
+ granularity.getOrElse(AggregationStrategy.EMAIL), extractBranches, extractIssues), stdout)
}
@@ -121,11 +130,15 @@
usage = "Do extra parsing to extract a list of all branches for each line")
private var extractBranches: Boolean = false
+ @ArgOption(name = "--extract-issues", aliases = Array("-i"),
+ usage = "Extract a list of issues and links using the Gerrit's commentLink configuration")
+ private var extractIssues: Boolean = false
+
override def apply(projectRes: ProjectResource) =
Response.ok(
new GsonStreamedResult[UserActivitySummary](gson,
executor.get(projectRes, beginDate, endDate,
- granularity.getOrElse(AggregationStrategy.EMAIL), extractBranches)))
+ granularity.getOrElse(AggregationStrategy.EMAIL), extractBranches, extractIssues)))
}
class ContributorsService @Inject()(repoManager: GitRepositoryManager,
@@ -135,9 +148,15 @@
commitsStatisticsCache: CommitsStatisticsCache) {
import RichBoolean._
+ import scala.collection.JavaConverters._
+
def get(projectRes: ProjectResource, startDate: Option[Long], stopDate: Option[Long],
- aggregationStrategy: AggregationStrategy, extractBranches: Boolean)
+ aggregationStrategy: AggregationStrategy, extractBranches: Boolean, extractIssues: Boolean)
: TraversableOnce[UserActivitySummary] = {
+ val nameKey = projectRes.getNameKey
+ val commentLinks: List[CommentLinkInfo] = extractIssues.option {
+ projectCache.get(nameKey).getCommentLinks.asScala
+ }.toList.flatten
ManagedResource.use(repoManager.openRepository(projectRes.getNameKey)) { repo =>
val stats = new Statistics(projectRes.getNameKey, commitsStatisticsCache)
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatisticsLoader.scala b/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatisticsLoader.scala
index 1144901..36a175b 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatisticsLoader.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatisticsLoader.scala
@@ -20,7 +20,7 @@
import com.google.gerrit.server.git.GitRepositoryManager
import com.google.gerrit.server.project.ProjectCache
import com.google.inject.Inject
-import com.googlesource.gerrit.plugins.analytics.{AnalyticsConfig, CommitInfo, IssueInfo}
+import com.googlesource.gerrit.plugins.analytics.{CommitInfo, IssueInfo}
import com.googlesource.gerrit.plugins.analytics.common.ManagedResource.use
import org.eclipse.jgit.diff.{DiffFormatter, RawTextComparator}
import org.eclipse.jgit.revwalk.RevWalk
@@ -30,20 +30,14 @@
import scala.collection.JavaConverters._
import scala.util.matching.Regex
-class CommitsStatisticsLoader @Inject() (
- gitRepositoryManager: GitRepositoryManager,
- projectCache: ProjectCache,
- botLikeExtractor: BotLikeExtractor,
- config: AnalyticsConfig
-) extends CacheLoader[CommitsStatisticsCacheKey, CommitsStatistics] {
+class CommitsStatisticsLoader @Inject() (gitRepositoryManager: GitRepositoryManager, projectCache: ProjectCache, botLikeExtractor: BotLikeExtractor) extends CacheLoader[CommitsStatisticsCacheKey, CommitsStatistics] {
override def load(cacheKey: CommitsStatisticsCacheKey): CommitsStatistics = {
import RevisionBrowsingSupport._
val objectId = cacheKey.commitId
val nameKey = new Project.NameKey(cacheKey.projectName)
- val commentInfoList: Seq[CommentLinkInfo] =
- if(config.isExtractIssues) projectCache.get(nameKey).getCommentLinks.asScala else Seq.empty
+ val commentInfoList: Seq[CommentLinkInfo] = projectCache.get(nameKey).getCommentLinks.asScala
val replacers = commentInfoList.map(info =>
Replacer(
info.`match`.r,
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractorImplSpec.scala b/src/test/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractorImplSpec.scala
index 5bb73c5..e9f9c7a 100644
--- a/src/test/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractorImplSpec.scala
+++ b/src/test/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractorImplSpec.scala
@@ -46,8 +46,7 @@
extractor.isBotLike(Set("some/path/anyFile")).shouldBe(false)
}
- private def newBotLikeExtractorImpl(botLikeRegexps: List[String]) = new BotLikeExtractorImpl(new AnalyticsConfig {
+ private def newBotLikeExtractorImpl(botLikeRegexps: List[String]) = new BotLikeExtractorImpl(new AnalyticsConfig(null, null) {
override lazy val botlikeFilenameRegexps = botLikeRegexps
- override lazy val isExtractIssues: Boolean = false
})
}
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/GerritTestDaemon.scala b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/GerritTestDaemon.scala
index 59a6d90..f10c772 100644
--- a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/GerritTestDaemon.scala
+++ b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/GerritTestDaemon.scala
@@ -21,7 +21,6 @@
import com.google.gerrit.extensions.annotations.PluginName
import com.google.gerrit.reviewdb.client.Project
import com.google.inject.{AbstractModule, Module}
-import com.googlesource.gerrit.plugins.analytics.AnalyticsConfig
import org.eclipse.jgit.api.MergeCommand.FastForwardMode
import org.eclipse.jgit.api.{Git, MergeResult}
import org.eclipse.jgit.internal.storage.file.FileRepository
@@ -153,10 +152,6 @@
override def createModule(): Module = new AbstractModule {
override def configure(): Unit = {
- bind(classOf[AnalyticsConfig]).toInstance(new AnalyticsConfig {
- override def botlikeFilenameRegexps: List[String] = List.empty
- override def isExtractIssues: Boolean = true
- })
bind(classOf[String]).annotatedWith(classOf[PluginName]).toInstance("analytics")
}
}