Issue 3626: NullPointerException / IndexOutOfBoundsException on newly created repos that don't have any commits yet
Status:  New
Owner: ----
Reported by tsuna...@gmail.com, Oct 21, 2015
Affected Version: 2.11.3, 2.11.4

What steps will reproduce the problem?
1. Create a new project with an empty Git repo
2. Send some changes for review
3. Try to submit one of the changes farther into the review stream

What is the expected output? What do you see instead?
Gerrit shouldn't get a NullPointerException / IndexOutOfBoundsException but does, see stack traces below.

Please provide any additional information below.


[2015-10-21 00:05:45,120] ERROR com.google.gerrit.server.git.ChangeMergeQueue : Merge attempt for newproj1,refs/heads/master failed
java.lang.NullPointerException
        at com.google.gerrit.server.git.MergeOp.updateBranch(MergeOp.java:665)
        at com.google.gerrit.server.git.MergeOp.merge(MergeOp.java:281)
        at com.google.gerrit.server.git.ChangeMergeQueue$2.call(ChangeMergeQueue.java:208)
        at com.google.gerrit.server.git.ChangeMergeQueue$2.call(ChangeMergeQueue.java:205)
        at com.google.gerrit.server.util.RequestScopePropagator$5.call(RequestScopePropagator.java:222)
        at com.google.gerrit.server.util.RequestScopePropagator$4.call(RequestScopePropagator.java:201)
        at com.google.gerrit.server.git.PerThreadRequestScope$Propagator$1.call(PerThreadRequestScope.java:75)
        at com.google.gerrit.server.git.ChangeMergeQueue.mergeImpl(ChangeMergeQueue.java:205)
        at com.google.gerrit.server.git.ChangeMergeQueue.access$200(ChangeMergeQueue.java:54)
        at com.google.gerrit.server.git.ChangeMergeQueue$MergeEntry.run(ChangeMergeQueue.java:248)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
        at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:379)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
[2015-10-21 00:05:45,202] ERROR com.google.gerrit.server.git.ChangeMergeQueue : Merge attempt for newproj2,refs/heads/master failed
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.rangeCheck(ArrayList.java:635)
        at java.util.ArrayList.get(ArrayList.java:411)
        at com.google.gerrit.server.git.strategy.MergeIfNecessary._run(MergeIfNecessary.java:39)
        at com.google.gerrit.server.git.strategy.SubmitStrategy.run(SubmitStrategy.java:118)
        at com.google.gerrit.server.git.MergeOp.preMerge(MergeOp.java:410)
        at com.google.gerrit.server.git.MergeOp.merge(MergeOp.java:280)
        at com.google.gerrit.server.git.ChangeMergeQueue$2.call(ChangeMergeQueue.java:208)
        at com.google.gerrit.server.git.ChangeMergeQueue$2.call(ChangeMergeQueue.java:205)
        at com.google.gerrit.server.util.RequestScopePropagator$5.call(RequestScopePropagator.java:222)
        at com.google.gerrit.server.util.RequestScopePropagator$4.call(RequestScopePropagator.java:201)
        at com.google.gerrit.server.git.PerThreadRequestScope$Propagator$1.call(PerThreadRequestScope.java:75)
        at com.google.gerrit.server.git.ChangeMergeQueue.mergeImpl(ChangeMergeQueue.java:205)
        at com.google.gerrit.server.git.ChangeMergeQueue.access$200(ChangeMergeQueue.java:54)
        at com.google.gerrit.server.git.ChangeMergeQueue$MergeEntry.run(ChangeMergeQueue.java:248)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
        at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:379)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

Oct 21, 2015
Project Member #1 david.pu...@sonymobile.com
Reproducible with the following steps:

1. Create a new project without the initial commit
2. Clone the project
3. Create two commits and push for review
4. Approve and try to submit the second one (which can't be submitted because the first one is still open).

Note that although an exception is thrown, the change will merge successfully when the dependency change has been merged.

I don't think this is critical enough to fix on stable-2.11.  I have not tried to reproduce it on master.