Handle NPE more gracefully, consolidate modules in AutomergerModule
Change-Id: Ia5f9c3abf1cfbe8e1b864140f9d393f6e2b4f1a5
diff --git a/BUCK b/BUCK
index bde84db..95b0c44 100644
--- a/BUCK
+++ b/BUCK
@@ -7,8 +7,7 @@
resources = glob(['src/main/**/*']),
manifest_entries = [
'Gerrit-PluginName: automerger',
- 'Gerrit-Module: com.googlesource.gerrit.plugins.automerger.Module',
- 'Gerrit-HttpModule: com.googlesource.gerrit.plugins.automerger.HttpModule',
+ 'Gerrit-Module: com.googlesource.gerrit.plugins.automerger.AutomergerModule',
'Implementation-Title: Automerger plugin',
'Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/automerger',
],
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
index d09a9f9..8c49cf4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
@@ -55,6 +55,10 @@
Map<String, Boolean> branchMap = input.branchMap;
Change change = rev.getChange();
+ if (branchMap == null) {
+ log.debug("Branch map is empty for change {}", change.getKey().get());
+ return Response.none();
+ }
String revision = rev.getPatchSet().getRevision().get();
MultipleDownstreamMergeInput mdsMergeInput = new MultipleDownstreamMergeInput();
@@ -66,6 +70,8 @@
mdsMergeInput.obsoleteRevision = revision;
mdsMergeInput.currentRevision = revision;
+ log.debug("Multiple downstream merge input: {}", mdsMergeInput.dsBranchMap);
+
dsCreator.createMergesAndHandleConflicts(mdsMergeInput);
return Response.none();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/Module.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergerModule.java
similarity index 88%
rename from src/main/java/com/googlesource/gerrit/plugins/automerger/Module.java
rename to src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergerModule.java
index 6020eb4..cfca211 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergerModule.java
@@ -24,9 +24,11 @@
import com.google.gerrit.extensions.events.TopicEditedListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.extensions.restapi.RestApiModule;
+import com.google.gerrit.extensions.webui.JavaScriptPlugin;
+import com.google.gerrit.extensions.webui.WebUiPlugin;
import com.google.inject.AbstractModule;
-public class Module extends AbstractModule {
+public class AutomergerModule extends AbstractModule {
@Override
protected void configure() {
@@ -44,5 +46,6 @@
post(REVISION_KIND, "config-downstream").to(ConfigDownstreamAction.class);
}
});
+ DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(new JavaScriptPlugin("automerger.js"));
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
index 8c0e4cb..e203ec3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
@@ -114,6 +114,7 @@
applyConfig(projectSet, config.getMergeConfig(fromBranch));
applyConfig(projectSet, config.getMergeConfig(fromBranch, toBranch));
+ log.debug("Project set for {} to {} is {}", fromBranch, toBranch, projectSet);
return projectSet;
} catch (RestApiException | IOException e) {
log.error("Error reading manifest for {}!", fromBranch, e);
@@ -152,6 +153,9 @@
// If manifest does not exist, return empty set.
private Set<String> getManifestProjects(String fromBranch) throws RestApiException, IOException {
Map fromBranchConfig = config.getMergeConfig(fromBranch);
+ if (fromBranchConfig == null) {
+ return new HashSet<>();
+ }
Map<String, String> manifestProjectInfo = getManifestInfoFromConfig(fromBranchConfig);
return getManifestProjectsForBranch(manifestProjectInfo, fromBranch);
}
@@ -161,6 +165,9 @@
private Set<String> getManifestProjects(String fromBranch, String toBranch)
throws RestApiException, IOException {
Map<String, Object> toBranchConfig = config.getMergeConfig(fromBranch, toBranch);
+ if (toBranchConfig == null) {
+ return new HashSet<>();
+ }
Map<String, String> manifestProjectInfo = getManifestInfoFromConfig(toBranchConfig);
return getManifestProjectsForBranch(manifestProjectInfo, toBranch);
}
@@ -175,11 +182,15 @@
ManifestReader manifestReader = new ManifestReader(branch, manifestConfig.asString());
return manifestReader.getProjects();
} catch (ResourceNotFoundException e) {
+ log.info("Manifest for {} not found", branch);
return new HashSet<>();
}
}
private void applyConfig(Set<String> projects, Map givenConfig) {
+ if (givenConfig == null) {
+ return;
+ }
if (givenConfig.containsKey("set_projects")) {
List<String> setProjects = (ArrayList<String>) givenConfig.get("set_projects");
projects.clear();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/HttpModule.java
deleted file mode 100644
index 30887d9..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/HttpModule.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.googlesource.gerrit.plugins.automerger;
-
-import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.gerrit.extensions.webui.JavaScriptPlugin;
-import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.inject.AbstractModule;
-
-public class HttpModule extends AbstractModule {
- @Override
- protected void configure() {
- DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(new JavaScriptPlugin("automerger.js"));
- }
-}