Merge "Add new file name to current paths if the file was rewritten"
diff --git a/Documentation/.gitignore b/Documentation/.gitignore
deleted file mode 100644
index 8a3da24..0000000
--- a/Documentation/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.html
-/.published
diff --git a/Documentation/index.txt b/Documentation/index.txt
index ee76855..8ce2904 100644
--- a/Documentation/index.txt
+++ b/Documentation/index.txt
@@ -8,6 +8,7 @@
.. link:licenses.html[Licenses and Notices]
. Installing
.. link:intro-quick.html[A Quick Introduction To Gerrit]
+.. link:intro-change-screen.html[A Quick Introduction To The New Change Screen]
.. link:install.html[Installation Guide]
. Tutorial
.. Get started
diff --git a/Documentation/intro-change-screen.txt b/Documentation/intro-change-screen.txt
new file mode 100644
index 0000000..887e454
--- /dev/null
+++ b/Documentation/intro-change-screen.txt
@@ -0,0 +1,212 @@
+Change Screen - Introduction
+============================
+
+As of Gerrit 2.8 the change screen was redesigned from the ground up. The old
+changes screen is deprecated and will be discontinued in one of the next Gerrit
+releases.
+
+The design spirit of the new change screen is simplicity: only one patch set is
+presented on the screen. The list of related changes is always visible and
+optional elements are moved to pop down boxes.
+
+This is not only a facelift. The main highlights are under the hood:
+
+* Old style RPC calls are replaced by the REST API
+* The prettify syntax highlighting library was replaced by Codemirror
+* Automatic refresh of open changes
+* Support to download a patch direct in browser: no local repo is needed
+* JS API integration: it was never so easy to add change/revision actions to
+the UI from a plugin.
+
+This document is intended to help users to switch to the new change screen.
+
+Further information on the topic can be found in the:
+link:https://groups.google.com/forum/#!topic/repo-discuss/6Ryz9p6AzgE[
+CodeScreen2 thread on the repo-discuss mailing list].
+
+[[configuration]]
+Configuration
+~~~~~~~~~~~~~
+
+The new change screen is deactivated by default. It can be activated system-wide
+by changing the link:config-gerrit.html[gerrit.changeScreen] setting to
+`CHANGE_SCREEN2`. Users can deactivate it by setting `OLD_UI` on their user
+preferences page.
+
+[[switching-between-patch-sets]]
+Switching between patch sets
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+As already mentioned above, the main difference between the old and the new
+change screen is the fact that only one patch set is presented on the screen.
+
+To switch to other patch sets for the given change, the drop down 'Revisions'
+box is used on the right upper side of the change header.
+
+Patch sets are always sorted in descending order. The option to switch between
+ascending and reverse patch set sorting order is not supported on the new change
+screen.
+
+[[download-commands]]
+Download commands
+~~~~~~~~~~~~~~~~~
+
+The download commands are moved to the 'Download' drop down box. Patch files
+can be downloaded as base64 encoded or zipped versions.
+
+[[quick-approve]]
+Quick approve
+~~~~~~~~~~~~~
+
+The so called 'Quick approve' button is some times confusing. Normal users (i.e.
+non-maintainers) see this as 'Verified+1' button to the right of the 'Reply'
+button.
+
+The button is not always "Verified+1". The button appears if a user has
+permission to vote the max score in exactly one label that the rules have marked
+as NEED.
+
+For a maintainer with both 'Verified+1' and 'Code-Review+2' powers the button
+does not appear, as both categories are still marked NEED and the maintainer has
+permission to use both. If another maintainer scores 'Code-Review+2', then the
+button displays as 'Verified+1'. If a verifier scores 'Verified+1' the button
+displays as 'Code-Review+2'.
+
+It is important to note that by design, the user cannot provide a comment when
+using this button, hence the name 'Quick approve'. To provide comments, the
+'Reply' button should be used.
+
+[[reply-button]]
+Reply button
+~~~~~~~~~~~~
+
+This button corresponds to the 'Review' button the on patch set panel on the old
+change screen. The only new feature: the user can optionaly send an email
+during the vote.
+
+Key bindings: "a" to open the drop down. "ESC" to close it.
+
+
+[[edit-commit-message]]
+Edit commit message
+~~~~~~~~~~~~~~~~~~~
+
+To edit the commit message use the 'Edit Message' button on the change header,
+which will open a drop-down editor box.
+
+Key bindings: "e" to open the drop down. "ESC" to close it.
+
+[[edit-change-topic]]
+Edit change topic
+~~~~~~~~~~~~~~~~~
+
+To edit the topic use the edit icon to the right of the topic field.
+
+Key bindings: "t" to open the drop down. "ESC" to close it.
+
+[[abandon-restore]]
+Abandon or Restore changes
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When a change is abandoned or restored, a panel appears and a comment message
+can be provided.
+
+[[working-with-drafts]]
+Working with draft changes and patch sets
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When a change or a patch set is a draft, then three additional buttons appear on
+the action panel: 'Publish', 'Delete Revision', and 'Delete Change'. In the
+'Revisions' drop down a "(DRAFT)" suffix is added to the patch set number to
+indicate that the patch set is a draft.
+
+[[draft-comments]]
+Highlight draft comments
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+If a patch set has draft comments that weren't published yet, then that patch
+set is marked on the list in the 'Revisions' drop down list. In addition a red
+"draft" prefix appears on the filenames in the file table.
+
+[[codemirror]]
+Codemirror
+~~~~~~~~~~
+
+On the user preferences page, 'Side By Side' or 'Unified Diff' view can be
+configured. Use the "/" key to start the CodeMirror search, like in vim.
+
+Key bindings are not customizable at the moment. They may be added in the future.
+
+Range comments are supported on Codemirror's 'Side By Side' screen. Highlight
+lines with the mouse and then click the bottom-most line number to create a
+range comment for the highlighted lines.
+
+[[reviewers]]
+Reviewers
+~~~~~~~~~
+
+Reviewer are split into two groups: Reviewers who actually voted on the change
+in the 'Reviewers' field, and reviewers, who were added to the change but didn't
+vote yet in the 'CC' field.
+
+The votes per category are listed above the File list.
+
+To add a reviewer, use the '[+]' button to the right of the 'CC' field. Typing
+into the pop-up text field activates auto completion of user or group names.
+
+To remove reviewers click on the 'x' icon in the reviewer's "chip".
+
+Key bindings: "c" to add a reviewer. "ESC" to close the drop down.
+
+[[auto-refresh]]
+Auto refresh of change data
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+On the new change screen polling for updates to the currently open change is
+activated per default. For example, if another user votes or comments on the
+same change, then a popup window appears on the bottom right corner of the
+screen to notify the user that the change was updated.
+
+The default delay is 30 seconds. It can be configured with the
+link:config-gerrit.html[change.updateDelay] setting.
+
+[[depends-on-needed-by]]
+"Depends on" and "Needed by"
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Dependencies and dependent changes are listed in the 'Related Changes' drop
+down.
+
+Key bindings: "J" & "K" to navigate between the related changes. "O" to
+open the currently selected related change.
+
+[[file-table]]
+File table
+~~~~~~~~~~
+
+The user can now manually toggle the 'reviewed' flag per file using the check
+box to the left of the filename.
+
+Key bindings: "j" & "k" to navigate in the file table, and "r" to toggle the
+'reviewed' flag.
+
+[[included-in]]
+Included in
+~~~~~~~~~~~
+
+To see the branches a specific change was merged into and the list of the tags
+a change was tagged with, use the 'Included In' drop down on the change header,
+to the left of the 'Revisions' drop down.
+
+Note that this list is only visible on merged changes.
+
+[[missing-features]]
+Missing features
+~~~~~~~~~~~~~~~~
+
+Several features have not been implemented yet:
+
+* Permalink a change
+* Allow to see if a reviewer can't vote on a label
+* Allow to select a reference version as base for the comparison
+* Change diff view preferences
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 23787af..77a0091 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
@@ -27,6 +27,7 @@
import com.google.gerrit.client.ui.NavigationTable;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Patch;
+import com.google.gerrit.reviewdb.client.Patch.ChangeType;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JsArray;
@@ -65,6 +66,7 @@
interface FileTableCss extends CssResource {
String pointer();
String reviewed();
+ String status();
String pathColumn();
String draftColumn();
String newColumn();
@@ -74,7 +76,6 @@
String commonPrefix();
String inserted();
String deleted();
- String statusTypeCell();
}
private static final String REVIEWED;
@@ -412,7 +413,7 @@
sb.openTr();
sb.openTh().setStyleName(R.css().pointer()).closeTh();
sb.openTh().setStyleName(R.css().reviewed()).closeTh();
- sb.openTh().setStyleName(R.css().statusTypeCell()).closeTh();
+ sb.openTh().setStyleName(R.css().status()).closeTh();
sb.openTh().append(Util.C.patchTableColumnName()).closeTh();
sb.openTh()
.setAttribute("colspan", 3)
@@ -450,10 +451,10 @@
}
private void columnStatus(SafeHtmlBuilder sb, FileInfo info) {
- sb.openTd().setStyleName(R.css().statusTypeCell());
- if (Patch.COMMIT_MSG.equals(info.path())) {
- sb.nbsp();
- } else {
+ sb.openTd().setStyleName(R.css().status());
+ if (!Patch.COMMIT_MSG.equals(info.path())
+ && info.status() != null
+ && !ChangeType.MODIFIED.matches(info.status())) {
sb.append(info.status());
}
sb.closeTd();
@@ -586,7 +587,7 @@
sb.openTr();
sb.openTh().setStyleName(R.css().pointer()).closeTh();
sb.openTh().setStyleName(R.css().reviewed()).closeTh();
- sb.openTh().setStyleName(R.css().statusTypeCell()).closeTh();
+ sb.openTh().setStyleName(R.css().status()).closeTh();
sb.openTd().closeTd(); // path
sb.openTd().setAttribute("colspan", 3).closeTd(); // comments
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Labels.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Labels.java
index 4ded78f..969889f 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Labels.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Labels.java
@@ -261,14 +261,14 @@
name = Integer.toString(ai._account_id());
}
- html.openSpan();
- html.setAttribute("role", "listitem");
- html.setAttribute(DATA_ID, ai._account_id());
- html.setStyleName(style.label_user());
+ html.openSpan()
+ .setAttribute("role", "listitem")
+ .setAttribute(DATA_ID, ai._account_id())
+ .setStyleName(style.label_user());
if (img != null) {
- html.openElement("img");
- html.setStyleName(style.avatar());
- html.setAttribute("src", img.url());
+ html.openElement("img")
+ .setStyleName(style.avatar())
+ .setAttribute("src", img.url());
if (img.width() > 0) {
html.setAttribute("width", img.width());
}
@@ -279,10 +279,11 @@
}
html.append(name);
if (removable.contains(ai._account_id())) {
- html.openElement("button");
- html.setAttribute("title", Util.M.removeReviewer(name));
- html.setAttribute("onclick", REMOVE + "(event)");
- html.append(new ImageResourceRenderer().render(Resources.I.remove_reviewer()));
+ html.openElement("button")
+ .setAttribute("title", Util.M.removeReviewer(name))
+ .setAttribute("onclick", REMOVE + "(event)")
+ .append(new ImageResourceRenderer().render(Resources.I.remove_reviewer()))
+ .closeElement("button");
}
html.closeSpan();
}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/file_table.css b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/file_table.css
index 810c35b..a9d5a38 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/file_table.css
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/file_table.css
@@ -19,6 +19,11 @@
vertical-align: top;
}
+.status {
+ padding-right: 4px;
+ color: #888;
+}
+
.pathColumn {
white-space: nowrap;
min-width: 600px;
@@ -66,11 +71,3 @@
background-color: #d44;
}
-.statusTypeCell {
- width: 1px;
- padding-left: 5px;
- padding-right: 5px;
- border-right: 1px solid trimColor;
- border-bottom: 1px solid trimColor;
- vertical-align: top;
-}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/SideBySideTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/SideBySideTable.java
index 4bdd615..5ebeaf5 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/SideBySideTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/SideBySideTable.java
@@ -209,7 +209,7 @@
for (int row = 0; row < lines.size(); row++) {
setRowItem(row, lines.get(row));
if (lines.get(row) instanceof SkippedLine) {
- createSkipLine(row, (SkippedLine) lines.get(row));
+ createSkipLine(row, (SkippedLine) lines.get(row), script.getA().isWholeFile());
}
}
}
@@ -540,16 +540,18 @@
if (numRows > 0) {
line.incrementStart(numRows);
- createSkipLine(row + loopTo, line);
+ // If we got here, we must have the whole file anyway.
+ createSkipLine(row + loopTo, line, true);
} else if (numRows < 0) {
line.reduceSize(-numRows);
- createSkipLine(row, line);
+ // If we got here, we must have the whole file anyway.
+ createSkipLine(row, line, true);
} else {
table.removeRow(row + loopTo);
}
}
- private void createSkipLine(int row, SkippedLine line) {
+ private void createSkipLine(int row, SkippedLine line, boolean isWholeFile) {
FlowPanel p = new FlowPanel();
InlineLabel l1 = new InlineLabel(" " + PatchUtil.C.patchSkipRegionStart() + " ");
InlineLabel l2 = new InlineLabel(" " + PatchUtil.C.patchSkipRegionEnd() + " ");
@@ -558,7 +560,7 @@
all.addClickHandler(expandAllListener);
all.setStyleName(Gerrit.RESOURCES.css().skipLine());
- if (line.getSize() > 30) {
+ if (line.getSize() > 30 && isWholeFile) {
// Only show the expand before/after if skipped more than 30 lines.
Anchor b = new Anchor(PatchUtil.M.expandBefore(NUM_ROWS_TO_EXPAND), true);
Anchor a = new Anchor(PatchUtil.M.expandAfter(NUM_ROWS_TO_EXPAND), true);
@@ -574,10 +576,14 @@
p.add(all);
p.add(l2);
p.add(a);
- } else {
+ } else if (isWholeFile) {
p.add(l1);
p.add(all);
p.add(l2);
+ } else {
+ p.add(l1);
+ p.add(new InlineLabel(" " + line.getSize() + " "));
+ p.add(l2);
}
table.setWidget(row, 1, p);
}
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/DirectChangeByCommit.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/DirectChangeByCommit.java
index 407784e..efbef76 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/DirectChangeByCommit.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/DirectChangeByCommit.java
@@ -2,6 +2,7 @@
package com.google.gerrit.httpd;
+import com.google.common.base.CharMatcher;
import com.google.gerrit.common.PageLinks;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.CurrentUser;
@@ -49,7 +50,7 @@
@Override
protected void doGet(final HttpServletRequest req,
final HttpServletResponse rsp) throws IOException {
- String query = req.getPathInfo();
+ String query = CharMatcher.is('/').trimTrailingFrom(req.getPathInfo());
HashSet<Change.Id> ids = new HashSet<Change.Id>();
try {
ChangeQueryBuilder builder = queryBuilder.create(currentUser.get());
@@ -69,7 +70,7 @@
}
}
} catch (QueryParseException e) {
- log.warn("Received invalid query by URL: /r/" + query, e);
+ log.info("Received invalid query by URL: /r/" + query);
} catch (OrmException e) {
log.warn("Cannot process query by URL: /r/" + query, e);
}
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailFactory.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailFactory.java
index 36c9ff1..cf8b4db 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailFactory.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailFactory.java
@@ -214,7 +214,7 @@
PatchSet.Id id = msg.getPatchSetId();
if (id != null) {
PatchSet ps = patchsetsById.get(msg.getPatchSetId());
- if (control.isPatchVisible(ps, db)) {
+ if (ps != null && control.isPatchVisible(ps, db)) {
msgList.add(msg);
}
} else {
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Patch.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Patch.java
index 6ddd6d2..f5ecd2e 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Patch.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Patch.java
@@ -97,6 +97,10 @@
return code;
}
+ public boolean matches(String s) {
+ return s != null && s.length() == 1 && s.charAt(0) == code;
+ }
+
public static ChangeType forCode(final char c) {
for (final ChangeType s : ChangeType.values()) {
if (s.code == c) {
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/ChangeAccess.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/ChangeAccess.java
index 66df78a..9618bc3 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/ChangeAccess.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/ChangeAccess.java
@@ -42,12 +42,11 @@
@Query("WHERE dest.projectName = ?")
ResultSet<Change> byProject(Project.NameKey p) throws OrmException;
+ @Deprecated
@Query("WHERE owner = ? AND open = true ORDER BY createdOn, changeId")
ResultSet<Change> byOwnerOpen(Account.Id id) throws OrmException;
- @Query("WHERE owner = ? AND open = false ORDER BY lastUpdatedOn DESC LIMIT 5")
- ResultSet<Change> byOwnerClosed(Account.Id id) throws OrmException;
-
+ @Deprecated
@Query("WHERE owner = ? AND open = false ORDER BY lastUpdatedOn")
ResultSet<Change> byOwnerClosedAll(Account.Id id) throws OrmException;
@@ -58,9 +57,11 @@
@Query("WHERE status = '" + Change.STATUS_SUBMITTED + "'")
ResultSet<Change> allSubmitted() throws OrmException;
+ @Deprecated
@Query("WHERE open = true AND sortKey > ? ORDER BY sortKey LIMIT ?")
ResultSet<Change> allOpenPrev(String sortKey, int limit) throws OrmException;
+ @Deprecated
@Query("WHERE open = true AND sortKey < ? ORDER BY sortKey DESC LIMIT ?")
ResultSet<Change> allOpenNext(String sortKey, int limit) throws OrmException;
@@ -70,6 +71,7 @@
@Query("WHERE open = true AND dest = ?")
ResultSet<Change> byBranchOpenAll(Branch.NameKey p) throws OrmException;
+ @Deprecated
@Query("WHERE open = true AND dest.projectName = ? AND sortKey > ?"
+ " ORDER BY sortKey LIMIT ?")
ResultSet<Change> byProjectOpenPrev(Project.NameKey p, String sortKey,
@@ -80,29 +82,35 @@
ResultSet<Change> byProjectOpenNext(Project.NameKey p, String sortKey,
int limit) throws OrmException;
+ @Deprecated
@Query("WHERE open = false AND status = ? AND dest.projectName = ? AND sortKey > ?"
+ " ORDER BY sortKey LIMIT ?")
ResultSet<Change> byProjectClosedPrev(char status, Project.NameKey p,
String sortKey, int limit) throws OrmException;
+ @Deprecated
@Query("WHERE open = false AND status = ? AND dest.projectName = ? AND sortKey < ?"
+ " ORDER BY sortKey DESC LIMIT ?")
ResultSet<Change> byProjectClosedNext(char status, Project.NameKey p,
String sortKey, int limit) throws OrmException;
+ @Deprecated
@Query("WHERE open = false AND status = ? AND sortKey > ? ORDER BY sortKey LIMIT ?")
ResultSet<Change> allClosedPrev(char status, String sortKey, int limit)
throws OrmException;
+ @Deprecated
@Query("WHERE open = false AND status = ? AND sortKey < ? ORDER BY sortKey DESC LIMIT ?")
ResultSet<Change> allClosedNext(char status, String sortKey, int limit)
throws OrmException;
+ @Deprecated
@Query("WHERE open = false AND status = ? AND dest = ? AND sortKey > ?"
+ " ORDER BY sortKey LIMIT ?")
ResultSet<Change> byBranchClosedPrev(char status, Branch.NameKey p,
String sortKey, int limit) throws OrmException;
+ @Deprecated
@Query("WHERE open = false AND status = ? AND dest = ? AND sortKey < ?"
+ " ORDER BY sortKey DESC LIMIT ?")
ResultSet<Change> byBranchClosedNext(char status, Branch.NameKey p,
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/PatchSetApprovalAccess.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/PatchSetApprovalAccess.java
index dae8e6d..25dfdbd 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/PatchSetApprovalAccess.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/PatchSetApprovalAccess.java
@@ -39,15 +39,12 @@
ResultSet<PatchSetApproval> byPatchSetUser(PatchSet.Id patchSet,
Account.Id account) throws OrmException;
+ @Deprecated
@Query("WHERE changeOpen = true AND key.accountId = ?")
ResultSet<PatchSetApproval> openByUser(Account.Id account)
throws OrmException;
- @Query("WHERE changeOpen = false AND key.accountId = ?"
- + " ORDER BY changeSortKey DESC LIMIT 10")
- ResultSet<PatchSetApproval> closedByUser(Account.Id account)
- throws OrmException;
-
+ @Deprecated
@Query("WHERE changeOpen = false AND key.accountId = ? ORDER BY changeSortKey")
ResultSet<PatchSetApproval> closedByUserAll(Account.Id account)
throws OrmException;
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/TrackingIdAccess.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/TrackingIdAccess.java
index d8b2cee..9f2bae5 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/TrackingIdAccess.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/TrackingIdAccess.java
@@ -29,6 +29,7 @@
@Query("WHERE key.changeId = ?")
ResultSet<TrackingId> byChange(Change.Id change) throws OrmException;
+ @Deprecated
@Query("WHERE key.trackingKey = ?")
ResultSet<TrackingId> byTrackingId(TrackingId.Id trackingId)
throws OrmException;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
index 2f1cfa0dc..07ecce2 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
@@ -56,6 +56,7 @@
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.FooterLine;
@@ -496,8 +497,9 @@
return next;
}
- public static PatchSet.Id nextPatchSetId(Repository git, PatchSet.Id id) {
- return nextPatchSetId(git.getAllRefs(), id);
+ public static PatchSet.Id nextPatchSetId(Repository git, PatchSet.Id id)
+ throws IOException {
+ return nextPatchSetId(git.getRefDatabase().getRefs(RefDatabase.ALL), id);
}
private static PatchSet.Id nextPatchSetId(PatchSet.Id id) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/FileInfoJson.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/FileInfoJson.java
index f5a0313..65b96b3 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/FileInfoJson.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/FileInfoJson.java
@@ -56,7 +56,8 @@
Map<String, FileInfo> files = Maps.newTreeMap();
for (PatchListEntry e : list.getPatches()) {
FileInfoJson.FileInfo d = new FileInfoJson.FileInfo();
- d.status = e.getChangeType().getCode();
+ d.status = e.getChangeType() != Patch.ChangeType.MODIFIED
+ ? e.getChangeType().getCode() : null;
d.oldPath = e.getOldName();
if (e.getPatchType() == Patch.PatchType.BINARY) {
d.binary = true;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
index c773735..595e1c8 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
@@ -40,6 +40,7 @@
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevFlag;
@@ -98,7 +99,7 @@
Repository git = gitManager.openRepository(change.getProject());
try {
- Map<String, Ref> refs = git.getAllRefs();
+ Map<String, Ref> refs = git.getRefDatabase().getRefs(RefDatabase.ALL);
Ref ref = refs.get(change.getDest().get());
if (isStale(change, ref)) {
result.mergeable =
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 bc70cef..c64db76 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
@@ -163,7 +163,7 @@
return this;
}
- public PatchSet.Id getPatchSetId() {
+ public PatchSet.Id getPatchSetId() throws IOException {
init();
return patchSet.getId();
}
@@ -325,7 +325,7 @@
return updatedChange;
}
- private void init() {
+ private void init() throws IOException {
if (sshInfo == null) {
sshInfo = new NoSshInfo();
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
index 660dafb..bae0990 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
@@ -19,6 +19,7 @@
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.eclipse.jgit.lib.RefDatabase.ALL;
import com.google.common.base.Objects;
import com.google.common.collect.ArrayListMultimap;
@@ -404,7 +405,7 @@
}
try {
- for (final Ref r : repo.getAllRefs().values()) {
+ for (final Ref r : repo.getRefDatabase().getRefs(ALL).values()) {
if (r.getName().startsWith(Constants.R_HEADS)) {
try {
alreadyAccepted.add(rw.parseCommit(r.getObjectId()));
@@ -425,8 +426,15 @@
final ListMultimap<SubmitType, Change> toSubmit =
ArrayListMultimap.create();
+ final Map<String, Ref> allRefs;
+ try {
+ allRefs = repo.getRefDatabase().getRefs(ALL);
+ } catch (IOException e) {
+ throw new MergeException(e.getMessage(), e);
+ }
+
final Set<ObjectId> tips = new HashSet<ObjectId>();
- for (final Ref r : repo.getAllRefs().values()) {
+ for (final Ref r : allRefs.values()) {
tips.add(r.getObjectId());
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
index 7314c64..594b4e4 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
@@ -18,6 +18,7 @@
import static com.google.gerrit.server.mail.MailUtil.getRecipientsFromApprovals;
import static com.google.gerrit.server.mail.MailUtil.getRecipientsFromFooters;
import static org.eclipse.jgit.lib.Constants.R_HEADS;
+import static org.eclipse.jgit.lib.RefDatabase.ALL;
import static org.eclipse.jgit.transport.ReceiveCommand.Result.NOT_ATTEMPTED;
import static org.eclipse.jgit.transport.ReceiveCommand.Result.OK;
import static org.eclipse.jgit.transport.ReceiveCommand.Result.REJECTED_MISSING_OBJECT;
@@ -123,6 +124,7 @@
import org.eclipse.jgit.transport.AdvertiseRefsHookChain;
import org.eclipse.jgit.transport.BaseReceivePack;
import org.eclipse.jgit.transport.ReceiveCommand;
+import org.eclipse.jgit.transport.ServiceMayNotContinueException;
import org.eclipse.jgit.transport.ReceiveCommand.Result;
import org.eclipse.jgit.transport.ReceivePack;
import org.eclipse.jgit.transport.UploadPack;
@@ -395,10 +397,18 @@
List<AdvertiseRefsHook> advHooks = new ArrayList<AdvertiseRefsHook>(3);
advHooks.add(new AdvertiseRefsHook() {
@Override
- public void advertiseRefs(BaseReceivePack rp) {
+ public void advertiseRefs(BaseReceivePack rp)
+ throws ServiceMayNotContinueException {
allRefs = rp.getAdvertisedRefs();
if (allRefs == null) {
- allRefs = rp.getRepository().getAllRefs();
+ try {
+ allRefs = rp.getRepository().getRefDatabase().getRefs(ALL);
+ } catch (IOException e) {
+ ServiceMayNotContinueException ex =
+ new ServiceMayNotContinueException(e.getMessage());
+ ex.initCause(e);
+ throw ex;
+ }
}
rp.setAdvertisedRefs(allRefs, rp.getAdvertisedObjects());
}
@@ -1975,7 +1985,7 @@
private Ref findMergedInto(final String first, final RevCommit commit) {
try {
- final Map<String, Ref> all = repo.getAllRefs();
+ final Map<String, Ref> all = repo.getRefDatabase().getRefs(ALL);
Ref firstRef = all.get(first);
if (firstRef != null && isMergedInto(commit, firstRef)) {
return firstRef;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsAdvertiseRefsHook.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsAdvertiseRefsHook.java
index ace4e90..530a388 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsAdvertiseRefsHook.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsAdvertiseRefsHook.java
@@ -14,6 +14,8 @@
package com.google.gerrit.server.git;
+import static org.eclipse.jgit.lib.RefDatabase.ALL;
+
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gerrit.reviewdb.client.Change;
@@ -30,6 +32,7 @@
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.transport.AdvertiseRefsHook;
import org.eclipse.jgit.transport.BaseReceivePack;
+import org.eclipse.jgit.transport.ServiceMayNotContinueException;
import org.eclipse.jgit.transport.UploadPack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,10 +62,18 @@
}
@Override
- public void advertiseRefs(BaseReceivePack rp) {
+ public void advertiseRefs(BaseReceivePack rp)
+ throws ServiceMayNotContinueException {
Map<String, Ref> oldRefs = rp.getAdvertisedRefs();
if (oldRefs == null) {
- oldRefs = rp.getRepository().getAllRefs();
+ try {
+ oldRefs = rp.getRepository().getRefDatabase().getRefs(ALL);
+ } catch (IOException e) {
+ ServiceMayNotContinueException ex =
+ new ServiceMayNotContinueException(e.getMessage());
+ ex.initCause(e);
+ throw ex;
+ }
}
Map<String, Ref> r = Maps.newHashMapWithExpectedSize(oldRefs.size());
for (Map.Entry<String, Ref> e : oldRefs.entrySet()) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java
index f469059..3eb9273 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java
@@ -26,6 +26,7 @@
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectIdOwnerMap;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevSort;
@@ -159,7 +160,7 @@
TagWalk rw = new TagWalk(git);
rw.setRetainBody(false);
try {
- for (Ref ref : git.getAllRefs().values()) {
+ for (Ref ref : git.getRefDatabase().getRefs(RefDatabase.ALL).values()) {
if (skip(ref)) {
continue;
@@ -186,7 +187,7 @@
}
}
} catch (IOException e) {
- log.warn("Repository " + projectName + " has corruption", e);
+ log.warn("Error building tags for repository " + projectName, e);
} finally {
rw.release();
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/VisibleRefFilter.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/VisibleRefFilter.java
index 5cd0def..8c65b1a 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/VisibleRefFilter.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/VisibleRefFilter.java
@@ -24,12 +24,15 @@
import com.google.gwtorm.server.OrmException;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.transport.AbstractAdvertiseRefsHook;
+import org.eclipse.jgit.transport.ServiceMayNotContinueException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -120,9 +123,16 @@
}
@Override
- protected Map<String, Ref> getAdvertisedRefs(
- Repository repository, RevWalk revWalk) {
- return filter(repository.getAllRefs());
+ protected Map<String, Ref> getAdvertisedRefs(Repository repository,
+ RevWalk revWalk) throws ServiceMayNotContinueException {
+ try {
+ return filter(repository.getRefDatabase().getRefs(RefDatabase.ALL));
+ } catch (IOException e) {
+ ServiceMayNotContinueException ex =
+ new ServiceMayNotContinueException(e.getMessage());
+ ex.initCause(e);
+ throw ex;
+ }
}
private Map<String, Ref> filter(Map<String, Ref> refs) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
index 0dbf1af..c1ee9b0 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
@@ -14,6 +14,8 @@
package com.google.gerrit.server.index;
+import static org.eclipse.jgit.lib.RefDatabase.ALL;
+
import com.google.common.base.Stopwatch;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableList;
@@ -203,7 +205,7 @@
Multimap<ObjectId, ChangeData> byId = ArrayListMultimap.create();
Repository repo = repoManager.openRepository(project);
try {
- Map<String, Ref> refs = repo.getAllRefs();
+ Map<String, Ref> refs = repo.getRefDatabase().getRefs(ALL);
for (Change c : db.get().changes().byProject(project)) {
Ref r = refs.get(c.currentPatchSetId().toRefName());
if (r != null) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeIndex.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeIndex.java
index fd37cfb..397b044 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeIndex.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeIndex.java
@@ -125,6 +125,11 @@
/**
* Convert the given operator predicate into a source searching the index and
* returning only the documents matching that predicate.
+ * <p>
+ * This method may be called multiple times for variations on the same
+ * predicate or multiple predicate subtrees in the course of processing a
+ * single query, so it should not have any side effects (e.g. starting a
+ * search in the background).
*
* @param p the predicate to match. Must be a tree containing only AND, OR,
* or NOT predicates as internal nodes, and {@link IndexPredicate}s as
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedChangeQuery.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedChangeQuery.java
index 2185af3..f915dad 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedChangeQuery.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedChangeQuery.java
@@ -91,8 +91,9 @@
Predicate<ChangeData> pred, int limit) throws QueryParseException {
this.db = db;
this.index = index;
- this.pred = pred;
this.limit = limit;
+ this.pred = pred;
+ this.source = index.getSource(pred, limit);
}
@Override
@@ -131,14 +132,8 @@
@Override
public ResultSet<ChangeData> read() throws OrmException {
- final ChangeDataSource currSource;
- try {
- currSource = index.getSource(pred, limit);
- } catch (QueryParseException e) {
- throw new OrmException(e);
- }
- source = currSource;
- final ResultSet<ChangeData> rs = source.read();
+ final ChangeDataSource currSource = source;
+ final ResultSet<ChangeData> rs = currSource.read();
return new ResultSet<ChangeData>() {
@Override
@@ -174,6 +169,14 @@
@Override
public ResultSet<ChangeData> restart(ChangeData last) throws OrmException {
pred = replaceSortKeyPredicates(pred, last.change(db).getSortKey());
+ try {
+ source = index.getSource(pred, limit);
+ } catch (QueryParseException e) {
+ // Don't need to show this exception to the user; the only thing that
+ // changed about pred was its SortKeyPredicates, and any other QPEs
+ // that might happen should have already thrown from the constructor.
+ throw new OrmException(e);
+ }
return read();
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/CreateBranch.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/CreateBranch.java
index 0c29ec8..eab6ed9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/CreateBranch.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/CreateBranch.java
@@ -14,6 +14,8 @@
package com.google.gerrit.server.project;
+import static org.eclipse.jgit.lib.RefDatabase.ALL;
+
import com.google.gerrit.common.ChangeHooks;
import com.google.gerrit.common.errors.InvalidRevisionException;
import com.google.gerrit.extensions.restapi.AuthException;
@@ -214,7 +216,7 @@
} catch (IncorrectObjectTypeException err) {
throw new InvalidRevisionException();
}
- for (final Ref r : repo.getAllRefs().values()) {
+ for (final Ref r : repo.getRefDatabase().getRefs(ALL).values()) {
try {
rw.markUninteresting(rw.parseAny(r.getObjectId()));
} catch (MissingObjectException err) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ListBranches.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ListBranches.java
index b01c757..7ed5b5f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ListBranches.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ListBranches.java
@@ -24,6 +24,7 @@
import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.Repository;
import java.io.IOException;
@@ -59,7 +60,7 @@
}
try {
- final Map<String, Ref> all = db.getAllRefs();
+ final Map<String, Ref> all = db.getRefDatabase().getRefs(RefDatabase.ALL);
if (!all.containsKey(Constants.HEAD)) {
// The branch pointed to by HEAD doesn't exist yet, so getAllRefs
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java
index 2ae42a4..f98822f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java
@@ -14,6 +14,8 @@
package com.google.gerrit.server.project;
+import static org.eclipse.jgit.lib.RefDatabase.ALL;
+
import com.google.common.collect.Lists;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.common.PageLinks;
@@ -29,7 +31,6 @@
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.client.Project.NameKey;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.InternalUser;
@@ -489,11 +490,12 @@
}
public boolean canReadCommit(RevWalk rw, RevCommit commit) {
- NameKey projName = state.getProject().getNameKey();
+ Project.NameKey projName = state.getProject().getNameKey();
try {
Repository repo = repoManager.openRepository(projName);
try {
- for (Entry<String, Ref> entry : repo.getAllRefs().entrySet()) {
+ Map<String, Ref> allRefs = repo.getRefDatabase().getRefs(ALL);
+ for (Entry<String, Ref> entry : allRefs.entrySet()) {
RevCommit tip;
try {
tip = rw.parseCommit(entry.getValue().getObjectId());
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 34fe3fb..c94ee12 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
@@ -81,6 +81,7 @@
@Named("S") final SortKeyPredicate.After s,
@Named("L") final IntPredicate<ChangeData> l) {
return new PaginatedSource(40000, s.getValue(), l.intValue()) {
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -105,6 +106,7 @@
@Named("S") final SortKeyPredicate.Before s,
@Named("L") final IntPredicate<ChangeData> l) {
return new PaginatedSource(40000, s.getValue(), l.intValue()) {
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -128,6 +130,7 @@
@Named("S") final SortKeyPredicate.After s,
@Named("L") final IntPredicate<ChangeData> l) {
return new PaginatedSource(500, s.getValue(), l.intValue()) {
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -170,6 +173,7 @@
@Named("S") final SortKeyPredicate.After s,
@Named("L") final IntPredicate<ChangeData> l) {
return new PaginatedSource(40000, s.getValue(), l.intValue()) {
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -192,6 +196,7 @@
@Named("S") final SortKeyPredicate.Before s,
@Named("L") final IntPredicate<ChangeData> l) {
return new PaginatedSource(40000, s.getValue(), l.intValue()) {
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -214,6 +219,7 @@
@Named("S") final SortKeyPredicate.After s,
@Named("L") final IntPredicate<ChangeData> l) {
return new PaginatedSource(40000, s.getValue(), l.intValue()) {
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -236,6 +242,7 @@
@Named("S") final SortKeyPredicate.Before s,
@Named("L") final IntPredicate<ChangeData> l) {
return new PaginatedSource(40000, s.getValue(), l.intValue()) {
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -257,6 +264,7 @@
@Named("S") final SortKeyPredicate.After s,
@Named("L") final IntPredicate<ChangeData> l) {
return new PaginatedSource(2000, s.getValue(), l.intValue()) {
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -275,6 +283,7 @@
@Named("S") final SortKeyPredicate.Before s,
@Named("L") final IntPredicate<ChangeData> l) {
return new PaginatedSource(2000, s.getValue(), l.intValue()) {
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -298,6 +307,7 @@
init("r20_byMergedPrev", s, l);
}
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -322,6 +332,7 @@
init("r20_byMergedNext", s, l);
}
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -346,6 +357,7 @@
init("r20_byAbandonedPrev", s, l);
}
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -370,6 +382,7 @@
init("r20_byAbandonedNext", s, l);
}
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a, String key, int limit)
throws OrmException {
@@ -409,6 +422,7 @@
init("r25_byOwnerOpen", o);
}
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a) throws OrmException {
return a.byOwnerOpen(o.getAccountId());
@@ -430,6 +444,7 @@
init("r25_byOwnerClosed", o);
}
+ @SuppressWarnings("deprecation")
@Override
ResultSet<Change> scan(ChangeAccess a) throws OrmException {
return a.byOwnerClosedAll(o.getAccountId());
@@ -457,6 +472,7 @@
init("r30_byReviewerOpen", r);
}
+ @SuppressWarnings("deprecation")
@Override
public ResultSet<ChangeData> read() throws OrmException {
return ChangeDataResultSet.patchSetApproval(dbProvider.get()
@@ -490,6 +506,7 @@
init("r30_byReviewerClosed", r);
}
+ @SuppressWarnings("deprecation")
@Override
public ResultSet<ChangeData> read() throws OrmException {
return ChangeDataResultSet.patchSetApproval(dbProvider.get()
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java
index 38b3d0c..89e5ba9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java
@@ -46,6 +46,7 @@
return false;
}
+ @SuppressWarnings("deprecation")
@Override
public ResultSet<ChangeData> read() throws OrmException {
HashSet<Change.Id> ids = new HashSet<Change.Id>();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_56.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_56.java
index 2409b12e..27bf0bc 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_56.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_56.java
@@ -24,6 +24,7 @@
import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.Repository;
@@ -61,7 +62,15 @@
continue;
}
try {
- Map<String, Ref> all = git.getAllRefs();
+ Map<String, Ref> all;
+ try {
+ all = git.getRefDatabase().getRefs(RefDatabase.ALL);
+ } catch (IOException e) {
+ ui.message("warning: " + name.get() + ": Cannot read refs: "
+ + e.getMessage());
+ e.printStackTrace();
+ continue;
+ }
if (all.keySet().equals(keysOne) || all.keySet().equals(keysTwo)) {
try {
RefUpdate update = git.updateRef(Constants.HEAD);
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 b0ed650..b071e3d 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
@@ -14,6 +14,8 @@
package com.google.gerrit.sshd.commands;
+import static org.eclipse.jgit.lib.RefDatabase.ALL;
+
import com.google.gerrit.common.data.GlobalCapability;
import com.google.gerrit.extensions.annotations.RequiresCapability;
import com.google.gerrit.reviewdb.client.Account;
@@ -88,30 +90,33 @@
IdentifiedUser user = userFactory.create(userAccount.getId());
ProjectControl userProjectControl = projectControl.forUser(user);
- Repository repo = null;
+ Repository repo;
try {
repo = repoManager.openRepository(userProjectControl.getProject()
.getNameKey());
-
- Map<String, Ref> refsMap =
- new VisibleRefFilter(tagCache, changeCache, repo, userProjectControl,
- db, true).filter(repo.getAllRefs(), false);
-
- for (final String ref : refsMap.keySet()) {
- if (!onlyRefsHeads || ref.startsWith(Branch.R_HEADS)) {
- stdout.println(ref);
- }
- }
} catch (RepositoryNotFoundException e) {
throw new UnloggedFailure("fatal: '"
+ projectControl.getProject().getNameKey() + "': not a git archive");
} catch (IOException e) {
throw new UnloggedFailure("fatal: Error opening: '"
+ projectControl.getProject().getNameKey());
- } finally {
- if (repo != null) {
- repo.close();
+ }
+
+ try {
+ Map<String, Ref> refsMap =
+ new VisibleRefFilter(tagCache, changeCache, repo, userProjectControl,
+ db, true).filter(repo.getRefDatabase().getRefs(ALL), false);
+
+ for (final String ref : refsMap.keySet()) {
+ if (!onlyRefsHeads || ref.startsWith(Branch.R_HEADS)) {
+ stdout.println(ref);
+ }
}
+ } catch (IOException e) {
+ throw new Failure(1, "fatal: Error reading refs: '"
+ + projectControl.getProject().getNameKey(), e);
+ } finally {
+ repo.close();
}
}
}
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 cd50499..31f9301 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
@@ -28,6 +28,7 @@
import org.eclipse.jgit.errors.TooLargeObjectInPackException;
import org.eclipse.jgit.errors.UnpackException;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.transport.AdvertiseRefsHook;
import org.eclipse.jgit.transport.ReceivePack;
import org.kohsuke.args4j.Option;
@@ -141,8 +142,10 @@
+ ref.getName() + "\n");
}
+ Map<String, Ref> allRefs =
+ rp.getRepository().getRefDatabase().getRefs(RefDatabase.ALL);
List<Ref> hidden = new ArrayList<Ref>();
- for (Ref ref : rp.getRepository().getAllRefs().values()) {
+ for (Ref ref : allRefs.values()) {
if (!adv.containsKey(ref.getName())) {
hidden.add(ref);
}
diff --git a/lib/asciidoctor/BUCK b/lib/asciidoctor/BUCK
index af6e31e..d27d11a 100644
--- a/lib/asciidoctor/BUCK
+++ b/lib/asciidoctor/BUCK
@@ -16,6 +16,7 @@
'//lib:args4j',
'//lib:guava',
],
+ visibility = ['//tools/eclipse:classpath'],
)
java_binary(
@@ -35,6 +36,7 @@
'//lib/lucene:analyzers-common',
'//lib/lucene:core',
],
+ visibility = ['//tools/eclipse:classpath'],
)
maven_jar(
diff --git a/lib/asciidoctor/java/AsciiDoctor.java b/lib/asciidoctor/java/AsciiDoctor.java
index 3e7f5e3..a5bf492 100644
--- a/lib/asciidoctor/java/AsciiDoctor.java
+++ b/lib/asciidoctor/java/AsciiDoctor.java
@@ -15,7 +15,6 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
-import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/lib/asciidoctor/java/DocIndexer.java b/lib/asciidoctor/java/DocIndexer.java
index 1185f5a..5da7858 100644
--- a/lib/asciidoctor/java/DocIndexer.java
+++ b/lib/asciidoctor/java/DocIndexer.java
@@ -40,8 +40,7 @@
import org.kohsuke.args4j.Option;
public class DocIndexer {
-
- private static final Version LUCENE_VERSION = Version.LUCENE_43;
+ private static final Version LUCENE_VERSION = Version.LUCENE_44;
private static final String DOC_FIELD = "doc";
private static final String URL_FIELD = "url";
diff --git a/tools/eclipse/BUCK b/tools/eclipse/BUCK
index 874c3fc..9d6dd53 100644
--- a/tools/eclipse/BUCK
+++ b/tools/eclipse/BUCK
@@ -10,6 +10,8 @@
'//gerrit-httpd:httpd_tests',
'//gerrit-main:main_lib',
'//gerrit-server:server__compile',
+ '//lib/asciidoctor:asciidoc_lib',
+ '//lib/asciidoctor:doc_indexer_lib',
'//lib/prolog:compiler_lib',
] + scan_plugins(),
)