exchange: support sorting URLs by client-side preferences
Not all bundles are appropriate for all clients. For example, someone
with a slow Internet connection may want to prefer bz2 bundles over gzip
bundles because they are smaller and don't take as long to transfer.
This is information that a server cannot know on its own. So, we invent
a mechanism for "preferring" server-advertised URLs based on their
attributes.
We could invent a negotiation between client and server where the client
sends its preferences and the sorting/filtering is done server-side.
However, this feels complex. We can avoid complicating the wire protocol
and exposing ourselves to backwards compatible concerns by performing
the sorting locally.
This patch defines a new config option for expressing preferred
attributes in server-advertised bundles.
At Mozilla, we leverage this feature so clients in fast data centers
prefer uncompressed bundles. (We advertise gzip bundles first because
that is a reasonable default.)
I consider this an advanced feature. I'm on the fence as to whether it
should be documented in `hg help config`.
$ for i in aaa zzz; do
> hg init t
> cd t
>
> echo
> echo "-- With $i"
>
> touch file
> hg add file
> hg ci -m "Add"
>
> hg cp file $i
> hg ci -m "a -> $i"
>
> hg cp $i other-file
> echo "different" >> $i
> hg ci -m "$i -> other-file"
>
> hg cp other-file somename
>
> echo "Status":
> hg st -C
> echo
> echo "Diff:"
> hg diff -g
>
> cd ..
> rm -rf t
> done
-- With aaa
Status:
A somename
other-file
Diff:
diff --git a/other-file b/somename
copy from other-file
copy to somename
-- With zzz
Status:
A somename
other-file
Diff:
diff --git a/other-file b/somename
copy from other-file
copy to somename