Autogenerated HTML docs for v2.12.2-510-ge110
diff --git a/RelNotes/2.12.3.txt b/RelNotes/2.12.3.txt
new file mode 100644
index 0000000..73ce7da
--- /dev/null
+++ b/RelNotes/2.12.3.txt
@@ -0,0 +1,57 @@
+Git v2.12.3 Release Notes
+=========================
+
+Fixes since v2.12.2
+-------------------
+
+ * The "parse_config_key()" API function has been cleaned up.
+
+ * An helper function to make it easier to append the result from
+   real_path() to a strbuf has been added.
+
+ * The t/perf performance test suite was not prepared to test not so
+   old versions of Git, but now it covers versions of Git that are not
+   so ancient.
+
+ * Picking two versions of Git and running tests to make sure the
+   older one and the newer one interoperate happily has now become
+   possible.
+
+ * Teach the "debug" helper used in the test framework that allows a
+   command to run under "gdb" to make the session interactive.
+
+ * "git repack --depth=<n>" for a long time busted the specified depth
+   when reusing delta from existing packs.  This has been corrected.
+
+ * user.email that consists of only cruft chars should consistently
+   error out, but didn't.
+
+ * A few tests were run conditionally under (rare) conditions where
+   they cannot be run (like running cvs tests under 'root' account).
+
+ * "git branch @" created refs/heads/@ as a branch, and in general the
+   code that handled @{-1} and @{upstream} was a bit too loose in
+   disambiguating.
+
+ * "git fetch" that requests a commit by object name, when the other
+   side does not allow such an request, failed without much
+   explanation.
+
+ * "git filter-branch --prune-empty" drops a single-parent commit that
+   becomes a no-op, but did not drop a root commit whose tree is empty.
+
+ * Recent versions of Git treats http alternates (used in dumb http
+   transport) just like HTTP redirects and requires the client to
+   enable following it, due to security concerns.  But we forgot to
+   give a warning when we decide not to honor the alternates.
+
+ * NO_PTHREADS build has been broken for some time; now fixed.
+
+ * Fix for potential segv introduced in v2.11.0 and later (also
+   v2.10.2).
+
+ * A few unterminated here documents in tests were fixed, which in
+   turn revealed incorrect expectations the tests make. These tests
+   have been updated.
+
+Also contains various documentation updates and code clean-ups.
diff --git a/RelNotes/2.13.0.txt b/RelNotes/2.13.0.txt
index adf6e44..993e493 100644
--- a/RelNotes/2.13.0.txt
+++ b/RelNotes/2.13.0.txt
@@ -85,11 +85,9 @@
  * When "git submodule init" decides that the submodule in the working
    tree is its upstream, it now gives a warning as it is not a very
    common setup.
-   (merge d1b3b81aab sb/submodule-init-url-selection later to maint).
 
- * "git stash save" takes a pathspec so that the local changes can be
+ * "git stash push" takes a pathspec so that the local changes can be
    stashed away only partially.
-   (merge 9e140909f6 tg/stash-push later to maint).
 
  * Documentation for "git ls-files" did not refer to core.quotePath.
 
@@ -138,6 +136,15 @@
    "git describe --broken" to give "$name-broken" (where $name is the
    description of HEAD) in such a case.
 
+ * "git checkout" is taught the "--recurse-submodules" option.
+
+ * Recent enhancement to "git stash push" command to support pathspec
+   to allow only a subset of working tree changes to be stashed away
+   was found to be too chatty and exposed the internal implementation
+   detail (e.g. when it uses reset to match the index to HEAD before
+   doing other things, output from reset seeped out).  These, and
+   other chattyness has been fixed.
+
 
 Performance, Internal Implementation, Development Support etc.
 
@@ -162,7 +169,6 @@
    errno from failed system calls.
 
  * The "parse_config_key()" API function has been cleaned up.
-   (merge ad8c7cdadd jk/parse-config-key-cleanup later to maint).
 
  * A test that creates a confusing branch whose name is HEAD has been
    corrected not to do so.
@@ -172,7 +178,6 @@
 
  * An helper function to make it easier to append the result from
    real_path() to a strbuf has been added.
-   (merge 33ad9ddd0b rs/strbuf-add-real-path later to maint).
 
  * Reduce authentication round-trip over HTTP when the server supports
    just a single authentication method.  This also improves the
@@ -187,7 +192,6 @@
  * The t/perf performance test suite was not prepared to test not so
    old versions of Git, but now it covers versions of Git that are not
    so ancient.
-   (merge 28e1fb5466 jt/perf-updates later to maint).
 
  * Add 32-bit Linux variant to the set of platforms to be tested with
    Travis CI.
@@ -200,7 +204,6 @@
  * Picking two versions of Git and running tests to make sure the
    older one and the newer one interoperate happily has now become
    possible.
-   (merge bd4d9d993c jk/interop-test later to maint).
 
  * "uchar [40]" to "struct object_id" conversion continues.
 
@@ -211,7 +214,6 @@
 
  * The "debug" helper used in the test framework learned to run
    a command under "gdb" interactively.
-   (merge 59210dd56c sg/test-with-stdin later to maint).
 
  * The "detect attempt to create collisions" variant of SHA-1
    implementation by Marc Stevens (CWI) and Dan Shumow (Microsoft)
@@ -219,6 +221,13 @@
 
  * The test framework learned to detect unterminated here documents.
 
+ * The name-hash used for detecting paths that are different only in
+   cases (which matter on case insensitive filesystems) has been
+   optimized to take advantage of multi-threading when it makes sense.
+
+ * An earlier version of sha1dc/sha1.c that was merged to 'master'
+   compiled incorrectly on Windows, which has been fixed.
+
 
 Also contains various documentation updates and code clean-ups.
 
@@ -232,7 +241,6 @@
 
  * "git repack --depth=<n>" for a long time busted the specified depth
    when reusing delta from existing packs.  This has been corrected.
-   (merge 42b766d765 jk/delta-chain-limit later to maint).
 
  * The code to parse the command line "git grep <patterns>... <rev>
    [[--] <pathspec>...]" has been cleaned up, and a handful of bugs
@@ -270,7 +278,6 @@
 
  * user.email that consists of only cruft chars should consistently
    error out, but didn't.
-   (merge 94425552f3 jk/ident-empty later to maint).
 
  * "git upload-pack", which is a counter-part of "git fetch", did not
    report a request for a ref that was not advertised as invalid.
@@ -312,27 +319,22 @@
 
  * A few tests were run conditionally under (rare) conditions where
    they cannot be run (like running cvs tests under 'root' account).
-   (merge c6507484a2 ab/cond-skip-tests later to maint).
 
  * "git branch @" created refs/heads/@ as a branch, and in general the
    code that handled @{-1} and @{upstream} was a bit too loose in
    disambiguating.
-   (merge fd4692ff70 jk/interpret-branch-name later to maint).
 
  * "git fetch" that requests a commit by object name, when the other
    side does not allow such an request, failed without much
    explanation.
-   (merge d56583ded6 mm/fetch-show-error-message-on-unadvertised-object later to maint).
 
  * "git filter-branch --prune-empty" drops a single-parent commit that
    becomes a no-op, but did not drop a root commit whose tree is empty.
-   (merge 32da7467eb dp/filter-branch-prune-empty later to maint).
 
  * Recent versions of Git treats http alternates (used in dumb http
    transport) just like HTTP redirects and requires the client to
    enable following it, due to security concerns.  But we forgot to
    give a warning when we decide not to honor the alternates.
-   (merge 5cae73d5d2 ew/http-alternates-as-redirects-warning later to maint).
 
  * "git push" had a handful of codepaths that could lead to a deadlock
    when unexpected error happened, which has been fixed.
@@ -364,27 +366,19 @@
    misconfiguration.
 
  * Fix for NO_PTHREADS build.
-   (merge 7b91929ba0 jk/execv-dashed-external later to maint).
 
  * Fix for potential segv introduced in v2.11.0 and later (also
    v2.10.2) to "git log --pickaxe-regex -S".
-   (merge f53c5de29c js/regexec-buf later to maint).
 
  * A few unterminated here documents in tests were fixed, which in
    turn revealed incorrect expectations the tests make. These tests
    have been updated.
-   (merge b42ca35e5c st/verify-tag later to maint).
+
+ * Fix for NO_PTHREADS option.
+   (merge 2225e1ea20 bw/grep-recurse-submodules later to maint).
 
  * Other minor doc, test and build updates and code cleanups.
-   (merge dfa3ad3238 rs/blame-code-cleanup later to maint).
-   (merge ffddfc6328 jk/rev-parse-cleanup later to maint).
-   (merge f20754802a jk/pack-name-cleanups later to maint).
-   (merge d4aae459cd sb/wt-status-cleanup later to maint).
-   (merge e94eac49e6 rs/http-push-cleanup later to maint).
-   (merge ba6746c08f rs/path-name-safety-cleanup later to maint).
-   (merge d41626ff9e rs/shortlog-cleanup later to maint).
-   (merge dce96c41f9 rs/update-hook-optim later to maint).
-   (merge 37e61153e2 jk/quote-env-path-list-component later to maint).
-   (merge a4dded0189 sb/submodule-update-initial-runs-custom-script later to maint).
-   (merge 70471ed9bb sb/t3600-rephrase later to maint).
-   (merge e7e183d6ee km/config-grammofix later to maint).
+   (merge df2a6e38b7 jk/pager-in-use later to maint).
+   (merge 75ec4a6cb0 ab/branch-list-doc later to maint).
+   (merge 3e5b36c637 sg/skip-prefix-in-prettify-refname later to maint).
+   (merge 2c5e2865cc jk/fast-import-cleanup later to maint).
diff --git a/git-branch.html b/git-branch.html
index a3fbd99..12dcbc7 100644
--- a/git-branch.html
+++ b/git-branch.html
@@ -959,9 +959,13 @@
 </dt>

 <dd>

 <p>

-        Activate the list mode. <code>git branch &lt;pattern&gt;</code> would try to create a branch,

-        use <code>git branch --list &lt;pattern&gt;</code> to list matching branches.

+        List branches.  With optional <code>&lt;pattern&gt;...</code>, e.g. <code>git

+        branch --list 'maint-*'</code>, list only the branches that match

+        the pattern(s).

 </p>

+<div class="paragraph"><p>This should not be confused with <code>git branch -l &lt;branchname&gt;</code>,

+which creates a branch named <code>&lt;branchname&gt;</code> with a reflog.

+See <code>--create-reflog</code> above for details.</p></div>

 </dd>

 <dt class="hdlist1">

 -v

@@ -1292,7 +1296,7 @@
 <div id="footnotes"><hr /></div>

 <div id="footer">

 <div id="footer-text">

-Last updated 2017-02-27 15:37:25 PST

+Last updated 2017-03-28 15:01:30 PDT

 </div>

 </div>

 </body>

diff --git a/git-branch.txt b/git-branch.txt
index 092f1bc..c203e8c 100644
--- a/git-branch.txt
+++ b/git-branch.txt
@@ -142,8 +142,13 @@
 	List both remote-tracking branches and local branches.
 
 --list::
-	Activate the list mode. `git branch <pattern>` would try to create a branch,
-	use `git branch --list <pattern>` to list matching branches.
+	List branches.  With optional `<pattern>...`, e.g. `git
+	branch --list 'maint-*'`, list only the branches that match
+	the pattern(s).
++
+This should not be confused with `git branch -l <branchname>`,
+which creates a branch named `<branchname>` with a reflog.
+See `--create-reflog` above for details.
 
 -v::
 -vv::
diff --git a/git-checkout.html b/git-checkout.html
index 512e416..d7c405f 100644
--- a/git-checkout.html
+++ b/git-checkout.html
@@ -1099,6 +1099,18 @@
 </p>

 </dd>

 <dt class="hdlist1">

+--[no-]recurse-submodules

+</dt>

+<dd>

+<p>

+        Using --recurse-submodules will update the content of all initialized

+        submodules according to the commit recorded in the superproject. If

+        local modifications in a submodule would be overwritten the checkout

+        will fail unless <code>-f</code> is used. If nothing (or --no-recurse-submodules)

+        is used, the work trees of submodules will not be updated.

+</p>

+</dd>

+<dt class="hdlist1">

 &lt;branch&gt;

 </dt>

 <dd>

@@ -1414,7 +1426,7 @@
 <div id="footnotes"><hr /></div>

 <div id="footer">

 <div id="footer-text">

-Last updated 2016-09-26 16:43:51 PDT

+Last updated 2017-03-28 15:01:30 PDT

 </div>

 </div>

 </body>

diff --git a/git-checkout.txt b/git-checkout.txt
index 8e2c066..d6399c0 100644
--- a/git-checkout.txt
+++ b/git-checkout.txt
@@ -256,6 +256,13 @@
 	out anyway. In other words, the ref can be held by more than one
 	worktree.
 
+--[no-]recurse-submodules::
+	Using --recurse-submodules will update the content of all initialized
+	submodules according to the commit recorded in the superproject. If
+	local modifications in a submodule would be overwritten the checkout
+	will fail unless `-f` is used. If nothing (or --no-recurse-submodules)
+	is used, the work trees of submodules will not be updated.
+
 <branch>::
 	Branch to checkout; if it refers to a branch (i.e., a name that,
 	when prepended with "refs/heads/", is a valid ref), then that
diff --git a/git-read-tree.html b/git-read-tree.html
index 4a0256f..add244a 100644
--- a/git-read-tree.html
+++ b/git-read-tree.html
@@ -929,6 +929,17 @@
 </p>

 </dd>

 <dt class="hdlist1">

+--[no-]recurse-submodules

+</dt>

+<dd>

+<p>

+        Using --recurse-submodules will update the content of all initialized

+        submodules according to the commit recorded in the superproject by

+        calling read-tree recursively, also setting the submodules HEAD to be

+        detached at that commit.

+</p>

+</dd>

+<dt class="hdlist1">

 --no-sparse-checkout

 </dt>

 <dd>

@@ -1292,7 +1303,7 @@
 <div id="footnotes"><hr /></div>

 <div id="footer">

 <div id="footer-text">

-Last updated 2014-06-06 12:15:38 PDT

+Last updated 2017-03-28 15:01:30 PDT

 </div>

 </div>

 </body>

diff --git a/git-read-tree.txt b/git-read-tree.txt
index fa1d557..ed9d63e 100644
--- a/git-read-tree.txt
+++ b/git-read-tree.txt
@@ -115,6 +115,12 @@
 	directories the index file and index output file are
 	located in.
 
+--[no-]recurse-submodules::
+	Using --recurse-submodules will update the content of all initialized
+	submodules according to the commit recorded in the superproject by
+	calling read-tree recursively, also setting the submodules HEAD to be
+	detached at that commit.
+
 --no-sparse-checkout::
 	Disable sparse checkout support even if `core.sparseCheckout`
 	is true.
diff --git a/technical/api-hashmap.html b/technical/api-hashmap.html
index 02bba85..06ae44e 100644
--- a/technical/api-hashmap.html
+++ b/technical/api-hashmap.html
@@ -761,6 +761,8 @@
 <div class="paragraph"><p><code>cmpfn</code> stores the comparison function specified in <code>hashmap_init()</code>. In

 advanced scenarios, it may be useful to change this, e.g. to switch between

 case-sensitive and case-insensitive lookup.</p></div>

+<div class="paragraph"><p>When <code>disallow_rehash</code> is set, automatic rehashes are prevented during inserts

+and deletes.</p></div>

 </dd>

 <dt class="hdlist1">

 <code>struct hashmap_entry</code>

@@ -823,6 +825,9 @@
 <dt class="hdlist1">

 <code>unsigned int memihash(const void *buf, size_t len)</code>

 </dt>

+<dt class="hdlist1">

+<code>unsigned int memihash_cont(unsigned int hash_seed, const void *buf, size_t len)</code>

+</dt>

 <dd>

 <p>

         Ready-to-use hash functions for strings, using the FNV-1 algorithm (see

@@ -831,6 +836,8 @@
 <div class="paragraph"><p><code>strhash</code> and <code>strihash</code> take 0-terminated strings, while <code>memhash</code> and

 <code>memihash</code> operate on arbitrary-length memory.</p></div>

 <div class="paragraph"><p><code>strihash</code> and <code>memihash</code> are case insensitive versions.</p></div>

+<div class="paragraph"><p><code>memihash_cont</code> is a variant of <code>memihash</code> that allows a computation to be

+continued with another chunk of data.</p></div>

 </dd>

 <dt class="hdlist1">

 <code>unsigned int sha1hash(const unsigned char *sha1)</code>

@@ -966,6 +973,22 @@
 <div class="paragraph"><p>Returns the removed entry, or NULL if not found.</p></div>

 </dd>

 <dt class="hdlist1">

+<code>void hashmap_disallow_rehash(struct hashmap *map, unsigned value)</code>

+</dt>

+<dd>

+<p>

+        Disallow/allow automatic rehashing of the hashmap during inserts

+        and deletes.

+</p>

+<div class="paragraph"><p>This is useful if the caller knows that the hashmap will be accessed

+by multiple threads.</p></div>

+<div class="paragraph"><p>The caller is still responsible for any necessary locking; this simply

+prevents unexpected rehashing.  The caller is also responsible for properly

+sizing the initial hashmap to ensure good performance.</p></div>

+<div class="paragraph"><p>A call to allow rehashing does not force a rehash; that might happen

+with the next insert or delete.</p></div>

+</dd>

+<dt class="hdlist1">

 <code>void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter)</code>

 </dt>

 <dt class="hdlist1">

@@ -1083,7 +1106,7 @@
 <div id="footnotes"><hr /></div>

 <div id="footer">

 <div id="footer-text">

-Last updated 2017-01-31 14:00:53 PST

+Last updated 2017-03-28 15:01:30 PDT

 </div>

 </div>

 </body>

diff --git a/technical/api-hashmap.txt b/technical/api-hashmap.txt
index a3f020c..ccc634b 100644
--- a/technical/api-hashmap.txt
+++ b/technical/api-hashmap.txt
@@ -21,6 +21,9 @@
 `cmpfn` stores the comparison function specified in `hashmap_init()`. In
 advanced scenarios, it may be useful to change this, e.g. to switch between
 case-sensitive and case-insensitive lookup.
++
+When `disallow_rehash` is set, automatic rehashes are prevented during inserts
+and deletes.
 
 `struct hashmap_entry`::
 
@@ -57,6 +60,7 @@
 `unsigned int strihash(const char *buf)`::
 `unsigned int memhash(const void *buf, size_t len)`::
 `unsigned int memihash(const void *buf, size_t len)`::
+`unsigned int memihash_cont(unsigned int hash_seed, const void *buf, size_t len)`::
 
 	Ready-to-use hash functions for strings, using the FNV-1 algorithm (see
 	http://www.isthe.com/chongo/tech/comp/fnv).
@@ -65,6 +69,9 @@
 `memihash` operate on arbitrary-length memory.
 +
 `strihash` and `memihash` are case insensitive versions.
++
+`memihash_cont` is a variant of `memihash` that allows a computation to be
+continued with another chunk of data.
 
 `unsigned int sha1hash(const unsigned char *sha1)`::
 
@@ -184,6 +191,21 @@
 +
 Returns the removed entry, or NULL if not found.
 
+`void hashmap_disallow_rehash(struct hashmap *map, unsigned value)`::
+
+	Disallow/allow automatic rehashing of the hashmap during inserts
+	and deletes.
++
+This is useful if the caller knows that the hashmap will be accessed
+by multiple threads.
++
+The caller is still responsible for any necessary locking; this simply
+prevents unexpected rehashing.  The caller is also responsible for properly
+sizing the initial hashmap to ensure good performance.
++
+A call to allow rehashing does not force a rehash; that might happen
+with the next insert or delete.
+
 `void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter)`::
 `void *hashmap_iter_next(struct hashmap_iter *iter)`::
 `void *hashmap_iter_first(struct hashmap *map, struct hashmap_iter *iter)`::