If a project had a label definition where a value was defined twice
getting the project info via REST failed [1].
With this change we now generate a validation error on load of the
project.config file, but let the loading succeed (the duplicate value is
filtered out). Hence getting the project info of such a project no
longer fails.
The new validation error also ensures that it is no longer possible to
push updates of project.config files that introduce duplicate label
values.
[1]
java.lang.IllegalStateException: Duplicate key 1 (attempted merging values Looks Good and Looks Good)
at java.util.stream.Collectors.duplicateKeyException(Collectors.java:131)
at java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:178)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1383)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at com.google.gerrit.server.project.ProjectJson.format(ProjectJson.java:52)
at com.google.gerrit.server.restapi.project.GetProject.apply(GetProject.java:37)
at com.google.gerrit.server.restapi.project.GetProject.apply(GetProject.java:25)
at com.google.gerrit.httpd.restapi.RestApiServlet.lambda$invokeRestReadViewWithRetry$3(RestApiServlet.java:723)
at com.github.rholder.retry.AttemptTimeLimiters$NoAttemptTimeLimit.call(AttemptTimeLimiters.java:78)
at com.github.rholder.retry.Retryer.call(Retryer.java:160)
at com.google.gerrit.server.update.RetryHelper.executeWithTimeoutCount(RetryHelper.java:417)
at com.google.gerrit.server.update.RetryHelper.executeWithAttemptAndTimeoutCount(RetryHelper.java:368)
at com.google.gerrit.server.update.RetryHelper.execute(RetryHelper.java:271)
at com.google.gerrit.httpd.restapi.RestApiServlet.invokeRestEndpointWithRetry(RestApiServlet.java:820)
at com.google.gerrit.httpd.restapi.RestApiServlet.invokeRestReadViewWithRetry(RestApiServlet.java:718)
at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
...
Bug: Issue 12952
Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I90e5439a00ae613b1b46e04cf7152508c1a0fecc