From 64c1b3e206240abbb71d78482f18ec1d9faa06ec Mon Sep 17 00:00:00 2001 From: Luca Milanesio Date: Tue, 18 Mar 2014 08:43:51 +0000 Subject: [PATCH] More detailed error message when failing to upload new change When the uploaded change cannot be created on the underlying Git repository, a more descriptive error message is displayed on both client and server side. This allows to troubleshoot internal errors (e.g. JGit lock failures or other causes) and help out in the resolution. Example: Previous message in case of ref contention: internal server error New message: Unable to create changes: LOCK_FAILED Issue: 2284 GerritForge-Issue: GERICS-312 Change-Id: I8bfebc350c964484f25d575e96261d4a422b02d0 --- .../google/gerrit/server/git/ReceiveCommits.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java index 0256322891..82a5248d61 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java @@ -711,16 +711,29 @@ public class ReceiveCommits { return; } + List lastCreateChangeErrors = Lists.newArrayList(); for (CreateRequest create : newChanges) { if (create.cmd.getResult() == OK) { okToInsert++; + } else { + String createChangeResult = + String.format("%s %s", + create.cmd.getResult(), + Strings.nullToEmpty(create.cmd.getMessage())).trim(); + lastCreateChangeErrors.add(createChangeResult); + log.error(String.format("Command %s on %s:%s not completed: %s", + create.cmd.getType(), + project.getName(), + create.cmd.getRefName(), + createChangeResult)); } } if (okToInsert != replaceCount + newChanges.size()) { // One or more new references failed to create. Assume the // system isn't working correctly anymore and abort. - reject(magicBranch.cmd, "internal server error"); + reject(magicBranch.cmd, "Unable to create changes: " + + Joiner.on(' ').join(lastCreateChangeErrors)); log.error(String.format( "Only %d of %d new change refs created in %s; aborting", okToInsert, replaceCount + newChanges.size(), project.getName()));