Merge changes I2695c6df,I51828250,I9d97c84e,I93589a40,Id5a9b5c7
* changes:
Add support for Oracle database
Support installation of proprietary libraries in $site/lib
ScriptRunner: strip SQL delimiter if SqlDialect doesn't support it
Migrate schema to meet 30 char length of database id limitation
Fix preUpdateSchema to support multiple version steps
diff --git a/.gitmodules b/.gitmodules
index e45868b..2ac959c 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,6 +10,6 @@
path = plugins/commit-message-length-validator
url = https://gerrit.googlesource.com/plugins/commit-message-length-validator
-[submodule "plugins/helloworld"]
- path = plugins/helloworld
- url = https://gerrit.googlesource.com/plugins/helloworld
+[submodule "plugins/cookbook-plugin"]
+ path = plugins/cookbook-plugin
+ url = https://gerrit.googlesource.com/plugins/cookbook-plugin
diff --git a/BUCK b/BUCK
index e454d37..b1a0c75 100644
--- a/BUCK
+++ b/BUCK
@@ -61,7 +61,7 @@
java_library(
name = 'plugin-lib',
- deps = PLUGIN_API,
+ deps = PLUGIN_API + ['//lib:servlet-api-3_0'],
export_deps = True,
visibility = ['PUBLIC'],
)
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index 8e85b6d..3360cdf 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -1975,8 +1975,8 @@
from the user's account object matched under `ldap.accountBase`.
Attributes such as `${dn}` or `${uidNumber}` may be useful.
+
-Default is `(memberUid=${username})` for RFC 2307,
-and unset (disabled) for Active Directory.
+Default is `(|(memberUid=${username})(gidNumber=${gidNumber}))` for
+RFC 2307, and unset (disabled) for Active Directory.
[[ldap.groupName]]ldap.groupName::
+
diff --git a/Documentation/dev-plugins.txt b/Documentation/dev-plugins.txt
index f8a56b5..7765246 100644
--- a/Documentation/dev-plugins.txt
+++ b/Documentation/dev-plugins.txt
@@ -357,7 +357,7 @@
====
@RequiresCapability("printHello")
- @CommandMetaData(name="print", descr="Print greeting in different languages")
+ @CommandMetaData(name="print", description="Print greeting in different languages")
public final class PrintHelloWorldCommand extends SshCommand {
...
====
@@ -533,6 +533,12 @@
If a discovered file name beings with `cmd-` it will be clustered
into a 'Commands' section of the generated index page.
+If a discovered file name beings with `servlet-` it will be clustered
+into a 'Servlets' section of the generated index page.
+
+If a discovered file name beings with `rest-api-` it will be clustered
+into a 'REST APIs' section of the generated index page.
+
All other files are clustered under a 'Documentation' section.
Some optional information from the manifest is extracted and
diff --git a/ReleaseNotes/ReleaseNotes-2.6.2.txt b/ReleaseNotes/ReleaseNotes-2.6.2.txt
index cf963c2..2b78cb4 100644
--- a/ReleaseNotes/ReleaseNotes-2.6.2.txt
+++ b/ReleaseNotes/ReleaseNotes-2.6.2.txt
@@ -38,6 +38,12 @@
* Allow label values to be configured with no text.
+* link:https://code.google.com/p/gerrit/issues/detail?id=1966[Issue 1966]:
+Fix Gerrit plugins under Tomcat by avoiding Guice static filter.
+
+* link:https://code.google.com/p/gerrit/issues/detail?id=2054[Issue 2054]:
+Expand capabilities of `ldap.groupMemberPattern`.
+
No other changes since 2.6.1.
diff --git a/ReleaseNotes/ReleaseNotes-2.8.txt b/ReleaseNotes/ReleaseNotes-2.8.txt
index 0cd8b5d..77c4396 100644
--- a/ReleaseNotes/ReleaseNotes-2.8.txt
+++ b/ReleaseNotes/ReleaseNotes-2.8.txt
@@ -95,6 +95,12 @@
panels. This makes it easier to filter out CI-based comments using user
scripts.
+* Copy reviewed flag to new patch sets for identical files.
++
+If a user has already seen and reviewed a file, the 'reviewed' flag is forwarded
+on to the next patch set when the content of the file in the next patch set is
+identical to the reviewed file.
+
REST API
~~~~~~~~
@@ -280,6 +286,13 @@
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config-validation.html#pre-merge-validation[
pre-merge validation steps].
+* Plugins may now provide
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/dev-plugins.html#capabilities[
+Global capabilities].
+
+* The "hello world" plugin is replaced with the "cookbook plugin" which has more
+examples of the plugin API's usage.
+
Commit Message Length Checker
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -293,13 +306,21 @@
* The `{$name}` placeholder is optional when replicating a single project,
allowing a single project to be replicated under a different name.
-* Projects can be matched with wildcard or regex patterns in `replication.config`.
+* Project names can be matched with wildcard or regex patterns in `replication.config`.
* The `replication start` command does not exit until replication is finished
when the `--wait` option is used.
* The `replication start` command displays a summary of the replication status.
+* Retry counts are added to replication task names, so they can be seen in the
+output of the `show-queue` command.
+
+* The `remoteNameStyle` option can be set to `basenameOnly` to replicate projects
+using only the basename on the target server.
+
+* The `startReplication` global capability is now provided by the plugin.
+
ssh
~~~
@@ -321,6 +342,9 @@
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/cmd-stream-events.html[
`stream-events` command].
+* The link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/cmd-show-queue.html[
+`show-queue` command] now shows the time that a task was added to the queue.
+
Daemon
~~~~~~
@@ -359,6 +383,9 @@
The link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/cmd-hook-commit-msg.html[
`commit-msg` hook].
+* link:https://code.google.com/p/gerrit/issues/detail?id=2045[Issue 2045]:
+Define user scope when parsing server config.
+
Web UI
~~~~~~
@@ -437,6 +464,8 @@
The link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/cmd-review.html[
`review` command].
+* The `@CommandMetaData(descr)` annotation is deprecated in favor of `@CommandMetaData(description)`.
+
Emails
~~~~~~
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
index 2f5f87d..d28c4d9 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
@@ -470,7 +470,9 @@
if (rest.isEmpty()) {
Gerrit.display(token, panel== null
- ? (useChangeScreen2 ? new ChangeScreen2(id, null) : new ChangeScreen(id))
+ ? (useChangeScreen2
+ ? new ChangeScreen2(id, null, false)
+ : new ChangeScreen(id))
: new NotFoundScreen());
return;
}
@@ -502,7 +504,7 @@
} else {
if (panel == null) {
Gerrit.display(token, useChangeScreen2
- ? new ChangeScreen2(id, String.valueOf(ps.get()))
+ ? new ChangeScreen2(id, String.valueOf(ps.get()), false)
: new ChangeScreen(id));
} else if ("publish".equals(panel)) {
publish(ps);
@@ -524,7 +526,7 @@
rest = "";
}
useChangeScreen2 = true;
- Gerrit.display(token, new ChangeScreen2(id, rest));
+ Gerrit.display(token, new ChangeScreen2(id, rest, false));
}
private static void publish(final PatchSet.Id ps) {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
index aff37f8..43f9b6d 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
@@ -115,6 +115,7 @@
private UpdateCheckTimer updateCheck;
private Timestamp lastDisplayedUpdate;
private UpdateAvailableBar updateAvailable;
+ private boolean openReplyBox;
@UiField Style style;
@UiField ToggleButton star;
@@ -150,9 +151,10 @@
@UiField QuickApprove quickApprove;
private ReplyAction replyAction;
- public ChangeScreen2(Change.Id changeId, String revision) {
+ public ChangeScreen2(Change.Id changeId, String revision, boolean openReplyBox) {
this.changeId = changeId;
this.revision = revision != null && !revision.isEmpty() ? revision : null;
+ this.openReplyBox = openReplyBox;
add(uiBinder.createAndBindUi(this));
}
@@ -256,10 +258,15 @@
.getParentElement()
.getOffsetHeight());
- String prior = Gerrit.getPriorView();
- if (prior != null && prior.startsWith("/c/")) {
- scrollToPath(prior.substring(3));
+ if (openReplyBox) {
+ onReply();
+ } else {
+ String prior = Gerrit.getPriorView();
+ if (prior != null && prior.startsWith("/c/")) {
+ scrollToPath(prior.substring(3));
+ }
}
+
startPoller();
}
@@ -301,14 +308,16 @@
if (0 <= idx) {
String n = revisionList.getValue(idx);
revisionList.setEnabled(false);
- Gerrit.display(
- PageLinks.toChange2(changeId, n),
- new ChangeScreen2(changeId, n));
+ Gerrit.display(PageLinks.toChange2(changeId, n));
}
}
@UiHandler("reply")
void onReply(ClickEvent e) {
+ onReply();
+ }
+
+ private void onReply() {
if (Gerrit.isSignedIn()) {
replyAction.onReply();
} else {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Constants.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Constants.java
index e7b5d47..ce2fe7b 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Constants.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Constants.java
@@ -18,4 +18,5 @@
String previousChange();
String nextChange();
String openChange();
+ String reviewedFileTitle();
}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Constants.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Constants.properties
index f5971b6..95f378c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Constants.properties
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Constants.properties
@@ -1,3 +1,4 @@
previousChange = Previous related change
nextChange = Next related change
openChange = Open related change
+reviewedFileTitle = Mark file as reviewed (Shortcut: r)
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTable.java
index 10c2bc6..d081348 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTable.java
@@ -228,7 +228,7 @@
keysNavigation.add(new OpenKeyCommand(0, KeyCodes.KEY_ENTER,
Util.C.patchTableOpenDiff()));
- keysNavigation.add(new KeyCommand(0, 'r', PatchUtil.C.toggleReviewed()) {
+ keysAction.add(new KeyCommand(0, 'r', PatchUtil.C.toggleReviewed()) {
@Override
public void onKeyPress(KeyPressEvent event) {
int row = getCurrentRow();
@@ -438,6 +438,7 @@
sb.openTd().setStyleName(R.css().reviewed());
if (hasUser) {
sb.openElement("input")
+ .setAttribute("title", Resources.C.reviewedFileTitle())
.setAttribute("type", "checkbox")
.setAttribute("onclick", REVIEWED + "(event," + info._row() + ")")
.closeSelf();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeDescriptionBlock.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeDescriptionBlock.java
index e5c8dcf..6b13ba0a 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeDescriptionBlock.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeDescriptionBlock.java
@@ -16,8 +16,8 @@
import com.google.gerrit.client.ui.CommentLinkProcessor;
import com.google.gerrit.common.data.AccountInfoCache;
+import com.google.gerrit.common.data.ChangeDetail;
import com.google.gerrit.common.data.SubmitTypeRecord;
-import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSetInfo;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
@@ -37,12 +37,12 @@
initWidget(hp);
}
- public void display(Change chg, Boolean starred, Boolean canEditCommitMessage,
+ public void display(ChangeDetail changeDetail, Boolean starred, Boolean canEditCommitMessage,
PatchSetInfo info, AccountInfoCache acc,
SubmitTypeRecord submitTypeRecord,
CommentLinkProcessor commentLinkProcessor) {
- infoBlock.display(chg, acc, submitTypeRecord);
- messageBlock.display(chg.currentPatchSetId(), starred,
+ infoBlock.display(changeDetail, acc, submitTypeRecord);
+ messageBlock.display(changeDetail.getChange().currentPatchSetId(), starred,
canEditCommitMessage, info.getMessage(), commentLinkProcessor);
}
}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java
index b942824..b4ae2f3 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java
@@ -95,8 +95,9 @@
table.getCellFormatter().addStyleName(row, 0, Gerrit.RESOURCES.css().header());
}
- public void display(final Change chg, final AccountInfoCache acc,
- SubmitTypeRecord submitTypeRecord) {
+ public void display(final ChangeDetail changeDetail,
+ final AccountInfoCache acc, SubmitTypeRecord submitTypeRecord) {
+ final Change chg = changeDetail.getChange();
final Branch.NameKey dst = chg.getDest();
CopyableLabel changeIdLabel =
@@ -114,7 +115,7 @@
table.setWidget(R_BRANCH, 1, new BranchLink(dst.getShortName(), chg
.getProject(), chg.getStatus(), dst.get(), null));
- table.setWidget(R_TOPIC, 1, topic(chg));
+ table.setWidget(R_TOPIC, 1, topic(changeDetail));
table.setText(R_UPLOADED, 1, mediumFormat(chg.getCreatedOn()));
table.setText(R_UPDATED, 1, mediumFormat(chg.getLastUpdatedOn()));
table.setText(R_STATUS, 1, Util.toLongString(chg.getStatus()));
@@ -146,7 +147,8 @@
}
}
- public Widget topic(final Change chg) {
+ public Widget topic(final ChangeDetail changeDetail) {
+ final Change chg = changeDetail.getChange();
final Branch.NameKey dst = chg.getDest();
FlowPanel fp = new FlowPanel();
@@ -154,9 +156,6 @@
fp.add(new BranchLink(chg.getTopic(), chg.getProject(), chg.getStatus(),
dst.get(), chg.getTopic()));
- ChangeDetailCache detailCache = ChangeCache.get(chg.getId()).getChangeDetailCache();
- ChangeDetail changeDetail = detailCache.get();
-
if (changeDetail.canEditTopicName()) {
final Image edit = new Image(Gerrit.RESOURCES.edit());
edit.addStyleName(Gerrit.RESOURCES.css().link());
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
index 0a53b6d..0ec34a9 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
@@ -322,7 +322,7 @@
dependencies.setAccountInfoCache(detail.getAccounts());
- descriptionBlock.display(detail.getChange(),
+ descriptionBlock.display(detail,
detail.isStarred(),
detail.canEditCommitMessage(),
detail.getCurrentPatchSetDetail().getInfo(),
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java
index 608a2c7..58a7042 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java
@@ -31,6 +31,7 @@
import com.google.gerrit.client.ui.PatchLink;
import com.google.gerrit.client.ui.SmallHeading;
import com.google.gerrit.common.PageLinks;
+import com.google.gerrit.common.data.ChangeDetail;
import com.google.gerrit.common.data.PatchSetPublishDetail;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Patch;
@@ -317,9 +318,12 @@
}
private void display(final PatchSetPublishDetail r) {
+ ChangeDetail changeDetail = new ChangeDetail();
+ changeDetail.setChange(r.getChange());
+
setPageTitle(Util.M.publishComments(r.getChange().getKey().abbreviate(),
patchSetId.get()));
- descBlock.display(r.getChange(), null, false, r.getPatchSetInfo(), r.getAccounts(),
+ descBlock.display(changeDetail, null, false, r.getPatchSetInfo(), r.getAccounts(),
r.getSubmitTypeRecord(), commentLinkProcessor);
if (r.getChange().getStatus().isOpen()) {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
index 3ad82f8..695814a 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
@@ -15,6 +15,7 @@
package com.google.gerrit.client.diff;
import com.google.gerrit.client.Gerrit;
+import com.google.gerrit.client.change.ChangeScreen2;
import com.google.gerrit.client.changes.CommentApi;
import com.google.gerrit.client.changes.CommentInfo;
import com.google.gerrit.client.diff.DiffInfo.Region;
@@ -34,6 +35,7 @@
import com.google.gerrit.common.PageLinks;
import com.google.gerrit.common.changes.Side;
import com.google.gerrit.reviewdb.client.AccountDiffPreference;
+import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
@@ -264,6 +266,7 @@
cm.addKeyMap(KeyMap.create()
.on("'j'", moveCursorDown(cm, 1))
.on("'k'", moveCursorDown(cm, -1))
+ .on("'a'", openReplyBox())
.on("'u'", upToChange())
.on("'r'", toggleReviewed())
.on("'o'", toggleOpenBox(cm))
@@ -287,6 +290,12 @@
toggleReviewed().run();
}
});
+ keysAction.add(new KeyCommand(0, 'a', PatchUtil.C.openReply()) {
+ @Override
+ public void onKeyPress(KeyPressEvent event) {
+ openReplyBox().run();
+ }
+ });
keysOpenByEnter = new KeyCommandSet(Gerrit.C.sectionNavigation());
keysOpenByEnter.add(new NoOpKeyCommand(0, KeyCodes.KEY_ENTER,
@@ -956,6 +965,18 @@
};
}
+ private Runnable openReplyBox() {
+ return new Runnable() {
+ public void run() {
+ Change.Id id = revision.getParentKey();
+ String rev = String.valueOf(revision.get());
+ Gerrit.display(
+ PageLinks.toChange2(id, rev),
+ new ChangeScreen2(id, rev, true));
+ }
+ };
+ }
+
private Runnable upToChange() {
return new Runnable() {
public void run() {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.java
index 8c9c56b..c6793d6 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.java
@@ -40,6 +40,7 @@
String illegalNumberOfColumns();
String upToChange();
+ String openReply();
String linePrev();
String lineNext();
String chunkPrev();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.properties
index 5acdb5f..5259a4c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.properties
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.properties
@@ -22,6 +22,7 @@
illegalNumberOfColumns = The number of columns cannot be zero or negative
upToChange = Up to change
+openReply = Reply and score
linePrev = Previous line
lineNext = Next line
chunkPrev = Previous diff chunk or comment
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java
index 4b3084a..53abc4c 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java
@@ -331,6 +331,8 @@
String prefix, String pluginName,
ResourceKey cacheKey, HttpServletResponse res) throws IOException {
List<JarEntry> cmds = Lists.newArrayList();
+ List<JarEntry> servlets = Lists.newArrayList();
+ List<JarEntry> restApis = Lists.newArrayList();
List<JarEntry> docs = Lists.newArrayList();
JarEntry about = null;
Enumeration<JarEntry> entries = jar.entries();
@@ -345,6 +347,10 @@
name = name.substring(prefix.length());
if (name.startsWith("cmd-")) {
cmds.add(entry);
+ } else if (name.startsWith("servlet-")) {
+ servlets.add(entry);
+ } else if (name.startsWith("rest-api-")) {
+ restApis.add(entry);
} else if (name.startsWith("about.")) {
if (about == null) {
about = entry;
@@ -395,6 +401,8 @@
}
appendEntriesSection(jar, docs, "Documentation", md, prefix, 0);
+ appendEntriesSection(jar, servlets, "Servlets", md, prefix, "servlet-".length());
+ appendEntriesSection(jar, restApis, "REST APIs", md, prefix, "rest-api-".length());
appendEntriesSection(jar, cmds, "Commands", md, prefix, "cmd-".length());
sendMarkdownAsHtml(md.toString(), pluginName, cacheKey, res);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java
index 0151dde..7d0ad24 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java
@@ -197,13 +197,11 @@
if (!schema.groupMemberQueryList.isEmpty()) {
final HashMap<String, String> params = new HashMap<String, String>();
- if (schema.groupNeedsAccount) {
- if (account == null) {
- account = findAccount(schema, ctx, username);
- }
- for (String name : schema.groupMemberQueryList.get(0).getParameters()) {
- params.put(name, account.get(name));
- }
+ if (account == null) {
+ account = findAccount(schema, ctx, username);
+ }
+ for (String name : schema.groupMemberQueryList.get(0).getParameters()) {
+ params.put(name, account.get(name));
}
params.put(LdapRealm.USERNAME, username);
@@ -286,7 +284,6 @@
final String accountMemberField;
final List<LdapQuery> accountQueryList;
- boolean groupNeedsAccount;
final List<String> groupBases;
final SearchScope groupScope;
final ParameterizedString groupPattern;
@@ -321,10 +318,7 @@
}
for (final String name : groupMemberQuery.getParameters()) {
- if (!LdapRealm.USERNAME.equals(name)) {
- groupNeedsAccount = true;
- accountAtts.add(name);
- }
+ accountAtts.add(name);
}
groupMemberQueryList.add(groupMemberQuery);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapType.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapType.java
index db5baeb..3c1b0d2 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapType.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapType.java
@@ -57,7 +57,7 @@
@Override
String groupMemberPattern() {
- return "(memberUid=${username})";
+ return "(|(memberUid=${username})(gidNumber=${gidNumber}))";
}
@Override
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java
index ee1fd4f..3b86fe7 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java
@@ -15,6 +15,7 @@
package com.google.gerrit.server.change;
import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import com.google.gerrit.extensions.registration.DynamicMap;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
@@ -25,28 +26,46 @@
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestReadView;
import com.google.gerrit.extensions.restapi.RestView;
+import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.AccountPatchReview;
+import com.google.gerrit.reviewdb.client.Patch;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.change.FileInfoJson.FileInfo;
+import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.patch.PatchList;
+import com.google.gerrit.server.patch.PatchListCache;
+import com.google.gerrit.server.patch.PatchListEntry;
import com.google.gerrit.server.patch.PatchListNotAvailableException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
+import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevTree;
+import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.treewalk.TreeWalk;
import org.kohsuke.args4j.Option;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
import java.util.concurrent.TimeUnit;
class Files implements ChildCollection<RevisionResource, FileResource> {
private final DynamicMap<RestView<FileResource>> views;
- private final Provider<List> list;
+ private final Provider<ListFiles> list;
@Inject
- Files(DynamicMap<RestView<FileResource>> views, Provider<List> list) {
+ Files(DynamicMap<RestView<FileResource>> views, Provider<ListFiles> list) {
this.views = views;
this.list = list;
}
@@ -67,7 +86,9 @@
return new FileResource(rev, id.get());
}
- private static final class List implements RestReadView<RevisionResource> {
+ private static final class ListFiles implements RestReadView<RevisionResource> {
+ private static final Logger log = LoggerFactory.getLogger(ListFiles.class);
+
@Option(name = "--base", metaVar = "revision-id")
String base;
@@ -78,16 +99,22 @@
private final Provider<CurrentUser> self;
private final FileInfoJson fileInfoJson;
private final Provider<Revisions> revisions;
+ private final GitRepositoryManager gitManager;
+ private final PatchListCache patchListCache;
@Inject
- List(Provider<ReviewDb> db,
+ ListFiles(Provider<ReviewDb> db,
Provider<CurrentUser> self,
FileInfoJson fileInfoJson,
- Provider<Revisions> revisions) {
+ Provider<Revisions> revisions,
+ GitRepositoryManager gitManager,
+ PatchListCache patchListCache) {
this.db = db;
this.self = self;
this.fileInfoJson = fileInfoJson;
this.revisions = revisions;
+ this.gitManager = gitManager;
+ this.patchListCache = patchListCache;
}
@Override
@@ -123,14 +150,102 @@
throw new AuthException("Authentication required");
}
- java.util.List<String> r = Lists.newArrayList();
+ Account.Id userId = ((IdentifiedUser) user).getAccountId();
+ List<String> r = scan(userId, resource.getPatchSet().getId());
+
+ if (r.isEmpty() && 1 < resource.getPatchSet().getPatchSetId()) {
+ for (Integer id : reverseSortPatchSets(resource)) {
+ PatchSet.Id old = new PatchSet.Id(resource.getChange().getId(), id);
+ List<String> o = scan(userId, old);
+ if (!o.isEmpty()) {
+ try {
+ r = copy(Sets.newHashSet(o), old, resource, userId);
+ } catch (IOException e) {
+ log.warn("Cannot copy patch review flags", e);
+ } catch (PatchListNotAvailableException e) {
+ log.warn("Cannot copy patch review flags", e);
+ }
+ break;
+ }
+ }
+ }
+
+ return r;
+ }
+
+ private List<String> scan(Account.Id userId, PatchSet.Id psId)
+ throws OrmException {
+ List<String> r = Lists.newArrayList();
for (AccountPatchReview w : db.get().accountPatchReviews()
- .byReviewer(
- ((IdentifiedUser) user).getAccountId(),
- resource.getPatchSet().getId())) {
+ .byReviewer(userId, psId)) {
r.add(w.getKey().getPatchKey().getFileName());
}
return r;
}
+
+ private List<Integer> reverseSortPatchSets(
+ RevisionResource resource) throws OrmException {
+ SortedSet<Integer> ids = Sets.newTreeSet();
+ for (PatchSet p : db.get().patchSets()
+ .byChange(resource.getChange().getId())) {
+ if (p.getPatchSetId() < resource.getPatchSet().getPatchSetId()) {
+ ids.add(p.getPatchSetId());
+ }
+ }
+
+ List<Integer> r = Lists.newArrayList(ids);
+ Collections.reverse(r);
+ return r;
+ }
+
+ private List<String> copy(Set<String> paths, PatchSet.Id old,
+ RevisionResource resource, Account.Id userId) throws IOException,
+ PatchListNotAvailableException, OrmException {
+ Repository git =
+ gitManager.openRepository(resource.getChange().getProject());
+ try {
+ ObjectReader reader = git.newObjectReader();
+ try {
+ PatchList oldList = patchListCache.get(
+ resource.getChange(),
+ db.get().patchSets().get(old));
+
+ PatchList curList = patchListCache.get(
+ resource.getChange(),
+ resource.getPatchSet());
+
+ int sz = paths.size();
+ List<AccountPatchReview> inserts = Lists.newArrayListWithCapacity(sz);
+ List<String> pathList = Lists.newArrayListWithCapacity(sz);
+
+ RevWalk rw = new RevWalk(reader);
+ RevTree o = rw.parseCommit(oldList.getNewId()).getTree();
+ RevTree c = rw.parseCommit(curList.getNewId()).getTree();
+ for (PatchListEntry p : curList.getPatches()) {
+ String path = p.getNewName();
+ if (!Patch.COMMIT_MSG.equals(path) && paths.contains(path)) {
+ TreeWalk tw = TreeWalk.forPath(reader, path, o, c);
+ if (tw != null
+ && tw.getRawMode(0) != 0
+ && tw.getRawMode(1) != 0
+ && tw.idEqual(0, 1)) {
+ inserts.add(new AccountPatchReview(
+ new Patch.Key(
+ resource.getPatchSet().getId(),
+ path),
+ userId));
+ pathList.add(path);
+ }
+ }
+ }
+ db.get().accountPatchReviews().insert(inserts);
+ return pathList;
+ } finally {
+ reader.release();
+ }
+ } finally {
+ git.close();
+ }
+ }
}
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java
index d929a89..5e2c797 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java
@@ -151,6 +151,11 @@
return this;
}
+ public PatchSet.Id getPatchSetId() {
+ init();
+ return patchSet.getId();
+ }
+
public PatchSetInserter setMessage(String message) throws OrmException {
changeMessage = new ChangeMessage(new ChangeMessage.Key(change.getId(),
ChangeUtil.messageUUID(db)), user.getAccountId(), patchSet.getId());
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java
index 40deb0c..dceecbe 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java
@@ -293,7 +293,7 @@
final ChangeControl changeControl =
changeControlFactory.validateFor(change.getId(), uploader);
- PatchSetInserter patchSetinserter = patchSetInserterFactory
+ PatchSetInserter patchSetInserter = patchSetInserterFactory
.create(git, revWalk, changeControl.getRefControl(), uploader, change, rebasedCommit)
.setCopyLabels(true)
.setValidatePolicy(validate)
@@ -301,13 +301,15 @@
.setSendMail(sendMail)
.setRunHooks(runHooks);
+ final PatchSet.Id newPatchSetId = patchSetInserter.getPatchSetId();
final ChangeMessage cmsg =
new ChangeMessage(new ChangeMessage.Key(change.getId(),
ChangeUtil.messageUUID(db)), uploader.getAccountId(), patchSetId);
- cmsg.setMessage("Patch Set " + change.currentPatchSetId().get()
+
+ cmsg.setMessage("Patch Set " + newPatchSetId.get()
+ ": Patch Set " + patchSetId.get() + " was rebased");
- Change newChange = patchSetinserter
+ Change newChange = patchSetInserter
.setMessage(cmsg)
.insert();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexRewriteImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexRewriteImpl.java
index 5014396..a782d34 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexRewriteImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexRewriteImpl.java
@@ -126,25 +126,31 @@
private final IndexCollection indexes;
private final Provider<ReviewDb> db;
private final BasicRewritesImpl basicRewrites;
+ private final SqlRewriterImpl sqlRewriter;
@Inject
IndexRewriteImpl(IndexCollection indexes,
Provider<ReviewDb> db,
- BasicRewritesImpl basicRewrites) {
+ BasicRewritesImpl basicRewrites,
+ SqlRewriterImpl sqlRewriter) {
this.indexes = indexes;
this.db = db;
this.basicRewrites = basicRewrites;
+ this.sqlRewriter = sqlRewriter;
}
@Override
public Predicate<ChangeData> rewrite(Predicate<ChangeData> in) {
+ ChangeIndex index = indexes.getSearchIndex();
+ if (index == null) {
+ return sqlRewriter.rewrite(in);
+ }
in = basicRewrites.rewrite(in);
// Add 1 to specified limit to match behavior of QueryProcessor.
int limit = ChangeQueryBuilder.hasLimit(in)
? ChangeQueryBuilder.getLimit(in) + 1
: MAX_LIMIT;
- ChangeIndex index = indexes.getSearchIndex();
Predicate<ChangeData> out = rewriteImpl(in, index, limit);
if (in == out || out instanceof IndexPredicate) {
return query(out, index, limit);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
index 716a22b..4439755 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
@@ -28,6 +28,8 @@
import com.google.inject.assistedinject.Assisted;
import org.eclipse.jgit.lib.Repository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Collections;
@@ -37,6 +39,9 @@
/** Send comments, after the author of them hit used Publish Comments in the UI. */
public class CommentSender extends ReplyToChangeSender {
+ private static final Logger log = LoggerFactory
+ .getLogger(CommentSender.class);
+
public static interface Factory {
public CommentSender create(NotifyHandling notify, Change change);
}
@@ -97,8 +102,7 @@
}
public String getInlineComments(int lines) {
- StringBuilder cmts = new StringBuilder();
-
+ StringBuilder cmts = new StringBuilder();
final Repository repo = getRepository();
try {
PatchList patchList = null;
@@ -114,55 +118,34 @@
PatchFile currentFileData = null;
for (final PatchLineComment c : inlineComments) {
final Patch.Key pk = c.getKey().getParentKey();
- final int lineNbr = c.getLine();
- final short side = c.getSide();
if (!pk.equals(currentFileKey)) {
cmts.append("....................................................\n");
if (Patch.COMMIT_MSG.equals(pk.get())) {
cmts.append("Commit Message\n");
} else {
- cmts.append("File ");
- cmts.append(pk.get());
- cmts.append("\n");
+ cmts.append("File ").append(pk.get()).append('\n');
}
currentFileKey = pk;
if (patchList != null) {
try {
currentFileData =
- new PatchFile(repo, patchList, pk.getFileName());
+ new PatchFile(repo, patchList, pk.get());
} catch (IOException e) {
- // Don't quote the line if we can't load it.
+ log.warn(String.format(
+ "Cannot load %s from %s in %s",
+ pk.getFileName(),
+ patchList.getNewId().name(),
+ projectState.getProject().getName()), e);
+ currentFileData = null;
}
- } else {
- currentFileData = null;
}
}
if (currentFileData != null) {
- int maxLines;
- try {
- maxLines = currentFileData.getLineCount(side);
- } catch (Throwable e) {
- maxLines = lineNbr;
- }
-
- final int startLine = Math.max(1, lineNbr - lines + 1);
- final int stopLine = Math.min(maxLines, lineNbr + lines);
-
- for (int line = startLine; line <= lineNbr; ++line) {
- appendFileLine(cmts, currentFileData, side, line);
- }
-
- cmts.append(c.getMessage().trim());
- cmts.append("\n");
-
- for (int line = lineNbr + 1; line < stopLine; ++line) {
- appendFileLine(cmts, currentFileData, side, line);
- }
+ appendComment(cmts, lines, currentFileData, c);
}
-
cmts.append("\n\n");
}
} finally {
@@ -173,6 +156,30 @@
return cmts.toString();
}
+ private void appendComment(StringBuilder out, int contextLines,
+ PatchFile currentFileData, PatchLineComment comment) {
+ int lineNbr = comment.getLine();
+ short side = comment.getSide();
+ int maxLines;
+ try {
+ maxLines = currentFileData.getLineCount(side);
+ } catch (Throwable e) {
+ maxLines = lineNbr;
+ }
+
+ final int startLine = Math.max(1, lineNbr - contextLines + 1);
+ final int stopLine = Math.min(maxLines, lineNbr + contextLines);
+
+ for (int line = startLine; line <= lineNbr; ++line) {
+ appendFileLine(out, currentFileData, side, line);
+ }
+ out.append(comment.getMessage().trim()).append('\n');
+
+ for (int line = lineNbr + 1; line < stopLine; ++line) {
+ appendFileLine(out, currentFileData, side, line);
+ }
+ }
+
private void appendFileLine(StringBuilder cmts, PatchFile fileData, short side, int line) {
cmts.append("Line " + line);
try {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/SqlRewriterImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/SqlRewriterImpl.java
index 78b3c95..71daa9c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/SqlRewriterImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/SqlRewriterImpl.java
@@ -14,6 +14,7 @@
package com.google.gerrit.server.query.change;
+import com.google.common.annotations.VisibleForTesting;
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.server.ChangeAccess;
@@ -37,7 +38,8 @@
SqlRewriterImpl.class, BUILDER);
@Inject
- SqlRewriterImpl(Provider<ReviewDb> dbProvider) {
+ @VisibleForTesting
+ public SqlRewriterImpl(Provider<ReviewDb> dbProvider) {
super(mydef, dbProvider);
}
diff --git a/gerrit-server/src/main/java/gerrit/PRED_get_legacy_label_types_1.java b/gerrit-server/src/main/java/gerrit/PRED_get_legacy_label_types_1.java
index 7d14ac2..4b89544 100644
--- a/gerrit-server/src/main/java/gerrit/PRED_get_legacy_label_types_1.java
+++ b/gerrit-server/src/main/java/gerrit/PRED_get_legacy_label_types_1.java
@@ -15,6 +15,7 @@
package gerrit;
import com.google.gerrit.common.data.LabelType;
+import com.google.gerrit.common.data.LabelValue;
import com.google.gerrit.rules.PrologEnvironment;
import com.google.gerrit.rules.StoredValues;
import com.google.gerrit.server.project.ProjectState;
@@ -43,6 +44,8 @@
* </ul>
*/
class PRED_get_legacy_label_types_1 extends Predicate.P1 {
+ private static final SymbolTerm NONE = SymbolTerm.intern("none");
+
PRED_get_legacy_label_types_1(Term a1, Operation n) {
arg1 = a1;
cont = n;
@@ -75,10 +78,12 @@
"label_type", 4);
static Term export(LabelType type) {
+ LabelValue min = type.getMin();
+ LabelValue max = type.getMax();
return new StructureTerm(symLabelType,
SymbolTerm.intern(type.getName()),
SymbolTerm.intern(type.getFunctionName()),
- new IntegerTerm(type.getMin().getValue()),
- new IntegerTerm(type.getMax().getValue()));
+ min != null ? new IntegerTerm(min.getValue()) : NONE,
+ max != null ? new IntegerTerm(max.getValue()) : NONE);
}
}
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexRewriteTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexRewriteTest.java
index 667bdc9..64f7965 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexRewriteTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexRewriteTest.java
@@ -27,11 +27,13 @@
import com.google.gerrit.server.query.OperatorPredicate;
import com.google.gerrit.server.query.Predicate;
import com.google.gerrit.server.query.QueryParseException;
+import com.google.gerrit.server.query.RewritePredicate;
import com.google.gerrit.server.query.change.AndSource;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.query.change.ChangeDataSource;
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
import com.google.gerrit.server.query.change.OrSource;
+import com.google.gerrit.server.query.change.SqlRewriterImpl;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.ResultSet;
@@ -177,7 +179,8 @@
rewrite = new IndexRewriteImpl(
indexes,
null,
- new IndexRewriteImpl.BasicRewritesImpl(null));
+ new IndexRewriteImpl.BasicRewritesImpl(null),
+ new SqlRewriterImpl(null));
}
public void testIndexPredicate() throws Exception {
@@ -308,6 +311,18 @@
out.getChildren());
}
+ public void testNoChangeIndexUsesSqlRewrites() throws Exception {
+ Predicate<ChangeData> in = parse("status:open project:p ref:b");
+ Predicate<ChangeData> out;
+
+ out = rewrite(in);
+ assertTrue(out instanceof AndPredicate || out instanceof IndexedChangeQuery);
+
+ indexes.setSearchIndex(null);
+ out = rewrite(in);
+ assertTrue(out instanceof RewritePredicate);
+ }
+
private Predicate<ChangeData> parse(String query) throws QueryParseException {
return queryBuilder.parse(query);
}
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/CommandMetaData.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/CommandMetaData.java
index cfcee6a..42c0fd7 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/CommandMetaData.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/CommandMetaData.java
@@ -27,5 +27,9 @@
@Retention(RUNTIME)
public @interface CommandMetaData {
String name();
+ String description() default "";
+
+ /** @deprecated use description intead. */
+ @Deprecated
String descr() default "";
}
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/CommandModule.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/CommandModule.java
index e7e8a44..c64f9d8 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/CommandModule.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/CommandModule.java
@@ -14,6 +14,8 @@
package com.google.gerrit.sshd;
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
import com.google.inject.AbstractModule;
import com.google.inject.binder.LinkedBindingBuilder;
@@ -74,7 +76,7 @@
if (meta == null) {
throw new IllegalStateException("no CommandMetaData annotation found");
}
- bind(Commands.key(parent, meta.name(), meta.descr())).to(clazz);
+ bind(Commands.key(parent, meta.name(), description(meta))).to(clazz);
}
/**
@@ -93,7 +95,14 @@
if (meta == null) {
throw new IllegalStateException("no CommandMetaData annotation found");
}
- bind(Commands.key(parent, name, meta.descr())).to(clazz);
+ bind(Commands.key(parent, name, description(meta))).to(clazz);
+ }
+
+ @SuppressWarnings("deprecation")
+ private static String description(CommandMetaData meta) {
+ return Objects.firstNonNull(
+ Strings.emptyToNull(meta.description()),
+ meta.descr());
}
/**
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/AdminQueryShell.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/AdminQueryShell.java
index 15229dc..0ff3a01 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/AdminQueryShell.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/AdminQueryShell.java
@@ -28,7 +28,7 @@
/** Opens a query processor. */
@AdminHighPriorityCommand
@RequiresCapability(GlobalCapability.ACCESS_DATABASE)
-@CommandMetaData(name = "gsql", descr = "Administrative interface to active database")
+@CommandMetaData(name = "gsql", description = "Administrative interface to active database")
final class AdminQueryShell extends SshCommand {
@Inject
private QueryShell.Factory factory;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/AdminSetParent.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/AdminSetParent.java
index e83963a..c68dc26 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/AdminSetParent.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/AdminSetParent.java
@@ -50,7 +50,7 @@
import java.util.Set;
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
-@CommandMetaData(name = "set-project-parent", descr = "Change the project permissions are inherited from")
+@CommandMetaData(name = "set-project-parent", description = "Change the project permissions are inherited from")
final class AdminSetParent extends SshCommand {
private static final Logger log = LoggerFactory.getLogger(AdminSetParent.class);
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/BanCommitCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/BanCommitCommand.java
index 0268bc0..dc22a29 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/BanCommitCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/BanCommitCommand.java
@@ -33,7 +33,7 @@
import java.util.ArrayList;
import java.util.List;
-@CommandMetaData(name = "ban-commit", descr = "Ban a commit from a project's repository")
+@CommandMetaData(name = "ban-commit", description = "Ban a commit from a project's repository")
public class BanCommitCommand extends SshCommand {
@Option(name = "--reason", aliases = {"-r"}, metaVar = "REASON", usage = "reason for banning the commit")
private String reason;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateAccountCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateAccountCommand.java
index 6c4b41c..aef1560 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateAccountCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateAccountCommand.java
@@ -39,7 +39,7 @@
/** Create a new user account. **/
@RequiresCapability(GlobalCapability.CREATE_ACCOUNT)
-@CommandMetaData(name = "create-account", descr = "Create a new batch/role account")
+@CommandMetaData(name = "create-account", description = "Create a new batch/role account")
final class CreateAccountCommand extends SshCommand {
@Option(name = "--group", aliases = {"-g"}, metaVar = "GROUP", usage = "groups to add account to")
private List<AccountGroup.Id> groups = new ArrayList<AccountGroup.Id>();
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java
index 660460a..c652641 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java
@@ -38,7 +38,7 @@
* Optionally, puts an initial set of user in the newly created group.
*/
@RequiresCapability(GlobalCapability.CREATE_GROUP)
-@CommandMetaData(name = "create-group", descr = "Create a new account group")
+@CommandMetaData(name = "create-group", description = "Create a new account group")
final class CreateGroupCommand extends SshCommand {
@Option(name = "--owner", aliases = {"-o"}, metaVar = "GROUP", usage = "owning group, if not specified the group will be self-owning")
private AccountGroup.Id ownerGroupId;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProjectCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProjectCommand.java
index 89bb973..24d7689 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProjectCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProjectCommand.java
@@ -36,7 +36,7 @@
/** Create a new project. **/
@RequiresCapability(GlobalCapability.CREATE_PROJECT)
-@CommandMetaData(name = "create-project", descr = "Create a new project and associated Git repository")
+@CommandMetaData(name = "create-project", description = "Create a new project and associated Git repository")
final class CreateProjectCommand extends SshCommand {
@Option(name = "--name", aliases = {"-n"}, metaVar = "NAME", usage = "name of project to be created (deprecated option)")
void setProjectNameFromOption(String name) {
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/FlushCaches.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/FlushCaches.java
index 4b78cfc..6c07dddb 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/FlushCaches.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/FlushCaches.java
@@ -31,7 +31,7 @@
/** Causes the caches to purge all entries and reload. */
@RequiresCapability(GlobalCapability.FLUSH_CACHES)
-@CommandMetaData(name = "flush-caches", descr = "Flush some/all server caches from memory")
+@CommandMetaData(name = "flush-caches", description = "Flush some/all server caches from memory")
final class FlushCaches extends CacheCommand {
private static final String WEB_SESSIONS = "web_sessions";
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/GarbageCollectionCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/GarbageCollectionCommand.java
index c561153..346bea7 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/GarbageCollectionCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/GarbageCollectionCommand.java
@@ -37,7 +37,7 @@
/** Runs the Git garbage collection. */
@RequiresCapability(GlobalCapability.RUN_GC)
-@CommandMetaData(name = "gc", descr = "Run Git garbage collection")
+@CommandMetaData(name = "gc", description = "Run Git garbage collection")
public class GarbageCollectionCommand extends BaseCommand {
@Option(name = "--all", usage = "runs the Git garbage collection for all projects")
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListGroupsCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListGroupsCommand.java
index e5b4203..aadb1d9 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListGroupsCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListGroupsCommand.java
@@ -37,7 +37,7 @@
import java.io.PrintWriter;
-@CommandMetaData(name = "ls-groups", descr = "List groups visible to the caller")
+@CommandMetaData(name = "ls-groups", description = "List groups visible to the caller")
public class ListGroupsCommand extends BaseCommand {
@Inject
private MyListGroups impl;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListMembersCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListMembersCommand.java
index c5bda3c..b7dd380 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListMembersCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListMembersCommand.java
@@ -39,7 +39,7 @@
/**
* Implements a command that allows the user to see the members of a group.
*/
-@CommandMetaData(name = "ls-members", descr = "Lists the members of a given group")
+@CommandMetaData(name = "ls-members", description = "Lists the members of a given group")
public class ListMembersCommand extends BaseCommand {
@Inject
ListMembersCommandImpl impl;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListProjectsCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListProjectsCommand.java
index ab70395..8bcae4b 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListProjectsCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ListProjectsCommand.java
@@ -23,7 +23,7 @@
import java.util.List;
-@CommandMetaData(name = "ls-projects", descr = "List projects visible to the caller")
+@CommandMetaData(name = "ls-projects", description = "List projects visible to the caller")
final class ListProjectsCommand extends BaseCommand {
@Inject
private ListProjects impl;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/LsUserRefs.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/LsUserRefs.java
index 58abf95..1806749 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/LsUserRefs.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/LsUserRefs.java
@@ -40,7 +40,7 @@
import java.util.Map;
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
-@CommandMetaData(name = "ls-user-refs", descr = "List refs visible to a specific user")
+@CommandMetaData(name = "ls-user-refs", description = "List refs visible to a specific user")
public class LsUserRefs extends SshCommand {
@Inject
private AccountResolver accountResolver;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginEnableCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginEnableCommand.java
index 709e337..47c2d68 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginEnableCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginEnableCommand.java
@@ -28,7 +28,7 @@
import java.util.List;
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
-@CommandMetaData(name = "enable", descr = "Enable plugins")
+@CommandMetaData(name = "enable", description = "Enable plugins")
final class PluginEnableCommand extends SshCommand {
@Argument(index = 0, metaVar = "NAME", required = true, usage = "plugin(s) to enable")
List<String> names;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginInstallCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginInstallCommand.java
index fc036fe..70d09ee 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginInstallCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginInstallCommand.java
@@ -35,7 +35,7 @@
import java.net.URL;
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
-@CommandMetaData(name = "install", descr = "Install/Add a plugin")
+@CommandMetaData(name = "install", description = "Install/Add a plugin")
final class PluginInstallCommand extends SshCommand {
@Option(name = "--name", aliases = {"-n"}, usage = "install under name")
private String name;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginLsCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginLsCommand.java
index ab6c978..7e44641 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginLsCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginLsCommand.java
@@ -26,7 +26,7 @@
import java.io.IOException;
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
-@CommandMetaData(name = "ls", descr = "List the installed plugins")
+@CommandMetaData(name = "ls", description = "List the installed plugins")
final class PluginLsCommand extends BaseCommand {
@Inject
private ListPlugins impl;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginReloadCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginReloadCommand.java
index 85ade03..3ed1011 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginReloadCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginReloadCommand.java
@@ -28,7 +28,7 @@
import java.util.List;
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
-@CommandMetaData(name = "reload", descr = "Reload/Restart plugins")
+@CommandMetaData(name = "reload", description = "Reload/Restart plugins")
final class PluginReloadCommand extends SshCommand {
@Argument(index = 0, metaVar = "NAME", usage = "plugins to reload/restart")
private List<String> names;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginRemoveCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginRemoveCommand.java
index 96adb8fe..0ae11af 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginRemoveCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginRemoveCommand.java
@@ -27,7 +27,7 @@
import java.util.List;
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
-@CommandMetaData(name = "remove", descr = "Disable plugins")
+@CommandMetaData(name = "remove", description = "Disable plugins")
final class PluginRemoveCommand extends SshCommand {
@Argument(index = 0, metaVar = "NAME", required = true, usage = "plugin to remove")
List<String> names;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Query.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Query.java
index 2d17876..185bb67 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Query.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Query.java
@@ -24,7 +24,7 @@
import java.util.List;
-@CommandMetaData(name = "query", descr = "Query the change database")
+@CommandMetaData(name = "query", description = "Query the change database")
class Query extends SshCommand {
@Inject
private QueryProcessor processor;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/QueryShell.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/QueryShell.java
index 1630d11..93c6af2 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/QueryShell.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/QueryShell.java
@@ -228,9 +228,9 @@
if (outputFormat == OutputFormat.PRETTY) {
println(" List of relations");
}
- showResultSet(rs, false, //
- Identity.create(rs, "TABLE_SCHEM"), //
- Identity.create(rs, "TABLE_NAME"), //
+ showResultSet(rs, false,
+ Identity.create(rs, "TABLE_SCHEM"),
+ Identity.create(rs, "TABLE_NAME"),
Identity.create(rs, "TABLE_TYPE"));
} finally {
rs.close();
@@ -267,8 +267,8 @@
if (outputFormat == OutputFormat.PRETTY) {
println(" Table " + tableName);
}
- showResultSet(rs, true, //
- Identity.create(rs, "COLUMN_NAME"), //
+ showResultSet(rs, true,
+ Identity.create(rs, "COLUMN_NAME"),
new Function("TYPE") {
@Override
String apply(final ResultSet rs) throws SQLException {
@@ -379,7 +379,7 @@
case PRETTY:
default:
- println("(" + rowCount + (rowCount == 1 ? " row" : " rows") //
+ println("(" + rowCount + (rowCount == 1 ? " row" : " rows")
+ "; " + ms + " ms)");
break;
}
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Receive.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Receive.java
index f9d5ac1..b3aad6f 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Receive.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Receive.java
@@ -42,7 +42,7 @@
import java.util.Set;
/** Receives change upload over SSH using the Git receive-pack protocol. */
-@CommandMetaData(name = "receive-pack", descr = "Standard Git server side command for client side git push")
+@CommandMetaData(name = "receive-pack", description = "Standard Git server side command for client side git push")
final class Receive extends AbstractGitCommand {
private static final Logger log = LoggerFactory.getLogger(Receive.class);
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/RenameGroupCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/RenameGroupCommand.java
index f3c1bb3..38535a4 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/RenameGroupCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/RenameGroupCommand.java
@@ -25,7 +25,7 @@
import org.kohsuke.args4j.Argument;
-@CommandMetaData(name = "rename-group", descr = "Rename an account group")
+@CommandMetaData(name = "rename-group", description = "Rename an account group")
public class RenameGroupCommand extends SshCommand {
@Argument(index = 0, required = true, metaVar = "GROUP", usage = "name of the group to be renamed")
private String groupName;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ReviewCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ReviewCommand.java
index b48320f..714a6ad 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ReviewCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ReviewCommand.java
@@ -63,7 +63,7 @@
import java.util.Map;
import java.util.Set;
-@CommandMetaData(name = "review", descr = "Verify, approve and/or submit one or more patch sets")
+@CommandMetaData(name = "review", description = "Verify, approve and/or submit one or more patch sets")
public class ReviewCommand extends SshCommand {
private static final Logger log =
LoggerFactory.getLogger(ReviewCommand.class);
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetAccountCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetAccountCommand.java
index d515aab..5736bb6 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetAccountCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetAccountCommand.java
@@ -55,7 +55,7 @@
import java.util.List;
/** Set a user's account settings. **/
-@CommandMetaData(name = "set-account", descr = "Change an account's settings")
+@CommandMetaData(name = "set-account", description = "Change an account's settings")
final class SetAccountCommand extends BaseCommand {
@Argument(index = 0, required = true, metaVar = "USER", usage = "full name, email-address, ssh username or account id")
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetMembersCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetMembersCommand.java
index cd2710f..48c37b8 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetMembersCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetMembersCommand.java
@@ -43,7 +43,7 @@
import java.io.UnsupportedEncodingException;
import java.util.List;
-@CommandMetaData(name = "set-members", descr = "Modifies members of specific group or number of groups")
+@CommandMetaData(name = "set-members", description = "Modifies members of specific group or number of groups")
public class SetMembersCommand extends SshCommand {
@Option(name = "--add", aliases = {"-a"}, metaVar = "USER", usage = "users that should be added as group member")
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java
index d512fd5..b45fb3a 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java
@@ -38,7 +38,7 @@
import java.io.IOException;
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
-@CommandMetaData(name = "set-project", descr = "Change a project's settings")
+@CommandMetaData(name = "set-project", description = "Change a project's settings")
final class SetProjectCommand extends SshCommand {
private static final Logger log = LoggerFactory
.getLogger(SetProjectCommand.class);
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java
index 8e9bcac..6dc79ff 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java
@@ -45,7 +45,7 @@
import java.util.List;
import java.util.Set;
-@CommandMetaData(name = "set-reviewers", descr = "Add or remove reviewers on a change")
+@CommandMetaData(name = "set-reviewers", description = "Add or remove reviewers on a change")
public class SetReviewersCommand extends SshCommand {
private static final Logger log =
LoggerFactory.getLogger(SetReviewersCommand.class);
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java
index ae5dc56..7929ef6 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java
@@ -52,7 +52,7 @@
/** Show the current cache states. */
@RequiresCapability(GlobalCapability.VIEW_CACHES)
-@CommandMetaData(name = "show-caches", descr = "Display current cache statistics")
+@CommandMetaData(name = "show-caches", description = "Display current cache statistics")
final class ShowCaches extends CacheCommand {
private static volatile long serverStarted;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowConnections.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowConnections.java
index f5abf4b..7b308c1 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowConnections.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowConnections.java
@@ -44,7 +44,7 @@
/** Show the current SSH connections. */
@RequiresCapability(GlobalCapability.VIEW_CONNECTIONS)
-@CommandMetaData(name = "show-connections", descr = "Display active client SSH connections")
+@CommandMetaData(name = "show-connections", description = "Display active client SSH connections")
final class ShowConnections extends SshCommand {
@Option(name = "--numeric", aliases = {"-n"}, usage = "don't resolve names")
private boolean numeric;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowQueue.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowQueue.java
index 81a2dcc..a1b062c 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowQueue.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowQueue.java
@@ -40,7 +40,7 @@
/** Display the current work queue. */
@AdminHighPriorityCommand
-@CommandMetaData(name = "show-queue", descr = "Display the background work queues, including replication")
+@CommandMetaData(name = "show-queue", description = "Display the background work queues, including replication")
final class ShowQueue extends SshCommand {
@Option(name = "--wide", aliases = {"-w"}, usage = "display without line width truncation")
private boolean wide;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/StreamEvents.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/StreamEvents.java
index 99d4baa..fd4a9ec 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/StreamEvents.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/StreamEvents.java
@@ -36,7 +36,7 @@
import java.util.concurrent.LinkedBlockingQueue;
@RequiresCapability(GlobalCapability.STREAM_EVENTS)
-@CommandMetaData(name = "stream-events", descr = "Monitor events occurring in real time")
+@CommandMetaData(name = "stream-events", description = "Monitor events occurring in real time")
final class StreamEvents extends BaseCommand {
/** Maximum number of events that may be queued up for each connection. */
private static final int MAX_EVENTS = 128;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/TestSubmitRuleCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/TestSubmitRuleCommand.java
index 6335160..b957a7a 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/TestSubmitRuleCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/TestSubmitRuleCommand.java
@@ -23,7 +23,7 @@
import com.google.inject.Provider;
/** Command that allows testing of prolog submit-rules in a live instance. */
-@CommandMetaData(name = "rule", descr = "Test prolog submit rules")
+@CommandMetaData(name = "rule", description = "Test prolog submit rules")
final class TestSubmitRuleCommand extends BaseTestPrologCommand {
@Inject
private Provider<TestSubmitRule> view;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/TestSubmitTypeCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/TestSubmitTypeCommand.java
index 326ff46..2e7f0df 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/TestSubmitTypeCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/TestSubmitTypeCommand.java
@@ -23,7 +23,7 @@
import com.google.inject.Inject;
import com.google.inject.Provider;
-@CommandMetaData(name = "type", descr = "Test prolog submit type")
+@CommandMetaData(name = "type", description = "Test prolog submit type")
final class TestSubmitTypeCommand extends BaseTestPrologCommand {
@Inject
private Provider<TestSubmitType> view;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/VersionCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/VersionCommand.java
index 2066cc2..19888c8 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/VersionCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/VersionCommand.java
@@ -18,7 +18,7 @@
import com.google.gerrit.sshd.CommandMetaData;
import com.google.gerrit.sshd.SshCommand;
-@CommandMetaData(name = "version", descr = "Display gerrit version")
+@CommandMetaData(name = "version", description = "Display gerrit version")
final class VersionCommand extends SshCommand {
@Override
diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin
new file mode 160000
index 0000000..0da2b05
--- /dev/null
+++ b/plugins/cookbook-plugin
@@ -0,0 +1 @@
+Subproject commit 0da2b05c13948dba6a92346538a844a20ee353cc
diff --git a/plugins/helloworld b/plugins/helloworld
deleted file mode 160000
index 6e3c3c8..0000000
--- a/plugins/helloworld
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 6e3c3c8a54e9e0e2c5b2fb9205bbbe3112ea55bb
diff --git a/plugins/replication b/plugins/replication
index d2796c5..7ec017f 160000
--- a/plugins/replication
+++ b/plugins/replication
@@ -1 +1 @@
-Subproject commit d2796c5d1cdc0e0a8313c3ef2b923433e421356d
+Subproject commit 7ec017fbac3f34fffc7af175d0dec181d18c33f2