Merge branch 'stable-2.15'
* stable-2.15:
Upgrade bazlets to latest stable-2.15 to build with 2.15.10 API
Upgrade bazlets to latest stable-2.15 to build with 2.15.9 API
Upgrade bazlets to latest stable-2.15 to build with 2.15.8 API
Upgrade bazlets to latest stable-2.14 to build with 2.14.18 API
Format Java files with google-java-format
Bazel: Include eclipse-out directory in .bazelignore
Add explanatory comment to empty BUILD file(s)
Add explanatory comment to empty BUILD file(s)
Migrate (i.e. move) `tools/bazel.rc` to `.bazelrc`
Upgrade bazlets to latest stable-2.15 to build with 2.15.7 API
Upgrade bazlets to latest stable-2.14 to build with 2.14.17 API
Upgrade bazlets to latest stable-2.15 to build with 2.15.6 API
WORKSPACE: Make commented out local_path line spaces indent consistent
WORKSPACE: Make commented out local_path line spaces indent consistent
Upgrade bazlets to latest stable-2.14 to build with 2.14.16 API
Remove redundant entries from .gitignore
Align Eclipse compiler settings with core Gerrit's
bazlets: Replace native.git_repository with skylark rule
bazlets: Replace native.git_repository with skylark rule
Format all Bazel build files with buildifier
Upgrade bazlets to latest stable-2.15 to build with 2.15.5 API
Remove explicit dependency on commons-dbcp
Upgrade bazlets to latest stable-2.14 to build with 2.14.15 API
Update bazlets to latest stable-2.15 to build with 2.15.4 API
Remove explicit dependency on commons-dbcp
Format all build files with buildifier
Update bazlets to latest stable-2.14 to build with released 2.14.14 API
Migrate (i.e. move) `tools/bazel.rc` to `.bazelrc`
Format Java files with google-java-format 1.6
Format BUILD file with buildifier
Update bazlets to latest revision on stable-2.14
Fix common-dbcp dependency name for in-tree build
Remove unused imports
Add configurable support for in-progress status
Add config option to control jobs panel position
Add config option for panels jobs ordering
Change-Id: I67593f3cfbe8cfe014e1f8d8820f317e20522710
diff --git a/.bazelignore b/.bazelignore
new file mode 100644
index 0000000..30f1613
--- /dev/null
+++ b/.bazelignore
@@ -0,0 +1 @@
+eclipse-out
diff --git a/.gitignore b/.gitignore
index 737b856..d09104d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,16 +1,7 @@
-/target
/.classpath
/.project
/.settings
-/.buckconfig.local
-/.buckd
-/buck-cache
-/buck-out
-/local.properties
*.pyc
-.buckversion
-.watchmanconfig
-/bucklets
bazel-bin
bazel-genfiles
bazel-out
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f63f41a
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,127 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=enabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=protected
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.processAnnotations=enabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/WORKSPACE b/WORKSPACE
index b2ca20d..7d3080f 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -4,7 +4,7 @@
load_bazlets(
commit = "c15e64db2a87c0453427ff45f79d1ed3899b5d92",
- # local_path = "/home/<user>/projects/bazlets",
+ #local_path = "/home/<user>/projects/bazlets",
)
# Snapshot Plugin API
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/ConfigInfo.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/ConfigInfo.java
index 5571efa..2d3f1db 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/ConfigInfo.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/ConfigInfo.java
@@ -25,6 +25,16 @@
final native boolean
showJobsDropDownPanel() /*-{ return this.show_jobs_drop_down_panel ? true : false; }-*/;
+ final native boolean
+ showJobsBelowRelatedInfoBlock() /*-{ return this.show_jobs_below_related_info_block ? true : false; }-*/;
+
+ final native boolean
+ enableInProgressStatus() /*-{ return this.enable_in_progress_status ? true : false; }-*/;
+
+ final native String sortJobsPanel() /*-{ return this.sort_jobs_panel }-*/;
+
+ final native String sortJobsDropDownPanel() /*-{ return this.sort_jobs_drop_down_panel }-*/;
+
final native void setShowJobsSummaryPanel(boolean s) /*-{ this.show_jobs_summary_panel = s; }-*/;
final native void setShowJobsPanel(boolean s) /*-{ this.show_jobs_panel = s; }-*/;
@@ -32,6 +42,16 @@
final native void setShowJobsDropDownPanel(
boolean s) /*-{ this.show_jobs_drop_down_panel = s; }-*/;
+ final native void setShowJobsBelowRelatedInfoBlock(
+ boolean s) /*-{ this.show_jobs_below_related_info_block = s; }-*/;
+
+ final native void setEnableInProgressStatus() /*-{ this.enable_in_progress_status = s; }-*/;
+
+ final native void setSortJobsPanel(String s) /*-{ this.sort_jobs_panel = s; }-*/;
+
+ final native void setSortJobsDropDownPanel(
+ String s) /*-{ this.sort_jobs_drop_down_panel = s; }-*/;
+
static ConfigInfo create() {
ConfigInfo g = (ConfigInfo) createObject();
return g;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java
index 8079306..320ab2c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java
@@ -34,6 +34,12 @@
/** Extension for change screen that displays a status in the header bar. */
public class JobsDropDownPanel extends FlowPanel {
static class Factory implements Panel.EntryPoint {
+ private final ConfigInfo info;
+
+ public Factory(ConfigInfo info) {
+ this.info = info;
+ }
+
@Override
public void onLoad(Panel panel) {
RevisionInfo rev = panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
@@ -41,11 +47,11 @@
return;
}
- panel.setWidget(new JobsDropDownPanel(panel));
+ panel.setWidget(new JobsDropDownPanel(panel, info));
}
}
- JobsDropDownPanel(Panel panel) {
+ JobsDropDownPanel(Panel panel, ConfigInfo info) {
ChangeInfo change = panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
String decodedChangeId = URL.decodePathSegment(change.id());
RevisionInfo rev = panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
@@ -54,7 +60,7 @@
.view("revisions")
.id(rev.id())
.view(Plugin.get().getPluginName(), "verifications")
- .addParameter("sort", "REPORTER")
+ .addParameter("sort", info.sortJobsDropDownPanel())
.addParameter("filter", "CURRENT")
.get(
new AsyncCallback<NativeMap<VerificationInfo>>() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java
index 151f21a..8c237c1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java
@@ -33,7 +33,15 @@
/** Extension for change screen that displays a status below the label info. */
public class JobsPanel extends FlowPanel {
+ private final ConfigInfo info;
+
static class Factory implements Panel.EntryPoint {
+ private final ConfigInfo info;
+
+ public Factory(ConfigInfo info) {
+ this.info = info;
+ }
+
@Override
public void onLoad(Panel panel) {
RevisionInfo rev = panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
@@ -41,11 +49,12 @@
return;
}
- panel.setWidget(new JobsPanel(panel));
+ panel.setWidget(new JobsPanel(panel, info));
}
}
- JobsPanel(Panel panel) {
+ JobsPanel(Panel panel, ConfigInfo info) {
+ this.info = info;
final ChangeInfo change = panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
String decodedChangeId = URL.decodePathSegment(change.id());
final RevisionInfo rev = panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
@@ -54,7 +63,7 @@
.view("revisions")
.id(rev.id())
.view(Plugin.get().getPluginName(), "verifications")
- .addParameter("sort", "REPORTER")
+ .addParameter("sort", info.sortJobsPanel())
.addParameter("filter", "CURRENT")
.get(
new AsyncCallback<NativeMap<VerificationInfo>>() {
@@ -81,7 +90,11 @@
HorizontalPanel p = new HorizontalPanel();
short vote = jobs.get(key).value();
if (vote > 0) {
- p.add(new Image(VerifyStatusPlugin.RESOURCES.greenCheck()));
+ p.add(
+ new Image(
+ ((vote == 2) && info.enableInProgressStatus())
+ ? VerifyStatusPlugin.RESOURCES.progress()
+ : VerifyStatusPlugin.RESOURCES.greenCheck()));
} else if (vote < 0) {
p.add(new Image(VerifyStatusPlugin.RESOURCES.redNot()));
} else if (vote == 0) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/Resources.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/Resources.java
index f71659c..eff41cd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/Resources.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/Resources.java
@@ -36,4 +36,7 @@
@Source("donut.png")
public ImageResource rerun();
+
+ @Source("loader.gif")
+ public ImageResource progress();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/VerifyStatusPlugin.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/VerifyStatusPlugin.java
index 58c22f1..34de386 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/VerifyStatusPlugin.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/VerifyStatusPlugin.java
@@ -44,15 +44,17 @@
if (info.showJobsPanel()) {
Plugin.get()
.panel(
- GerritUiExtensionPoint.CHANGE_SCREEN_BELOW_CHANGE_INFO_BLOCK,
- new JobsPanel.Factory(),
+ info.showJobsBelowRelatedInfoBlock()
+ ? GerritUiExtensionPoint.CHANGE_SCREEN_BELOW_RELATED_INFO_BLOCK
+ : GerritUiExtensionPoint.CHANGE_SCREEN_BELOW_CHANGE_INFO_BLOCK,
+ new JobsPanel.Factory(info),
"VerifyStatusJobsPanel");
}
if (info.showJobsDropDownPanel()) {
Plugin.get()
.panel(
GerritUiExtensionPoint.CHANGE_SCREEN_HEADER_RIGHT_OF_POP_DOWNS,
- new JobsDropDownPanel.Factory(),
+ new JobsDropDownPanel.Factory(info),
"VerifyStatusJobsDropDownPanel");
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/loader.gif b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/loader.gif
new file mode 100644
index 0000000..e40f19a
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/loader.gif
Binary files differ
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/public/verify-status.css b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/public/verify-status.css
index caf61ac..c8915d3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/public/verify-status.css
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/public/verify-status.css
@@ -2,3 +2,6 @@
border-spacing: 0px 5px;
}
+div.gwt-TabPanelBottom div {
+ height: 100% !important;
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetConfig.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetConfig.java
index 36ed04f..3ba9176 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetConfig.java
@@ -36,6 +36,11 @@
info.showJobsPanel = cfg.getBoolean("showJobsPanel", true);
info.showJobsDropDownPanel = cfg.getBoolean("showJobsDropDownPanel", true);
info.showJobsSummaryPanel = cfg.getBoolean("showJobsSummaryPanel", true);
+ info.showJobsBelowRelatedInfoBlock = cfg.getBoolean("showJobsBelowRelatedInfoBlock", false);
+ info.enableInProgressStatus = cfg.getBoolean("enableInProgressStatus", false);
+ info.sortJobsPanel = cfg.getEnum(JobsSorting.values(), "sortJobsPanel", JobsSorting.REPORTER);
+ info.sortJobsDropDownPanel =
+ cfg.getEnum(JobsSorting.values(), "sortJobsDropDownPanel", JobsSorting.REPORTER);
return info;
}
@@ -43,5 +48,9 @@
Boolean showJobsPanel;
Boolean showJobsDropDownPanel;
Boolean showJobsSummaryPanel;
+ Boolean showJobsBelowRelatedInfoBlock;
+ Boolean enableInProgressStatus;
+ JobsSorting sortJobsPanel;
+ JobsSorting sortJobsDropDownPanel;
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetVerifications.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetVerifications.java
index b50606b..74ee698 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetVerifications.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetVerifications.java
@@ -16,6 +16,7 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import com.google.gerrit.common.Nullable;
import com.google.gerrit.extensions.restapi.RestReadView;
import com.google.gerrit.server.change.RevisionResource;
import com.google.gwtorm.server.OrmException;
@@ -39,17 +40,14 @@
this.schemaFactory = schemaFactory;
}
- private String sort;
- private String filter;
-
@Option(
name = "--sort",
aliases = {"-s"},
metaVar = "SORT",
usage = "Sort the list by an entry")
- public void setSort(String sort) {
- this.sort = sort.toUpperCase();
- }
+ private JobsSorting sort;
+
+ private String filter;
@Option(
name = "--filter",
@@ -75,44 +73,53 @@
return info;
}
- private void sortJobs(List<PatchSetVerification> jobs, String order) {
- if (order.equals("REPORTER")) {
- // sort the jobs list by reporter(A-Z)/Name(A-Z)/Granted(Z-A)
- Collections.sort(
- jobs,
- new Comparator<PatchSetVerification>() {
- @Override
- public int compare(PatchSetVerification a, PatchSetVerification b) {
- return new CompareToBuilder()
- .append(a.getReporter(), b.getReporter())
- .append(a.getName(), b.getName())
- .append(b.getGranted(), a.getGranted())
- .toComparison();
- }
- });
- } else if (order.equals("NAME")) {
- // sort the jobs list by Name(A-Z)/Granted(Z-A)
- Collections.sort(
- jobs,
- new Comparator<PatchSetVerification>() {
- @Override
- public int compare(PatchSetVerification a, PatchSetVerification b) {
- return new CompareToBuilder()
- .append(a.getName(), b.getName())
- .append(b.getGranted(), a.getGranted())
- .toComparison();
- }
- });
- } else if (order.equals("DATE")) {
- // sort the jobs list by Granted(Z-A)
- Collections.sort(
- jobs,
- new Comparator<PatchSetVerification>() {
- @Override
- public int compare(PatchSetVerification a, PatchSetVerification b) {
- return new CompareToBuilder().append(b.getGranted(), a.getGranted()).toComparison();
- }
- });
+ private void sortJobs(List<PatchSetVerification> jobs, @Nullable JobsSorting order) {
+ if (order == null) {
+ return;
+ }
+ switch (order) {
+ case REPORTER:
+ // sort the jobs list by reporter(A-Z)/Name(A-Z)/Granted(Z-A)
+ Collections.sort(
+ jobs,
+ new Comparator<PatchSetVerification>() {
+ @Override
+ public int compare(PatchSetVerification a, PatchSetVerification b) {
+ return new CompareToBuilder()
+ .append(a.getReporter(), b.getReporter())
+ .append(a.getName(), b.getName())
+ .append(b.getGranted(), a.getGranted())
+ .toComparison();
+ }
+ });
+ break;
+ case NAME:
+ // sort the jobs list by Name(A-Z)/Granted(Z-A)
+ Collections.sort(
+ jobs,
+ new Comparator<PatchSetVerification>() {
+ @Override
+ public int compare(PatchSetVerification a, PatchSetVerification b) {
+ return new CompareToBuilder()
+ .append(a.getName(), b.getName())
+ .append(b.getGranted(), a.getGranted())
+ .toComparison();
+ }
+ });
+ break;
+ case DATE:
+ // sort the jobs list by Granted(Z-A)
+ Collections.sort(
+ jobs,
+ new Comparator<PatchSetVerification>() {
+ @Override
+ public int compare(PatchSetVerification a, PatchSetVerification b) {
+ return new CompareToBuilder().append(b.getGranted(), a.getGranted()).toComparison();
+ }
+ });
+ break;
+ default:
+ break;
}
}
@@ -131,7 +138,7 @@
if (filter != null && !filter.isEmpty()) {
if (filter.equals("CURRENT")) {
// logic to get current jobs assumes list is sorted by reporter
- sortJobs(result, "REPORTER");
+ sortJobs(result, JobsSorting.REPORTER);
isSorted = true;
String prevReporter = "";
String prevName = "";
@@ -164,14 +171,8 @@
}
// sort jobs
- if (sort != null && !sort.isEmpty()) {
- if (sort.equals("REPORTER") && !isSorted) {
- sortJobs(jobs, "REPORTER");
- } else if (sort.equals("NAME")) {
- sortJobs(jobs, "NAME");
- } else if (sort.equals("DATE")) {
- sortJobs(jobs, "DATE");
- }
+ if ((sort != JobsSorting.REPORTER) || !isSorted) {
+ sortJobs(jobs, sort);
}
for (PatchSetVerification v : jobs) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/JobsSorting.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/JobsSorting.java
new file mode 100644
index 0000000..cb4b7dc
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/JobsSorting.java
@@ -0,0 +1,21 @@
+// Copyright (C) 2017 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.verifystatus.server;
+
+public enum JobsSorting {
+ DATE,
+ REPORTER,
+ NAME
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/PutConfig.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/PutConfig.java
index 8fbaa7b..a9de8b0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/PutConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/PutConfig.java
@@ -37,6 +37,10 @@
public Boolean showJobsPanel;
public Boolean showJobsDropDownPanel;
public Boolean showJobsSummaryPanel;
+ public Boolean showJobsBelowRelatedInfoBlock;
+ public Boolean enableInProgressStatus;
+ public String sortJobsPanel;
+ public String sortJobsDropDownPanel;
}
private final PluginConfigFactory cfgFactory;
@@ -74,6 +78,34 @@
} else {
cfg.unset("plugin", pluginName, "showJobsSummaryPanel");
}
+ if (input.showJobsBelowRelatedInfoBlock != null) {
+ cfg.setBoolean(
+ "plugin",
+ pluginName,
+ "showJobsBelowRelatedInfoBlock",
+ input.showJobsBelowRelatedInfoBlock);
+ } else {
+ cfg.unset("plugin", pluginName, "showJobsBelowRelatedInfoBlock");
+ }
+ if (input.enableInProgressStatus != null) {
+ cfg.setBoolean("plugin", pluginName, "enableInProgressStatus", input.enableInProgressStatus);
+ } else {
+ cfg.unset("plugin", pluginName, "enableInProgressStatus");
+ }
+ if (input.sortJobsPanel != null) {
+ cfg.setEnum("plugin", pluginName, "sortJobsPanel", JobsSorting.valueOf(input.sortJobsPanel));
+ } else {
+ cfg.unset("plugin", pluginName, "sortJobsPanel");
+ }
+ if (input.sortJobsDropDownPanel != null) {
+ cfg.setEnum(
+ "plugin",
+ pluginName,
+ "sortJobsDropDownPanel",
+ JobsSorting.valueOf(input.sortJobsDropDownPanel));
+ } else {
+ cfg.unset("plugin", pluginName, "sortJobsDropDownPanel");
+ }
cfg.save();
cfgFactory.getFromGerritConfig(pluginName, true);
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index f80a646..d037730 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -72,13 +72,25 @@
|:------------- |:-------|
|less than 0 |Failed |
|0 |Unstable|
-|greater than 0 |Passed |
+|1 |Passed |
+|2 |In-progress if enableInProgressStatus=true, otherwise Passed|
+|greater than 2 |Passed |
The information icon is an indicator that a job has abstained from voting
(or is a non-voting job). Abstaining typically indicates that a job's
score may not factor into determining the combined vote.
+If enableInProgressStatus is true then the loading icon is an indicator that a job
+has been set with value 2 and identified as 'in progress'.
+_NOTE_: The Jenkins [Gerrit verify status reporter plugin] currently doesn't
+support in-progress or any equivalent status so enabling progress status makes
+sense only if one uses own postbuild/prebuild custom pipeline logic for setting
+statuses via API. For instance:
+1. In-progress status with value=2 is sent via API as the first step of the build.
+2. From postbuild section actual finish status is calculated in groovy script and
+is send via API.
+
### <a id="configure-panels"> @PLUGIN@ configure-panels
@@ -91,11 +103,15 @@
#### Parameters
-|Field Name |Description|
-|:----------------------|:----------|
-|showJobsPanel | Whether jobs panel should be displayed (default to true)|
-|showJobsDropDownPanel | Whether jobs drop down panel should be displayed (default to true)|
-|showJobsSummaryPanel | Whether jobs summary panel should be displayed (default to true)|
+|Field Name |Description|
+|:-----------------------------|:----------|
+|showJobsPanel | Whether jobs panel should be displayed (default to true)|
+|showJobsDropDownPanel | Whether jobs drop down panel should be displayed (default to true)|
+|showJobsSummaryPanel | Whether jobs summary panel should be displayed (default to true)|
+|showJobsBelowRelatedInfoBlock | Whether jobs panel should be positioned below related info block (default to false)|
+|enableInProgressStatus | Whether value=2 should be treated as 'in progress' status (default to false)|
+|sortJobsPanel | The order of jobs sorting on jobs panel (REPORTER,NAME,DATE default to REPORTER). Both upper and lower cases are allowed.|
+|sortJobsDropDownPanel | The order of jobs sorting on jobs drop down panel (REPORTER,NAME,DATE default to REPORTER). Both upper and lower cases are allowed.|
#### Example
diff --git a/src/main/resources/Documentation/rest-api-config.md b/src/main/resources/Documentation/rest-api-config.md
index c4936a5..de16a62 100644
--- a/src/main/resources/Documentation/rest-api-config.md
+++ b/src/main/resources/Documentation/rest-api-config.md
@@ -67,11 +67,15 @@
The `ConfigInfo` entity contains the configuration of the @PLUGIN@
plugin.
-|Field Name |Description|
-|:------------------------|:----------|
-|show_jobs_panel | Whether jobs panel should be displayed|
-|show_jobs_drop_down_panel| Whether jobs drop down panel should be displayed|
-|show_jobs_summary_panel | Whether jobs summary panel should be displayed|
+|Field Name |Description|
+|:----------------------------------|:----------|
+|show_jobs_panel | Whether jobs panel should be displayed|
+|show_jobs_drop_down_panel | Whether jobs drop down panel should be displayed|
+|show_jobs_summary_panel | Whether jobs summary panel should be displayed|
+|show_jobs_below_related_info_block | Whether jobs panel should be positioned below related info block|
+|enable_in_progress_status | Whether value=2 should be treated as 'in progress' status|
+|sort_jobs_panel | The order of jobs sorting on jobs panel (REPORTER,NAME,DATE)|
+|sort_jobs_drop_down_panel | The order of jobs sorting on jobs drop down panel (REPORTER,NAME,DATE)|
SEE ALSO
diff --git a/tools/bzl/BUILD b/tools/bzl/BUILD
index e69de29..c5ed0b7 100644
--- a/tools/bzl/BUILD
+++ b/tools/bzl/BUILD
@@ -0,0 +1 @@
+# Empty file required by Bazel