Merge "In ProjectAccessScreen add link to history of project.config in gitweb"
diff --git a/Documentation/cmd-query.txt b/Documentation/cmd-query.txt
index b20ac92..bc3950b 100644
--- a/Documentation/cmd-query.txt
+++ b/Documentation/cmd-query.txt
@@ -12,6 +12,7 @@
[--format {TEXT | JSON}]
[--current-patch-set]
[--patch-sets | --all-approvals]
+ [--files]
[--comments]
[--]
<query>
@@ -59,6 +60,10 @@
the --current-patch-set flag then the current patch set
information will be output twice, once in each field.
+--files::
+ Support for listing files with patch sets and their
+ attributes (ADDED, MODIFIED, DELETED, RENAMED, COPIED).
+
--comments::
Include comments for all changes. If combined with the
--patch-sets flag then all in-line comments are included for
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 b439e6c..bfdc69f 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
@@ -277,7 +277,6 @@
private static String legacyChange(final String token) {
final String s = skip(token);
- final String q = "patchset=";
final String t[] = s.split(",", 2);
if (t.length > 1 && matchPrefix("patchset=", t[1])) {
return PageLinks.toChange(PatchSet.Id.parse(t[0] + "," + skip(t[1])));
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupTable.java
index 76495e7..7585f8a 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupTable.java
@@ -16,7 +16,6 @@
import com.google.gerrit.client.Dispatcher;
import com.google.gerrit.client.Gerrit;
-import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.client.ui.Hyperlink;
import com.google.gerrit.client.ui.NavigationTable;
import com.google.gerrit.common.data.GroupDetail;
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/CacheBasedWebSession.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/CacheBasedWebSession.java
index d27d684..d9203f5 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/CacheBasedWebSession.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/CacheBasedWebSession.java
@@ -195,7 +195,7 @@
String path = authConfig.getCookiePath();
if (path == null || path.isEmpty()) {
path = request.getContextPath();
- if (path.isEmpty()) {
+ if (path == null || path.isEmpty()) {
path = "/";
}
}
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ContainerAuthFilter.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ContainerAuthFilter.java
index 11c94a7..e170f54 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ContainerAuthFilter.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ContainerAuthFilter.java
@@ -19,7 +19,6 @@
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.account.AccountState;
-import com.google.gerrit.server.config.AuthConfig;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gwtjsonrpc.server.XsrfException;
import com.google.inject.Inject;
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebSessionManager.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebSessionManager.java
index 4ae5c30..4a3e113 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebSessionManager.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebSessionManager.java
@@ -99,7 +99,6 @@
// If we don't yet have a token for this session, establish one.
//
final int nonceLen = 20;
- final ByteArrayOutputStream buf;
final byte[] rnd = new byte[nonceLen];
prng.nextBytes(rnd);
xsrfToken = CookieBase64.encode(rnd);
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java
index f69a0d6..ec5ec1c 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java
@@ -33,7 +33,6 @@
import com.google.gerrit.reviewdb.ContactInformation;
import com.google.gerrit.reviewdb.ContributorAgreement;
import com.google.gerrit.reviewdb.ReviewDb;
-import com.google.gerrit.reviewdb.Project;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.account.AccountByEmailCache;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/rules/PrologEnvironment.java b/gerrit-server/src/main/java/com/google/gerrit/rules/PrologEnvironment.java
index 5d86954..310b401 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/rules/PrologEnvironment.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/rules/PrologEnvironment.java
@@ -82,6 +82,7 @@
* @param sv unique key.
* @return the value; null if not stored.
*/
+ @SuppressWarnings("unchecked")
public <T> T get(StoredValue<T> sv) {
return (T) storedValues.get(sv);
}
@@ -93,6 +94,7 @@
* @param sv unique key.
* @param obj the value to store under {@code sv}.
*/
+ @SuppressWarnings("unchecked")
public <T> void set(StoredValue<T> sv, T obj) {
storedValues.put((StoredValue<Object>) sv, obj);
}
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 89f5ab2..93665f4 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
@@ -403,11 +403,11 @@
hooks.doChangeRestoreHook(updatedChange, user.getAccount(), message);
}
- private static void updatedChange(final ReviewDb db, final IdentifiedUser user,
- final Change change, final ChangeMessage cmsg,
- ReplyToChangeSender.Factory senderFactory, final String err)
- throws NoSuchChangeException, InvalidChangeOperationException,
- EmailException, OrmException {
+ private static <T extends ReplyToChangeSender> void updatedChange(
+ final ReviewDb db, final IdentifiedUser user, final Change change,
+ final ChangeMessage cmsg, ReplyToChangeSender.Factory<T> senderFactory,
+ final String err) throws NoSuchChangeException,
+ InvalidChangeOperationException, EmailException, OrmException {
if (change == null) {
throw new InvalidChangeOperationException(err);
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java
index 6b60ee1..5810533 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java
@@ -26,6 +26,9 @@
import com.google.gerrit.reviewdb.TrackingId;
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.config.CanonicalWebUrl;
+import com.google.gerrit.server.patch.PatchList;
+import com.google.gerrit.server.patch.PatchListCache;
+import com.google.gerrit.server.patch.PatchListEntry;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@@ -43,14 +46,17 @@
private final AccountCache accountCache;
private final Provider<String> urlProvider;
private final ApprovalTypes approvalTypes;
+ private final PatchListCache patchListCache;
@Inject
EventFactory(AccountCache accountCache,
@CanonicalWebUrl @Nullable Provider<String> urlProvider,
- ApprovalTypes approvalTypes) {
+ ApprovalTypes approvalTypes,
+ PatchListCache patchListCache) {
this.accountCache = accountCache;
this.urlProvider = urlProvider;
this.approvalTypes = approvalTypes;
+ this.patchListCache = patchListCache;
}
/**
@@ -114,11 +120,18 @@
}
public void addPatchSets(ChangeAttribute a, Collection<PatchSet> ps) {
- addPatchSets(a, ps, null);
+ addPatchSets(a, ps, null, false, null);
}
public void addPatchSets(ChangeAttribute ca, Collection<PatchSet> ps,
Map<PatchSet.Id,Collection<PatchSetApproval>> approvals) {
+ addPatchSets(ca, ps, approvals, false, null);
+ }
+
+ public void addPatchSets(ChangeAttribute ca, Collection<PatchSet> ps,
+ Map<PatchSet.Id,Collection<PatchSetApproval>> approvals,
+ boolean includeFiles, Change change) {
+
if (!ps.isEmpty()) {
ca.patchSets = new ArrayList<PatchSetAttribute>(ps.size());
for (PatchSet p : ps) {
@@ -127,6 +140,9 @@
addApprovals(psa, p.getId(), approvals);
}
ca.patchSets.add(psa);
+ if (includeFiles && change != null) {
+ addPatchSetFileNames(psa, change, p);
+ }
}
}
}
@@ -145,6 +161,21 @@
}
}
+ public void addPatchSetFileNames(PatchSetAttribute patchSetAttribute,
+ Change change, PatchSet patchSet) {
+ PatchList patchList = patchListCache.get(change, patchSet);
+ for (PatchListEntry patch : patchList.getPatches()) {
+ if (patchSetAttribute.files == null) {
+ patchSetAttribute.files = new ArrayList<PatchAttribute>();
+ }
+
+ PatchAttribute p = new PatchAttribute();
+ p.file = patch.getNewName();
+ p.type = patch.getChangeType();
+ patchSetAttribute.files.add(p);
+ }
+ }
+
public void addComments(ChangeAttribute ca,
Collection<ChangeMessage> messages) {
if (!messages.isEmpty()) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java
new file mode 100644
index 0000000..2b08fa7
--- /dev/null
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java
@@ -0,0 +1,22 @@
+// Copyright (C) 2011 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.server.events;
+
+import com.google.gerrit.reviewdb.Patch.ChangeType;
+
+public class PatchAttribute {
+ public String file;
+ public ChangeType type;
+}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java
index ee29314..dca4438 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java
@@ -25,4 +25,5 @@
public List<ApprovalAttribute> approvals;
public List<PatchSetCommentAttribute> comments;
+ public List<PatchAttribute> files;
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java
index 6d44511..c7e2055 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java
@@ -36,7 +36,6 @@
import com.googlecode.prolog_cafe.lang.Prolog;
import com.googlecode.prolog_cafe.lang.PrologException;
import com.googlecode.prolog_cafe.lang.StructureTerm;
-import com.googlecode.prolog_cafe.lang.SymbolTerm;
import com.googlecode.prolog_cafe.lang.Term;
import com.googlecode.prolog_cafe.lang.VariableTerm;
@@ -46,7 +45,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
-import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@@ -315,7 +313,9 @@
filterRule,
resultsTerm,
new VariableTerm());
- results.addAll(((ListTerm) template[2]).toJava());
+ @SuppressWarnings("unchecked")
+ final List<? extends Term> termList = ((ListTerm) template[2]).toJava();
+ results.addAll(termList);
} catch (PrologException err) {
return logRuleError("Exception calling " + filterRule + " on change "
+ change.getId() + " of " + parentState.getProject().getName(), err);
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 ee42833..5a3f0bd 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
@@ -19,7 +19,6 @@
import com.google.gerrit.common.data.Capable;
import com.google.gerrit.common.data.Permission;
import com.google.gerrit.common.data.PermissionRule;
-import com.google.gerrit.common.data.PermissionRule.Action;
import com.google.gerrit.reviewdb.AbstractAgreement;
import com.google.gerrit.reviewdb.AccountAgreement;
import com.google.gerrit.reviewdb.AccountGroup;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java
index 2abec9a..2143b81 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java
@@ -73,6 +73,7 @@
private boolean includeCurrentPatchSet;
private boolean includeApprovals;
private boolean includeComments;
+ private boolean includeFiles;
private OutputStream outputStream = DisabledOutputStream.INSTANCE;
private PrintWriter out;
@@ -106,6 +107,10 @@
includeComments = on;
}
+ public void setIncludeFiles(boolean on) {
+ includeFiles = on;
+ }
+
public void setOutput(OutputStream out, OutputFormat fmt) {
this.outputStream = out;
this.outputFormat = fmt;
@@ -173,8 +178,14 @@
eventFactory.addTrackingIds(c, d.trackingIds(db));
if (includePatchSets) {
- eventFactory.addPatchSets(c, d.patches(db),
- includeApprovals ? d.approvalsMap(db) : null);
+ if (includeFiles) {
+ eventFactory.addPatchSets(c, d.patches(db),
+ includeApprovals ? d.approvalsMap(db) : null,
+ includeFiles, d.change(db));
+ } else {
+ eventFactory.addPatchSets(c, d.patches(db),
+ includeApprovals ? d.approvalsMap(db) : null);
+ }
}
if (includeCurrentPatchSet) {
@@ -183,6 +194,11 @@
c.currentPatchSet = eventFactory.asPatchSetAttribute(current);
eventFactory.addApprovals(c.currentPatchSet, //
d.approvalsFor(db, current.getId()));
+
+ if (includeFiles) {
+ eventFactory.addPatchSetFileNames(c.currentPatchSet,
+ d.change(db), d.currentPatchSet(db));
+ }
}
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_53.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_53.java
index 152f25a..89ee5cf 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_53.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_53.java
@@ -30,7 +30,6 @@
import com.google.gerrit.common.data.GroupReference;
import com.google.gerrit.common.data.Permission;
import com.google.gerrit.common.data.PermissionRule;
-import com.google.gerrit.common.data.PermissionRule.Action;
import com.google.gerrit.reviewdb.AccountGroup;
import com.google.gerrit.reviewdb.ApprovalCategory;
import com.google.gerrit.reviewdb.Project;
diff --git a/gerrit-server/src/main/java/gerrit/AbstractCommitUserIdentityPredicate.java b/gerrit-server/src/main/java/gerrit/AbstractCommitUserIdentityPredicate.java
index 94d5b07..27bc286 100644
--- a/gerrit-server/src/main/java/gerrit/AbstractCommitUserIdentityPredicate.java
+++ b/gerrit-server/src/main/java/gerrit/AbstractCommitUserIdentityPredicate.java
@@ -15,13 +15,7 @@
package gerrit;
import com.google.gerrit.reviewdb.Account;
-import com.google.gerrit.reviewdb.PatchSet;
-import com.google.gerrit.reviewdb.PatchSetInfo;
import com.google.gerrit.reviewdb.UserIdentity;
-import com.google.gerrit.rules.PrologEnvironment;
-import com.google.gerrit.rules.StoredValues;
-import com.google.gerrit.server.patch.PatchSetInfoFactory;
-import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException;
import com.googlecode.prolog_cafe.lang.IntegerTerm;
import com.googlecode.prolog_cafe.lang.Operation;
diff --git a/gerrit-server/src/main/java/gerrit/PRED_commit_delta_4.java b/gerrit-server/src/main/java/gerrit/PRED_commit_delta_4.java
index 4a9c71b..77bd81e 100644
--- a/gerrit-server/src/main/java/gerrit/PRED_commit_delta_4.java
+++ b/gerrit-server/src/main/java/gerrit/PRED_commit_delta_4.java
@@ -15,7 +15,6 @@
package gerrit;
import com.google.gerrit.reviewdb.Patch;
-import com.google.gerrit.reviewdb.PatchSetInfo;
import com.google.gerrit.rules.StoredValues;
import com.google.gerrit.server.patch.PatchList;
import com.google.gerrit.server.patch.PatchListEntry;
@@ -80,7 +79,6 @@
engine.areg3 = arg3;
engine.areg4 = arg4;
- PatchSetInfo psInfo = StoredValues.PATCH_SET_INFO.get(engine);
PatchList pl = StoredValues.PATCH_LIST.get(engine);
Iterator<PatchListEntry> iter = pl.getPatches().iterator();
@@ -99,6 +97,7 @@
Term a5 = engine.areg5;
Pattern regex = (Pattern)((JavaObjectTerm)a1).object();
+ @SuppressWarnings("unchecked")
Iterator<PatchListEntry> iter =
(Iterator<PatchListEntry>)((JavaObjectTerm)a5).object();
while (iter.hasNext()) {
@@ -148,6 +147,7 @@
public Operation exec(Prolog engine) {
Term a5 = engine.areg5;
+ @SuppressWarnings("unchecked")
Iterator<PatchListEntry> iter =
(Iterator<PatchListEntry>)((JavaObjectTerm)a5).object();
if (!iter.hasNext()) {
diff --git a/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java b/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java
index f9e3036..f0accf0 100644
--- a/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java
+++ b/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java
@@ -14,8 +14,6 @@
package gerrit;
-import com.google.gerrit.reviewdb.PatchSetInfo;
-import com.google.gerrit.rules.PrologEnvironment;
import com.google.gerrit.rules.StoredValues;
import com.google.gerrit.server.patch.PatchList;
import com.google.gerrit.server.patch.PatchListEntry;
@@ -28,7 +26,6 @@
import com.googlecode.prolog_cafe.lang.Predicate;
import com.googlecode.prolog_cafe.lang.Prolog;
import com.googlecode.prolog_cafe.lang.PrologException;
-import com.googlecode.prolog_cafe.lang.SystemException;
import com.googlecode.prolog_cafe.lang.Term;
import org.eclipse.jgit.diff.Edit;
@@ -75,8 +72,6 @@
Pattern fileRegex = getRegexParameter(a1);
Pattern editRegex = getRegexParameter(a2);
- PrologEnvironment env = (PrologEnvironment) engine.control;
- PatchSetInfo psInfo = StoredValues.PATCH_SET_INFO.get(engine);
PatchList pl = StoredValues.PATCH_LIST.get(engine);
Repository repo = StoredValues.REPOSITORY.get(engine);
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 b6f5d26..ff8d6bd 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
@@ -56,6 +56,11 @@
processor.setIncludeComments(on);
}
+ @Option(name = "--files", usage = "Include file list on patch sets")
+ void setFiles(boolean on) {
+ processor.setIncludeFiles(on);
+ }
+
@Argument(index = 0, required = true, multiValued = true, metaVar = "QUERY", usage = "Query to execute")
private List<String> query;