Jon Simons's series targets client-side refspec matching in push, especially pushing many branch deletes to a server that advertises many refs. By his figures, a 'git push --dry-run' of 100 delete refspecs against 100k refs takes about 2.5s from an empty client and 6.6s from a mirror. With one --force-with-lease per refspec it takes about 4.8s and 8.9s. After the series, the same pushes take roughly 0.15s to 0.19s.
The approach has two parts. refname_match() is changed to reuse the existing match_parse_rule(). Several linear ref traversals in remote.c, including apply_push_cas() and match_explicit_refs(), are converted to strmap lookups. For apply_push_cas() the loops are inverted and split into apply_one_cas() and apply_cas_tracking(). Simons describes the cost as moving from O(N * M) to O(M) to build the map plus O(N * rules) for lookups. New p5516 perf rows cover the delete-refspec and lease cases.
The series also touches behavior. One patch addresses match_explicit_refs() passing a NULL destination head to match_explicit() on every iteration when the remote is empty, so destinations linked at the tail are not seen. The following commit rejects pushes with duplicate destinations on the client side, with the message 'dst ref <dst> receives from more than one src'. Existing t5408 send-pack tests that expected a server-side 'multiple updates for ref' rejection are updated, and two tests are added to restore the ordering assertions that no longer worked after 9d2962a7c4 (receive-pack: use batched reference updates).
The only review so far is from Kristoffer Haugsbakk, who noted that this project prefers to introduce a regression test and its fix in the same commit. Simons's guide to changes says the commits are ordered to introduce failing tests for behavioral changes first. Whether the series will be reordered is not settled in the excerpts.