Merge branch 'stable-2.14' into stable-2.15

* stable-2.14:
  Make .git/hooks directory

Change-Id: I6eb852fe39819d324b768b8c13c026760871263e
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java
index dbb793c..971840b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java
@@ -29,6 +29,7 @@
   private static final String TARGET = " `git rev-parse --git-dir`/";
 
   private final String configCommand;
+  private final String extraCommand;
   private final SshScheme sshScheme;
   private final Provider<CurrentUser> userProvider;
 
@@ -36,6 +37,7 @@
   CloneWithCommitMsgHook(
       @GerritServerConfig Config config, SshScheme sshScheme, Provider<CurrentUser> userProvider) {
     this.configCommand = config.getString("gerrit", null, "installCommitMsgHookCommand");
+    this.extraCommand = config.getString("gerrit", null, "installCommitExtraCommand");
     this.sshScheme = sshScheme;
     this.userProvider = userProvider;
   }
@@ -77,6 +79,9 @@
           .append(projectName)
           .append("/.git/hooks/");
 
+      if (extraCommand != null) {
+        b.append(" && (cd ").append(projectName).append(" && ").append(extraCommand).append(")");
+      }
       return b.toString();
     }
 
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 3e76bdb..3781f9e 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -74,7 +74,7 @@
 	advertisement (`uploadpack.hideRefs`). This option can be used to
 	hide the change refs from the client. As consequence fetching
 	changes by change ref does not work anymore. However by setting
-	`uploadpack.allowTipSha1InWant` to `true` fetching changes by
+	`uploadpack.allowTipSHA1InWant` to `true` fetching changes by
 	commit ID is possible. If `download.checkForHiddenChangeRefs` is
 	set to `true` the git download commands use the commit ID instead
 	of the change ref when a project is configured like this.
@@ -84,6 +84,28 @@
 		[uploadpack]
 		  hideRefs = refs/changes/
 		  hideRefs = refs/cache-automerge/
-		  allowTipSha1InWant = true
+		  allowTipSHA1InWant = true
 
 	By default `false`.
+
+
+### <a id="gerrit">Section gerrit</a>
+
+```
+[gerrit]
+  installCommitMsgHookCommand = command
+  installCommitExtraCommand = command
+```
+
+<a id="gerrit.installCommitMsgHookCommand">gerrit.installCommitMsgHookCommand</a>
+  Optional command to install the commit-msg hook. Typically of the form:
+  `fetch-cmd some://url/to/commit-msg .git/hooks/commit-msg ; chmod +x .git/hooks/commit-msg`
+  By default unset; falls back to using scp from the canonical SSH host,
+  or curl from the canonical HTTP URL for the server. Only necessary
+  if a proxy or other server/network configuration prevents clients
+  from fetching from the default location.
+
+<a id="gerrit.installCommitExtraCommand">gerrit.installCommitExtraCommand</a>
+  Optional command to complete the commit-msg hook. For example:
+  `git submodule update --init --recursive && git review -s`
+  would initialize the submodules and setup git review.
\ No newline at end of file