tests/test-mq-qgoto.t
author Gregory Szorc <gregory.szorc@gmail.com>
Tue, 13 Oct 2015 12:30:39 -0700
changeset 26648 c347d532bb56
parent 18342 de99de39ba28
child 26780 bbf544b5f2e9
permissions -rw-r--r--
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`.

  $ echo "[extensions]" >> $HGRCPATH
  $ echo "mq=" >> $HGRCPATH

  $ hg init a
  $ cd a
  $ echo a > a
  $ hg ci -Ama
  adding a

  $ hg qnew a.patch
  $ echo a >> a
  $ hg qrefresh

  $ hg qnew b.patch
  $ echo b > b
  $ hg add b
  $ hg qrefresh

  $ hg qnew c.patch
  $ echo c > c
  $ hg add c
  $ hg qrefresh

  $ hg qgoto a.patch
  popping c.patch
  popping b.patch
  now at: a.patch

  $ hg qgoto c.patch
  applying b.patch
  applying c.patch
  now at: c.patch

  $ hg qgoto b.patch
  popping c.patch
  now at: b.patch

Using index:

  $ hg qgoto 0
  popping b.patch
  now at: a.patch

  $ hg qgoto 2
  applying b.patch
  applying c.patch
  now at: c.patch

No warnings when using index ... and update from non-qtip and with pending
changes in unrelated files:

  $ hg qnew bug314159
  $ echo d >> c
  $ hg qrefresh
  $ hg qnew bug141421
  $ echo e >> b
  $ hg qrefresh

  $ hg up -r bug314159
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo f >> a
  $ echo f >> b
  $ echo f >> c

  $ hg qgoto 1
  abort: local changes found, refresh first
  [255]
  $ hg qgoto 1 -f
  popping bug141421
  popping bug314159
  popping c.patch
  now at: b.patch
  $ hg st
  M a
  M b
  ? c.orig
  $ hg up -qCr.

  $ hg qgoto 3
  applying c.patch
  applying bug314159
  now at: bug314159

Detect ambiguous non-index:

  $ hg qgoto 14
  patch name "14" is ambiguous:
    bug314159
    bug141421
  abort: patch 14 not in series
  [255]

  $ cd ..