config: support new upload_pack_window setting
When Git is creating a pack to send down to a client, if it needs to
send down objects that are deltas against objects it is not sending and
that it does not know the client already has, it must undelta and
recompute deltas for those objects. This is the "Compressing objects"
objects phase the client sees during a fetch or clone.
If pack.window is unset the Git default of 10 will be used during these
operations.
Add a new setting $Girocco::Config::upload_pack_window that allows the
pack.window setting to be changed only when running git upload-pack.
Setting the pack.window size to 5 during upload-pack operations can
reduce the time spent in the "Compressing objects" phase by almost half
with very little effect on efficiency. Setting the pack.window size to
50 during upload-pack operations can guarantee that data sent to clients
is packed approximately just as efficiently as it would be as a result
of running garbage collection but at a cost of increasing the
"Compressing objects" phase runtime by up to 5 times.
While this change adds support for temporarily altering the pack.window
size while git upload-pack is running, it leaves the default for this
new setting set to "undef" which means to leave the pack.window setting
unmolested while git upload-pack is running. This matches the prior
behavior.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>