Merge "Predicates to check commit messages and edits"
diff --git a/Documentation/cmd-index.txt b/Documentation/cmd-index.txt
index 11e0296..dc4e72e 100644
--- a/Documentation/cmd-index.txt
+++ b/Documentation/cmd-index.txt
@@ -57,7 +57,7 @@
 link:cmd-ls-projects.html[gerrit ls-projects]::
 	List projects visible to the caller.
 
-link:cmd-modify-reviewers.html[gerrit modify-reviewers]::
+link:cmd-set-reviewers.html[gerrit set-reviewers]::
         Add or remove reviewers on a change.
 
 link:cmd-query.html[gerrit query]::
diff --git a/Documentation/cmd-query.txt b/Documentation/cmd-query.txt
index bdbe3e4..b20ac92 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]
+  [--comments]
   [--]
   <query>
   [limit:<n>]
@@ -58,6 +59,11 @@
 	the --current-patch-set flag then the current patch set
 	information will be output twice, once in each field.
 
+--comments::
+	Include comments for all changes. If combined with the
+	--patch-sets flag then all in-line comments are included for
+	each patch set.
+
 limit:<n>::
 	Maximum number of results to return.  This is actually a
 	query operator, and not a command line option.	If more
diff --git a/Documentation/cmd-modify-reviewers.txt b/Documentation/cmd-set-reviewers.txt
similarity index 83%
rename from Documentation/cmd-modify-reviewers.txt
rename to Documentation/cmd-set-reviewers.txt
index 6885627..9e08e39 100644
--- a/Documentation/cmd-modify-reviewers.txt
+++ b/Documentation/cmd-set-reviewers.txt
@@ -1,14 +1,14 @@
-gerrit modify-reviewers
-=======================
+gerrit set-reviewers
+====================
 
 NAME
 ----
-gerrit modify-reviewers - Add or remove reviewers to a change
+gerrit set-reviewers - Add or remove reviewers to a change
 
 SYNOPSIS
 --------
 [verse]
-'ssh' -p <port> <host> 'gerrit modify-reviewers'
+'ssh' -p <port> <host> 'gerrit set-reviewers'
   [--project <PROJECT>]
   [--add REVIEWER ...]
   [--remove REVIEWER ...]
@@ -63,7 +63,7 @@
 
 Add reviewers alice and bob, but remove eve from change Iac6b2ac2.
 =====
-	$ ssh -p 29418 review.example.com gerrit modify-reviewers \
+	$ ssh -p 29418 review.example.com gerrit set-reviewers \
 	  -a alice@example.com -a bob@example.com \
 	  -r eve@example.com \
 	  Iac6b2ac2
@@ -71,7 +71,7 @@
 
 Add reviewer elvis to old-style change id 1935 specifying that the change is in project "graceland"
 =====
-	$ ssh -p 29418 review.example.com gerrit modify-reviewers \
+	$ ssh -p 29418 review.example.com gerrit set-reviewers \
 	  --project graceland \
 	  -a elvis@example.com \
 	  1935
@@ -79,7 +79,7 @@
 
 Add all project owners as reviewers to change Iac6b2ac2.
 =====
-	$ ssh -p 29418 review.example.com gerrit modify-reviewers \
+	$ ssh -p 29418 review.example.com gerrit set-reviewers \
 	  -a "'Project Owners'" \
 	  Iac6b2ac2
 =====
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index da00c6e..b8ba2c2 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -39,7 +39,7 @@
 +
 This setting only applies for adding reviewers in the Gerrit WebUI,
 but is ignored when adding reviewers with the
-link:cmd-modify-reviewers.html[modify-reviewers] command.
+link:cmd-set-reviewers.html[set-reviewers] command.
 
 [[addreviewer.maxAllowed]]addreviewer.maxAllowed::
 +
diff --git a/Documentation/config-replication.txt b/Documentation/config-replication.txt
index d8390e6..3768b6d 100644
--- a/Documentation/config-replication.txt
+++ b/Documentation/config-replication.txt
@@ -201,6 +201,14 @@
 +
 By default, true, replicating everything.
 
+[[remote.name.mirror]]remote.<name>.mirror::
++
+If true, replication will remove remote branches that absent locally
+or invisible to the replication (i.e. read access denied via 'authGroup'
+option).
++
+By default, false, do not remove remote branches.
+
 
 [[secure_config]]File `secure.config`
 -----------------------------------------------
diff --git a/gerrit-antlr/.settings/org.eclipse.core.resources.prefs b/gerrit-antlr/.settings/org.eclipse.core.resources.prefs
index 82eb859..589908f 100644
--- a/gerrit-antlr/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-antlr/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-common/.settings/org.eclipse.core.resources.prefs b/gerrit-common/.settings/org.eclipse.core.resources.prefs
index 82eb859..fc11c3f 100644
--- a/gerrit-common/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-common/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,5 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-common/.settings/org.eclipse.jdt.core.prefs b/gerrit-common/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..470942d 100644
--- a/gerrit-common/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-common/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/GitwebLink.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/GitwebLink.java
index 937bbd4..0460bf2 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/GitwebLink.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/GitwebLink.java
@@ -37,7 +37,7 @@
   }
 
   public String toRevision(final Project.NameKey project, final PatchSet ps) {
-    ParamertizedString pattern = new ParamertizedString(type.getRevision());
+    ParameterizedString pattern = new ParameterizedString(type.getRevision());
 
     final Map<String, String> p = new HashMap<String, String>();
     p.put("project", URL.encodeQueryString(project.get()));
@@ -46,7 +46,7 @@
   }
 
   public String toProject(final Project.NameKey project) {
-    ParamertizedString pattern = new ParamertizedString(type.getProject());
+    ParameterizedString pattern = new ParameterizedString(type.getProject());
 
     final Map<String, String> p = new HashMap<String, String>();
     p.put("project", URL.encodeQueryString(project.get()));
@@ -54,7 +54,7 @@
   }
 
   public String toBranch(final Branch.NameKey branch) {
-    ParamertizedString pattern = new ParamertizedString(type.getBranch());
+    ParameterizedString pattern = new ParameterizedString(type.getBranch());
 
     final Map<String, String> p = new HashMap<String, String>();
     p.put("project", URL.encodeQueryString(branch.getParentKey().get()));
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/ParamertizedString.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/ParameterizedString.java
similarity index 94%
rename from gerrit-common/src/main/java/com/google/gerrit/common/data/ParamertizedString.java
rename to gerrit-common/src/main/java/com/google/gerrit/common/data/ParameterizedString.java
index ae696b5..f9b0dad 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/ParamertizedString.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/ParameterizedString.java
@@ -21,10 +21,10 @@
 import java.util.Map;
 
 /** Performs replacements on strings such as <code>Hello ${user}</code>. */
-public class ParamertizedString {
+public class ParameterizedString {
   /** Obtain a string which has no parameters and always produces the value. */
-  public static ParamertizedString asis(final String constant) {
-    return new ParamertizedString(new Constant(constant));
+  public static ParameterizedString asis(final String constant) {
+    return new ParameterizedString(new Constant(constant));
   }
 
   private final String pattern;
@@ -32,18 +32,18 @@
   private final List<Format> patternOps;
   private final List<Parameter> parameters;
 
-  protected ParamertizedString() {
+  protected ParameterizedString() {
     this(new Constant(""));
   }
 
-  private ParamertizedString(final Constant c) {
+  private ParameterizedString(final Constant c) {
     pattern = c.text;
     rawPattern = c.text;
     patternOps = Collections.<Format> singletonList(c);
     parameters = Collections.emptyList();
   }
 
-  public ParamertizedString(final String pattern) {
+  public ParameterizedString(final String pattern) {
     final StringBuilder raw = new StringBuilder();
     final List<Parameter> prs = new ArrayList<Parameter>(4);
     final List<Format> ops = new ArrayList<Format>(4);
@@ -152,7 +152,7 @@
 
     @Override
     public String toString() {
-      return ParamertizedString.this.replace(params);
+      return ParameterizedString.this.replace(params);
     }
   }
 
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/SystemInfoService.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/SystemInfoService.java
index 3c16018..b008ee7 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/SystemInfoService.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/SystemInfoService.java
@@ -34,4 +34,6 @@
   void contributorAgreements(AsyncCallback<List<ContributorAgreement>> callback);
 
   void clientError(String message, AsyncCallback<VoidResult> callback);
+
+  public void gerritConfig(final AsyncCallback<GerritConfig> callback);
 }
diff --git a/gerrit-common/src/test/java/com/google/gerrit/common/data/ParamertizedStringTest.java b/gerrit-common/src/test/java/com/google/gerrit/common/data/ParameterizedStringTest.java
similarity index 86%
rename from gerrit-common/src/test/java/com/google/gerrit/common/data/ParamertizedStringTest.java
rename to gerrit-common/src/test/java/com/google/gerrit/common/data/ParameterizedStringTest.java
index af8301f..4fe3365 100644
--- a/gerrit-common/src/test/java/com/google/gerrit/common/data/ParamertizedStringTest.java
+++ b/gerrit-common/src/test/java/com/google/gerrit/common/data/ParameterizedStringTest.java
@@ -19,9 +19,9 @@
 import java.util.HashMap;
 import java.util.Map;
 
-public class ParamertizedStringTest extends TestCase {
+public class ParameterizedStringTest extends TestCase {
   public void testEmptyString() {
-    final ParamertizedString p = new ParamertizedString("");
+    final ParameterizedString p = new ParameterizedString("");
     assertEquals("", p.getPattern());
     assertEquals("", p.getRawPattern());
     assertTrue(p.getParameterNames().isEmpty());
@@ -33,7 +33,7 @@
   }
 
   public void testAsis1() {
-    final ParamertizedString p = ParamertizedString.asis("${bar}c");
+    final ParameterizedString p = ParameterizedString.asis("${bar}c");
     assertEquals("${bar}c", p.getPattern());
     assertEquals("${bar}c", p.getRawPattern());
     assertTrue(p.getParameterNames().isEmpty());
@@ -46,7 +46,7 @@
   }
 
   public void testReplace1() {
-    final ParamertizedString p = new ParamertizedString("${bar}c");
+    final ParameterizedString p = new ParameterizedString("${bar}c");
     assertEquals("${bar}c", p.getPattern());
     assertEquals("{0}c", p.getRawPattern());
     assertEquals(1, p.getParameterNames().size());
@@ -61,7 +61,7 @@
   }
 
   public void testReplace2() {
-    final ParamertizedString p = new ParamertizedString("a${bar}c");
+    final ParameterizedString p = new ParameterizedString("a${bar}c");
     assertEquals("a${bar}c", p.getPattern());
     assertEquals("a{0}c", p.getRawPattern());
     assertEquals(1, p.getParameterNames().size());
@@ -76,7 +76,7 @@
   }
 
   public void testReplace3() {
-    final ParamertizedString p = new ParamertizedString("a${bar}");
+    final ParameterizedString p = new ParameterizedString("a${bar}");
     assertEquals("a${bar}", p.getPattern());
     assertEquals("a{0}", p.getRawPattern());
     assertEquals(1, p.getParameterNames().size());
@@ -91,7 +91,7 @@
   }
 
   public void testReplace4() {
-    final ParamertizedString p = new ParamertizedString("a${bar}c");
+    final ParameterizedString p = new ParameterizedString("a${bar}c");
     assertEquals("a${bar}c", p.getPattern());
     assertEquals("a{0}c", p.getRawPattern());
     assertEquals(1, p.getParameterNames().size());
@@ -105,7 +105,7 @@
   }
 
   public void testReplaceToLowerCase() {
-    final ParamertizedString p = new ParamertizedString("${a.toLowerCase}");
+    final ParameterizedString p = new ParameterizedString("${a.toLowerCase}");
     assertEquals(1, p.getParameterNames().size());
     assertTrue(p.getParameterNames().contains("a"));
 
@@ -125,7 +125,7 @@
   }
 
   public void testReplaceToUpperCase() {
-    final ParamertizedString p = new ParamertizedString("${a.toUpperCase}");
+    final ParameterizedString p = new ParameterizedString("${a.toUpperCase}");
     assertEquals(1, p.getParameterNames().size());
     assertTrue(p.getParameterNames().contains("a"));
 
@@ -145,7 +145,7 @@
   }
 
   public void testReplaceLocalName() {
-    final ParamertizedString p = new ParamertizedString("${a.localPart}");
+    final ParameterizedString p = new ParameterizedString("${a.localPart}");
     assertEquals(1, p.getParameterNames().size());
     assertTrue(p.getParameterNames().contains("a"));
 
@@ -165,7 +165,7 @@
   }
 
   public void testUndefinedFunctionName() {
-    ParamertizedString p = new ParamertizedString("${a.anUndefinedMethod}");
+    ParameterizedString p = new ParameterizedString("${a.anUndefinedMethod}");
     assertEquals(1, p.getParameterNames().size());
     assertTrue(p.getParameterNames().contains("a.anUndefinedMethod"));
   }
diff --git a/gerrit-gwtdebug/.settings/org.eclipse.core.resources.prefs b/gerrit-gwtdebug/.settings/org.eclipse.core.resources.prefs
index 82eb859..36e1448 100644
--- a/gerrit-gwtdebug/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-gwtdebug/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:38 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-gwtdebug/.settings/org.eclipse.jdt.core.prefs b/gerrit-gwtdebug/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..d2b5901 100644
--- a/gerrit-gwtdebug/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-gwtdebug/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:38 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-gwtui/.settings/org.eclipse.core.resources.prefs b/gerrit-gwtui/.settings/org.eclipse.core.resources.prefs
index 82eb859..c780f44 100644
--- a/gerrit-gwtui/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-gwtui/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-gwtui/.settings/org.eclipse.jdt.core.prefs b/gerrit-gwtui/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..470942d 100644
--- a/gerrit-gwtui/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-gwtui/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-httpd/.settings/org.eclipse.core.resources.prefs b/gerrit-httpd/.settings/org.eclipse.core.resources.prefs
index 82eb859..9df523e 100644
--- a/gerrit-httpd/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-httpd/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,6 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-httpd/.settings/org.eclipse.jdt.core.prefs b/gerrit-httpd/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..470942d 100644
--- a/gerrit-httpd/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-httpd/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/SystemInfoServiceImpl.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/SystemInfoServiceImpl.java
index b29f0a9..393c44b 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/SystemInfoServiceImpl.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/SystemInfoServiceImpl.java
@@ -14,6 +14,7 @@
 
 package com.google.gerrit.httpd.rpc;
 
+import com.google.gerrit.common.data.GerritConfig;
 import com.google.gerrit.common.data.SshHostKey;
 import com.google.gerrit.common.data.SystemInfoService;
 import com.google.gerrit.reviewdb.ContributorAgreement;
@@ -46,13 +47,15 @@
   private final SchemaFactory<ReviewDb> schema;
   private final List<HostKey> hostKeys;
   private final Provider<HttpServletRequest> httpRequest;
+  private final Provider<GerritConfig> config;
 
   @Inject
   SystemInfoServiceImpl(final SchemaFactory<ReviewDb> sf, final SshInfo daemon,
-      final Provider<HttpServletRequest> hsr) {
+      final Provider<HttpServletRequest> hsr, Provider<GerritConfig> cfg) {
     schema = sf;
     hostKeys = daemon.getHostKeys();
     httpRequest = hsr;
+    config = cfg;
   }
 
   public void contributorAgreements(
@@ -91,4 +94,9 @@
     log.error("Client UI JavaScript error: User-Agent=" + ua + ": " + message);
     callback.onSuccess(VoidResult.INSTANCE);
   }
+
+  @Override
+  public void gerritConfig(final AsyncCallback<GerritConfig> callback) {
+    callback.onSuccess(config.get());
+  }
 }
diff --git a/gerrit-launcher/.settings/org.eclipse.core.resources.prefs b/gerrit-launcher/.settings/org.eclipse.core.resources.prefs
index 82eb859..c780f44 100644
--- a/gerrit-launcher/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-launcher/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-launcher/.settings/org.eclipse.jdt.core.prefs b/gerrit-launcher/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..470942d 100644
--- a/gerrit-launcher/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-launcher/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-main/.settings/org.eclipse.core.resources.prefs b/gerrit-main/.settings/org.eclipse.core.resources.prefs
index 82eb859..c780f44 100644
--- a/gerrit-main/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-main/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-main/.settings/org.eclipse.jdt.core.prefs b/gerrit-main/.settings/org.eclipse.jdt.core.prefs
index 4b4b392..a7bc058 100644
--- a/gerrit-main/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-main/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Mon Jan 04 14:26:32 PST 2010
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.2
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-patch-commonsnet/.settings/org.eclipse.core.resources.prefs b/gerrit-patch-commonsnet/.settings/org.eclipse.core.resources.prefs
index 82eb859..589908f 100644
--- a/gerrit-patch-commonsnet/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-patch-commonsnet/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-patch-commonsnet/.settings/org.eclipse.jdt.core.prefs b/gerrit-patch-commonsnet/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..5f73a7f 100644
--- a/gerrit-patch-commonsnet/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-patch-commonsnet/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-patch-jgit/.settings/org.eclipse.core.resources.prefs b/gerrit-patch-jgit/.settings/org.eclipse.core.resources.prefs
index 82eb859..589908f 100644
--- a/gerrit-patch-jgit/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-patch-jgit/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-patch-jgit/.settings/org.eclipse.jdt.core.prefs b/gerrit-patch-jgit/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..5f73a7f 100644
--- a/gerrit-patch-jgit/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-patch-jgit/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-pgm/.settings/org.eclipse.core.resources.prefs b/gerrit-pgm/.settings/org.eclipse.core.resources.prefs
index 82eb859..9df523e 100644
--- a/gerrit-pgm/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-pgm/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,6 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-pgm/.settings/org.eclipse.jdt.core.prefs b/gerrit-pgm/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..470942d 100644
--- a/gerrit-pgm/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-pgm/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-prettify/.settings/org.eclipse.core.resources.prefs b/gerrit-prettify/.settings/org.eclipse.core.resources.prefs
index 82eb859..e7d6680 100644
--- a/gerrit-prettify/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-prettify/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,5 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-prettify/.settings/org.eclipse.jdt.core.prefs b/gerrit-prettify/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..5f73a7f 100644
--- a/gerrit-prettify/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-prettify/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-reviewdb/.settings/org.eclipse.core.resources.prefs b/gerrit-reviewdb/.settings/org.eclipse.core.resources.prefs
index 82eb859..e7d6680 100644
--- a/gerrit-reviewdb/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-reviewdb/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,5 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-reviewdb/.settings/org.eclipse.jdt.core.prefs b/gerrit-reviewdb/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..5f73a7f 100644
--- a/gerrit-reviewdb/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-reviewdb/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-server/.settings/org.eclipse.core.resources.prefs b/gerrit-server/.settings/org.eclipse.core.resources.prefs
index 82eb859..7d5f965 100644
--- a/gerrit-server/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-server/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,7 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java
index 4a24b32..e11e9bb 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java
@@ -14,7 +14,7 @@
 
 package com.google.gerrit.server.auth.ldap;
 
-import com.google.gerrit.common.data.ParamertizedString;
+import com.google.gerrit.common.data.ParameterizedString;
 import com.google.gerrit.reviewdb.AccountGroup;
 import com.google.gerrit.server.account.AccountException;
 import com.google.gerrit.server.account.GroupCache;
@@ -224,16 +224,16 @@
   class LdapSchema {
     final LdapType type;
 
-    final ParamertizedString accountFullName;
-    final ParamertizedString accountEmailAddress;
-    final ParamertizedString accountSshUserName;
+    final ParameterizedString accountFullName;
+    final ParameterizedString accountEmailAddress;
+    final ParameterizedString accountSshUserName;
     final String accountMemberField;
     final List<LdapQuery> accountQueryList;
 
     boolean groupNeedsAccount;
     final List<String> groupBases;
     final SearchScope groupScope;
-    final ParamertizedString groupPattern;
+    final ParameterizedString groupPattern;
     final List<LdapQuery> groupMemberQueryList;
 
     LdapSchema(final DirContext ctx) {
@@ -255,7 +255,7 @@
       for (String groupBase : groupBases) {
         if (groupMemberPattern != null) {
           final LdapQuery groupMemberQuery =
-              new LdapQuery(groupBase, groupScope, new ParamertizedString(
+              new LdapQuery(groupBase, groupScope, new ParameterizedString(
                   groupMemberPattern), Collections.<String> emptySet());
           if (groupMemberQuery.getParameters().isEmpty()) {
             throw new IllegalArgumentException(
@@ -303,7 +303,7 @@
 
       for (String accountBase : LdapRealm.requiredList(config, "accountBase")) {
         final LdapQuery accountQuery =
-            new LdapQuery(accountBase, accountScope, new ParamertizedString(
+            new LdapQuery(accountBase, accountScope, new ParameterizedString(
                 accountPattern), accountAtts);
         if (accountQuery.getParameters().isEmpty()) {
           throw new IllegalArgumentException(
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapQuery.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapQuery.java
index 7d1e37d..8a6dfeb 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapQuery.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapQuery.java
@@ -14,7 +14,7 @@
 
 package com.google.gerrit.server.auth.ldap;
 
-import com.google.gerrit.common.data.ParamertizedString;
+import com.google.gerrit.common.data.ParameterizedString;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -38,11 +38,11 @@
 
   private final String base;
   private final SearchScope searchScope;
-  private final ParamertizedString pattern;
+  private final ParameterizedString pattern;
   private final String[] returnAttributes;
 
   LdapQuery(final String base, final SearchScope searchScope,
-      final ParamertizedString pattern, final Set<String> returnAttributes) {
+      final ParameterizedString pattern, final Set<String> returnAttributes) {
     this.base = base;
     this.searchScope = searchScope;
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java
index e008e6c..e804ce6 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java
@@ -16,7 +16,7 @@
 
 import static com.google.gerrit.reviewdb.AccountExternalId.SCHEME_GERRIT;
 
-import com.google.gerrit.common.data.ParamertizedString;
+import com.google.gerrit.common.data.ParameterizedString;
 import com.google.gerrit.reviewdb.Account;
 import com.google.gerrit.reviewdb.AccountExternalId;
 import com.google.gerrit.reviewdb.AccountGroup;
@@ -148,14 +148,14 @@
     return v;
   }
 
-  static ParamertizedString paramString(Config c, String n, String d) {
+  static ParameterizedString paramString(Config c, String n, String d) {
     String expression = optdef(c, n, d);
     if (expression == null) {
       return null;
     } else if (expression.contains("${")) {
-      return new ParamertizedString(expression);
+      return new ParameterizedString(expression);
     } else {
-      return new ParamertizedString("${" + expression + "}");
+      return new ParameterizedString("${" + expression + "}");
     }
   }
 
@@ -164,7 +164,7 @@
     return !readOnlyAccountFields.contains(field);
   }
 
-  private static String apply(ParamertizedString p, LdapQuery.Result m)
+  private static String apply(ParameterizedString p, LdapQuery.Result m)
       throws NamingException {
     if (p == null) {
       return null;
@@ -273,8 +273,8 @@
       final DirContext ctx = helper.open();
       try {
         final LdapSchema schema = helper.getSchema(ctx);
-        final ParamertizedString filter =
-            ParamertizedString.asis(schema.groupPattern
+        final ParameterizedString filter =
+            ParameterizedString.asis(schema.groupPattern
                 .replace(GROUPNAME, name).toString());
         for (String groupBase : schema.groupBases) {
           final LdapQuery query =
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/ChangeAttribute.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/ChangeAttribute.java
index 79a7e5b..8138d20 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/ChangeAttribute.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/ChangeAttribute.java
@@ -32,6 +32,7 @@
     public String sortKey;
     public Boolean open;
     public Change.Status status;
+    public List<MessageAttribute> comments;
 
     public List<TrackingIdAttribute> trackingIds;
     public PatchSetAttribute currentPatchSet;
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 56ac0c1..2740d7f 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
@@ -19,6 +19,8 @@
 import com.google.gerrit.reviewdb.Account;
 import com.google.gerrit.reviewdb.Branch;
 import com.google.gerrit.reviewdb.Change;
+import com.google.gerrit.reviewdb.ChangeMessage;
+import com.google.gerrit.reviewdb.PatchLineComment;
 import com.google.gerrit.reviewdb.PatchSet;
 import com.google.gerrit.reviewdb.PatchSetApproval;
 import com.google.gerrit.reviewdb.TrackingId;
@@ -128,6 +130,30 @@
     }
   }
 
+  public void addPatchSetComments(PatchSetAttribute patchSetAttribute,
+      Collection<PatchLineComment> patchLineComments) {
+    for (PatchLineComment comment : patchLineComments) {
+      if (comment.getKey().getParentKey().getParentKey().get()
+          == Integer.parseInt(patchSetAttribute.number)) {
+        if (patchSetAttribute.comments == null) {
+          patchSetAttribute.comments =
+            new ArrayList<PatchSetCommentAttribute>();
+        }
+        patchSetAttribute.comments.add(asPatchSetLineAttribute(comment));
+      }
+    }
+  }
+
+  public void addComments(ChangeAttribute ca,
+      Collection<ChangeMessage> messages) {
+    if (!messages.isEmpty()) {
+      ca.comments = new ArrayList<MessageAttribute>();
+      for (ChangeMessage message : messages) {
+        ca.comments.add(asMessageAttribute(message));
+      }
+    }
+  }
+
   public TrackingIdAttribute asTrackingIdAttribute(TrackingId id) {
     TrackingIdAttribute a = new TrackingIdAttribute();
     a.system = id.getSystem();
@@ -148,6 +174,7 @@
     p.number = Integer.toString(patchSet.getPatchSetId());
     p.ref = patchSet.getRefName();
     p.uploader = asAccountAttribute(patchSet.getUploader());
+    p.createdOn = patchSet.getCreatedOn().getTime() / 1000L;
     return p;
   }
 
@@ -220,6 +247,23 @@
     return a;
   }
 
+  public MessageAttribute asMessageAttribute(ChangeMessage message) {
+    MessageAttribute a = new MessageAttribute();
+    a.timestamp = message.getWrittenOn().getTime() / 1000L;
+    a.reviewer = asAccountAttribute(message.getAuthor());
+    a.message = message.getMessage();
+    return a;
+  }
+
+  public PatchSetCommentAttribute asPatchSetLineAttribute(PatchLineComment c) {
+    PatchSetCommentAttribute a = new PatchSetCommentAttribute();
+    a.reviewer = asAccountAttribute(c.getAuthor());
+    a.file = c.getKey().getParentKey().get();
+    a.line = c.getLine();
+    a.message = c.getMessage();
+    return a;
+  }
+
   /** Get a link to the change; null if the server doesn't know its own address. */
   private String getChangeUrl(final Change change) {
     if (change != null && urlProvider.get() != null) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/MessageAttribute.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/MessageAttribute.java
new file mode 100644
index 0000000..71b38b5
--- /dev/null
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/MessageAttribute.java
@@ -0,0 +1,21 @@
+// 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;
+
+public class MessageAttribute {
+    public Long timestamp;
+    public AccountAttribute reviewer;
+    public String message;
+}
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 5de4d6f..ee29314 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
@@ -21,6 +21,8 @@
     public String revision;
     public String ref;
     public AccountAttribute uploader;
+    public Long createdOn;
 
     public List<ApprovalAttribute> approvals;
+    public List<PatchSetCommentAttribute> comments;
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetCommentAttribute.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetCommentAttribute.java
new file mode 100644
index 0000000..e0c8c13
--- /dev/null
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetCommentAttribute.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;
+
+public class PatchSetCommentAttribute {
+    public String file;
+    public Integer line;
+    public AccountAttribute reviewer;
+    public String message;
+}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/PushOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/PushOp.java
index 5e13ade..4bff8eb 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/PushOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/PushOp.java
@@ -65,7 +65,7 @@
   }
 
   private static final Logger log = PushReplication.log;
-  static final String MIRROR_ALL = "..all..";
+  static final String ALL_REFS = "..all..";
 
   private final GitRepositoryManager repoManager;
   private final SchemaFactory<ReviewDb> schema;
@@ -77,7 +77,7 @@
   private final Set<String> delta = new HashSet<String>();
   private final Project.NameKey projectName;
   private final URIish uri;
-  private boolean mirror;
+  private boolean pushAllRefs;
 
   private Repository db;
 
@@ -125,10 +125,10 @@
   }
 
   void addRef(final String ref) {
-    if (MIRROR_ALL.equals(ref)) {
+    if (ALL_REFS.equals(ref)) {
       delta.clear();
-      mirror = true;
-    } else if (!mirror) {
+      pushAllRefs = true;
+    } else if (!pushAllRefs) {
       delta.add(ref);
     }
   }
@@ -136,9 +136,9 @@
   public Set<String> getRefs() {
     final Set<String> refs;
 
-    if (mirror) {
+    if (pushAllRefs) {
       refs = new HashSet<String>(1);
-      refs.add(MIRROR_ALL);
+      refs.add(ALL_REFS);
     } else {
       refs = delta;
     }
@@ -147,7 +147,7 @@
   }
 
   public void addRefs(Set<String> refs) {
-    if (!mirror) {
+    if (!pushAllRefs) {
       for (String ref : refs) {
         addRef(ref);
       }
@@ -216,7 +216,7 @@
 
   @Override
   public String toString() {
-    return (mirror ? "mirror " : "push ") + uri;
+    return "push " + uri;
   }
 
   private void runImpl() throws IOException {
@@ -292,7 +292,7 @@
 
     Map<String, Ref> local = db.getAllRefs();
     if (!pc.allRefsAreVisible()) {
-      if (!mirror) {
+      if (!pushAllRefs) {
         // If we aren't mirroring, reduce the space we need to filter
         // to only the references we will update during this operation.
         //
@@ -322,7 +322,7 @@
 
     final boolean noPerms = !pool.isReplicatePermissions();
     final List<RemoteRefUpdate> cmds = new ArrayList<RemoteRefUpdate>();
-    if (mirror) {
+    if (pushAllRefs) {
       final Map<String, Ref> remote = listRemote(tn);
 
       for (final Ref src : local.values()) {
@@ -341,17 +341,19 @@
         }
       }
 
-      for (final Ref ref : remote.values()) {
-        if (noPerms && GitRepositoryManager.REF_CONFIG.equals(ref.getName())) {
-          continue;
-        }
+      if (config.isMirror()) {
+        for (final Ref ref : remote.values()) {
+          if (noPerms && GitRepositoryManager.REF_CONFIG.equals(ref.getName())) {
+            continue;
+          }
 
-        if (!Constants.HEAD.equals(ref.getName())) {
-          final RefSpec spec = matchDst(ref.getName());
-          if (spec != null && !local.containsKey(spec.getSource())) {
-            // No longer on local side, request removal.
-            //
-            delete(cmds, spec);
+          if (!Constants.HEAD.equals(ref.getName())) {
+            final RefSpec spec = matchDst(ref.getName());
+            if (spec != null && !local.containsKey(spec.getSource())) {
+              // No longer on local side, request removal.
+              //
+              delete(cmds, spec);
+            }
           }
         }
       }
@@ -369,7 +371,7 @@
           Ref srcRef = local.get(src);
           if (srcRef != null) {
             send(cmds, spec, srcRef);
-          } else {
+          } else if (config.isMirror()) {
             delete(cmds, spec);
           }
         }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/PushReplication.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/PushReplication.java
index d89ad7d..a3d327a 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/PushReplication.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/PushReplication.java
@@ -114,7 +114,7 @@
       final String urlMatch) {
     for (final ReplicationConfig cfg : configs) {
       for (final URIish uri : cfg.getURIs(project, urlMatch)) {
-        cfg.schedule(project, PushOp.MIRROR_ALL, uri);
+        cfg.schedule(project, PushOp.ALL_REFS, uri);
       }
     }
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/FromAddressGeneratorProvider.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/FromAddressGeneratorProvider.java
index afcfccd..05a419e 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/FromAddressGeneratorProvider.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/FromAddressGeneratorProvider.java
@@ -14,7 +14,7 @@
 
 package com.google.gerrit.server.mail;
 
-import com.google.gerrit.common.data.ParamertizedString;
+import com.google.gerrit.common.data.ParameterizedString;
 import com.google.gerrit.reviewdb.Account;
 import com.google.gerrit.server.GerritPersonIdent;
 import com.google.gerrit.server.account.AccountCache;
@@ -41,7 +41,7 @@
     final Address srvAddr = toAddress(myIdent);
 
     if (from == null || "MIXED".equalsIgnoreCase(from)) {
-      ParamertizedString name = new ParamertizedString("${user} (Code Review)");
+      ParameterizedString name = new ParameterizedString("${user} (Code Review)");
       generator = new PatternGen(srvAddr, accountCache, name, srvAddr.email);
 
     } else if ("USER".equalsIgnoreCase(from)) {
@@ -52,7 +52,7 @@
 
     } else {
       final Address a = Address.parse(from);
-      final ParamertizedString name = a.name != null ? new ParamertizedString(a.name) : null;
+      final ParameterizedString name = a.name != null ? new ParameterizedString(a.name) : null;
       if (name == null || name.getParameterNames().isEmpty()) {
         generator = new ServerGen(a);
       } else {
@@ -118,10 +118,10 @@
     private final String senderEmail;
     private final Address serverAddress;
     private final AccountCache accountCache;
-    private final ParamertizedString namePattern;
+    private final ParameterizedString namePattern;
 
     PatternGen(final Address serverAddress, final AccountCache accountCache,
-        final ParamertizedString namePattern, final String senderEmail) {
+        final ParameterizedString namePattern, final String senderEmail) {
       this.senderEmail = senderEmail;
       this.serverAddress = serverAddress;
       this.accountCache = accountCache;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PublishComments.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PublishComments.java
index 8efb4ae..1d43453 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PublishComments.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PublishComments.java
@@ -285,12 +285,14 @@
 
   private void email() {
     try {
-      final CommentSender cm = commentSenderFactory.create(change);
-      cm.setFrom(user.getAccountId());
-      cm.setPatchSet(patchSet, patchSetInfoFactory.get(patchSetId));
-      cm.setChangeMessage(message);
-      cm.setPatchLineComments(drafts);
-      cm.send();
+      if (message != null) {
+        final CommentSender cm = commentSenderFactory.create(change);
+        cm.setFrom(user.getAccountId());
+        cm.setPatchSet(patchSet, patchSetInfoFactory.get(patchSetId));
+        cm.setChangeMessage(message);
+        cm.setPatchLineComments(drafts);
+        cm.send();
+      }
     } catch (EmailException e) {
       log.error("Cannot send comments by email for patch set " + patchSetId, e);
     } catch (PatchSetInfoNotAvailableException e) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/SectionMatcher.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/SectionMatcher.java
index 9a93725..ce7530e 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/SectionMatcher.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/SectionMatcher.java
@@ -17,7 +17,7 @@
 import static com.google.gerrit.server.project.RefControl.isRE;
 
 import com.google.gerrit.common.data.AccessSection;
-import com.google.gerrit.common.data.ParamertizedString;
+import com.google.gerrit.common.data.ParameterizedString;
 
 import dk.brics.automaton.Automaton;
 
@@ -106,12 +106,12 @@
   }
 
   static class ExpandParameters extends SectionMatcher {
-    private final ParamertizedString template;
+    private final ParameterizedString template;
     private final String prefix;
 
     ExpandParameters(String pattern, AccessSection section) {
       super(section);
-      template = new ParamertizedString(pattern);
+      template = new ParameterizedString(pattern);
 
       if (isRE(pattern)) {
         // Replace ${username} with ":USERNAME:" as : is not legal
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
index b4965f0..16b43ad 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -15,6 +15,7 @@
 package com.google.gerrit.server.query.change;
 
 import com.google.gerrit.reviewdb.Change;
+import com.google.gerrit.reviewdb.ChangeMessage;
 import com.google.gerrit.reviewdb.Patch;
 import com.google.gerrit.reviewdb.PatchLineComment;
 import com.google.gerrit.reviewdb.PatchSet;
@@ -47,6 +48,7 @@
   private Collection<PatchLineComment> comments;
   private Collection<TrackingId> trackingIds;
   private CurrentUser visibleTo;
+  private List<ChangeMessage> messages;
 
   public ChangeData(final Change.Id id) {
     legacyId = id;
@@ -210,4 +212,12 @@
     }
     return trackingIds;
   }
+
+  public List<ChangeMessage> messages(Provider<ReviewDb> db)
+      throws OrmException {
+    if (messages == null) {
+      messages = db.get().changeMessages().byChange(legacyId).toList();
+    }
+    return messages;
+  }
 }
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 2d3184d..2abec9a 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
@@ -21,6 +21,7 @@
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.events.ChangeAttribute;
 import com.google.gerrit.server.events.EventFactory;
+import com.google.gerrit.server.events.PatchSetAttribute;
 import com.google.gerrit.server.events.QueryStats;
 import com.google.gerrit.server.query.Predicate;
 import com.google.gerrit.server.query.QueryParseException;
@@ -71,6 +72,7 @@
   private boolean includePatchSets;
   private boolean includeCurrentPatchSet;
   private boolean includeApprovals;
+  private boolean includeComments;
 
   private OutputStream outputStream = DisabledOutputStream.INSTANCE;
   private PrintWriter out;
@@ -100,6 +102,10 @@
     includeApprovals = on;
   }
 
+  public void setIncludeComments(boolean on) {
+    includeComments = on;
+  }
+
   public void setOutput(OutputStream out, OutputFormat fmt) {
     this.outputStream = out;
     this.outputFormat = fmt;
@@ -180,6 +186,15 @@
             }
           }
 
+          if (includeComments) {
+            eventFactory.addComments(c, d.messages(db));
+            if (includePatchSets) {
+              for (PatchSetAttribute attribute : c.patchSets) {
+                eventFactory.addPatchSetComments(attribute,  d.comments(db));
+              }
+            }
+          }
+
           show(c);
         }
 
@@ -270,32 +285,39 @@
         continue;
       }
 
-      indent(depth);
-      out.print(f.getName());
-      out.print(":");
-
-      if (val instanceof Long && isDateField(f.getName())) {
-        out.print(' ');
-        out.print(sdf.format(new Date(((Long) val) * 1000L)));
-        out.print('\n');
-      } else {
-        showTextValue(val, depth);
-      }
+      showField(f.getName(), val, depth);
     }
   }
 
-  private void indent(int depth) {
-    for (int i = 0; i < depth; i++) {
-      out.print("  ");
+  private String indent(int spaces) {
+    if (spaces == 0) {
+      return "";
+    } else {
+      return String.format("%" + spaces + "s", " ");
     }
   }
 
-  private void showTextValue(Object value, int depth) {
-    if (isPrimitive(value)) {
+  private void showField(String field, Object value, int depth) {
+    final int spacesDepthRatio = 2;
+    String indent = indent(depth * spacesDepthRatio);
+    out.print(indent);
+    out.print(field);
+    out.print(':');
+    if (value instanceof String && ((String) value).contains("\n")) {
+      out.print(' ');
+      // Idention for multi-line text is
+      // current depth indetion + length of field + length of ": "
+      indent = indent(indent.length() + field.length() + spacesDepthRatio);
+      out.print(((String) value).replaceAll("\n", "\n" + indent).trim());
+      out.print('\n');
+    } else if (value instanceof Long && isDateField(field)) {
+      out.print(' ');
+      out.print(sdf.format(new Date(((Long) value) * 1000L)));
+      out.print('\n');
+    } else if (isPrimitive(value)) {
       out.print(' ');
       out.print(value);
       out.print('\n');
-
     } else if (value instanceof Collection) {
       out.print('\n');
       for (Object thing : ((Collection<?>) value)) {
@@ -305,7 +327,6 @@
           out.print('\n');
         } else {
           showText(thing, depth + 1);
-          out.print('\n');
         }
       }
     } else {
@@ -323,7 +344,9 @@
 
   private static boolean isDateField(String name) {
     return "lastUpdated".equals(name) //
-        || "grantedOn".equals(name);
+        || "grantedOn".equals(name) //
+        || "timestamp".equals(name) //
+        || "createdOn".equals(name);
   }
 
   private List<Field> fieldsOf(Class<?> type) {
diff --git a/gerrit-sshd/.settings/org.eclipse.core.resources.prefs b/gerrit-sshd/.settings/org.eclipse.core.resources.prefs
index 82eb859..c780f44 100644
--- a/gerrit-sshd/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-sshd/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-sshd/.settings/org.eclipse.jdt.core.prefs b/gerrit-sshd/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..470942d 100644
--- a/gerrit-sshd/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-sshd/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/MasterCommandModule.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/MasterCommandModule.java
index c2f7608..6a69791 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/MasterCommandModule.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/MasterCommandModule.java
@@ -30,7 +30,7 @@
     command(gerrit, "create-group").to(CreateGroupCommand.class);
     command(gerrit, "create-project").to(CreateProject.class);
     command(gerrit, "gsql").to(AdminQueryShell.class);
-    command(gerrit, "modify-reviewers").to(ModifyReviewersCommand.class);
+    command(gerrit, "set-reviewers").to(SetReviewersCommand.class);
     command(gerrit, "receive-pack").to(Receive.class);
     command(gerrit, "replicate").to(Replicate.class);
     command(gerrit, "set-project-parent").to(AdminSetParent.class);
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 fecdc59..b6f5d26 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
@@ -51,6 +51,11 @@
     processor.setIncludeApprovals(on);
   }
 
+  @Option(name = "--comments", usage = "Include patch set and inline comments")
+  void setComments(boolean on) {
+    processor.setIncludeComments(on);
+  }
+
   @Argument(index = 0, required = true, multiValued = true, metaVar = "QUERY", usage = "Query to execute")
   private List<String> query;
 
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ModifyReviewersCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java
similarity index 98%
rename from gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ModifyReviewersCommand.java
rename to gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java
index f106e48..845ae95 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ModifyReviewersCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java
@@ -43,9 +43,9 @@
 import java.util.List;
 import java.util.Set;
 
-public class ModifyReviewersCommand extends BaseCommand {
+public class SetReviewersCommand extends BaseCommand {
   private static final Logger log =
-      LoggerFactory.getLogger(ModifyReviewersCommand.class);
+      LoggerFactory.getLogger(SetReviewersCommand.class);
 
   @Option(name = "--project", aliases = "-p", usage = "project containing the change")
   private ProjectControl projectControl;
diff --git a/gerrit-util-cli/.settings/org.eclipse.core.resources.prefs b/gerrit-util-cli/.settings/org.eclipse.core.resources.prefs
index 82eb859..c780f44 100644
--- a/gerrit-util-cli/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-util-cli/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-util-cli/.settings/org.eclipse.jdt.core.prefs b/gerrit-util-cli/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..470942d 100644
--- a/gerrit-util-cli/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-util-cli/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:36 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-util-ssl/.settings/org.eclipse.core.resources.prefs b/gerrit-util-ssl/.settings/org.eclipse.core.resources.prefs
index 82eb859..589908f 100644
--- a/gerrit-util-ssl/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-util-ssl/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-util-ssl/.settings/org.eclipse.jdt.core.prefs b/gerrit-util-ssl/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..5f73a7f 100644
--- a/gerrit-util-ssl/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-util-ssl/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:35 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/gerrit-war/.settings/org.eclipse.core.resources.prefs b/gerrit-war/.settings/org.eclipse.core.resources.prefs
index 82eb859..d404b00 100644
--- a/gerrit-war/.settings/org.eclipse.core.resources.prefs
+++ b/gerrit-war/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,5 @@
-#Tue Sep 02 16:59:24 PDT 2008
+#Thu Jul 28 11:02:37 PDT 2011
 eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
 encoding/<project>=UTF-8
diff --git a/gerrit-war/.settings/org.eclipse.jdt.core.prefs b/gerrit-war/.settings/org.eclipse.jdt.core.prefs
index 04afc7f..a2d8fcb 100644
--- a/gerrit-war/.settings/org.eclipse.jdt.core.prefs
+++ b/gerrit-war/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 12 17:44:13 PDT 2009
+#Thu Jul 28 11:02:37 PDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -9,6 +9,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/pom.xml b/pom.xml
index b8948f8..5fdbd23 100644
--- a/pom.xml
+++ b/pom.xml
@@ -369,6 +369,46 @@
           <artifactId>build-helper-maven-plugin</artifactId>
           <version>1.5</version>
         </plugin>
+
+        <!--This plugin's configuration is used to store Eclipse 
+            m2e settings only. It has no influence on the Maven build itself. -->
+        <plugin>
+          <groupId>org.eclipse.m2e</groupId>
+          <artifactId>lifecycle-mapping</artifactId>
+          <version>1.0.0</version>
+          <configuration>
+            <lifecycleMappingMetadata>
+              <pluginExecutions>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-antrun-plugin</artifactId>
+                    <versionRange>[1.0,)</versionRange>
+                    <goals>
+                      <goal>run</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore/>
+                  </action>
+                </pluginExecution>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>build-helper-maven-plugin</artifactId>
+                    <versionRange>[1.0,)</versionRange>
+                    <goals>
+                      <goal>add-source</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore/>
+                  </action>
+                </pluginExecution>
+              </pluginExecutions>
+            </lifecycleMappingMetadata>
+          </configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
 
diff --git a/tools/gwtui_dbg.launch b/tools/gwtui_dbg.launch
index 58f5ec8..8a01fca 100644
--- a/tools/gwtui_dbg.launch
+++ b/tools/gwtui_dbg.launch
@@ -26,11 +26,11 @@
 <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwtorm/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
 <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gerrit-gwtui/target/classes&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
 </listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-startupUrl /&#10;-war ${resource_loc:/gerrit-gwtui/target}/gwt-hosted-mode&#10;-server com.google.gerrit.gwtdebug.GerritDebugLauncher&#10;com.google.gerrit.GerritGwtUI"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit-gwtdebug"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx256M&#10;&#10;-Dgerrit.site_path=${resource_loc:/gerrit-parent}/../test_site"/>
 </launchConfiguration>
diff --git a/tools/pgm_daemon.launch b/tools/pgm_daemon.launch
index f2dc73e..fd7b50f 100644
--- a/tools/pgm_daemon.launch
+++ b/tools/pgm_daemon.launch
@@ -11,10 +11,10 @@
 <stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
 <stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;sourceLookupDirector&gt;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-common&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-httpd&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-patch-commonsnet&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-patch-jgit&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-pgm&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-server&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-sshd&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-util-cli&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-util-ssl&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-war&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-reviewdb&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;javaProject name=&amp;quot;gerrit-main&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;default/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#10;&lt;/sourceContainers&gt;&#10;&lt;/sourceLookupDirector&gt;&#10;"/>
 <booleanAttribute key="org.eclipse.jdt.debug.ui.CONSIDER_INHERITED_MAIN" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon&#10;--console-log&#10;--show-stack-trace&#10;-d ${resource_loc:/gerrit-parent}/../test_site"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit-war"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx256M"/>
 </launchConfiguration>