Merge changes I332152c3,I7d36578e,Ib6fb9bdd
* changes:
ChangeScreen2: Do not display 'M' next to modified files
ChangeScreen2: Clean up FileTable status column CSS
ChangeScreen2: Remove unnecessary in FileTable
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/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-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/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..749bae3 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;
@@ -110,6 +111,7 @@
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.notes.NoteMap;
import org.eclipse.jgit.revwalk.FooterKey;
@@ -123,6 +125,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 +398,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 +1986,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..01b684f 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;
@@ -44,6 +46,7 @@
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.ProgressMonitor;
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.RevObject;
@@ -203,7 +206,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/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..8e5504c 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;
@@ -493,7 +495,8 @@
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/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);
}