view tests/test-mq-qqueue.t @ 44574:5205b46bd887

fix: add a -s option to format a revision and its descendants `hg fix -r abc123` will format that commit but not its descendants. That seems expected given the option name (`-r`), but it's very rarely what the user wants to do. The problem is that any descendants of that commit will not be formatted, leaving them as orphans that are hard to evolve. They are hard to evolve because the new parent will have formatting changes that the orphan doesn't have. I talked to Danny Hooper (who wrote most of the fix extension) about the problem and we agreed that deprecating `-r` in favor of a new `-s` argument (mimicing rebase's `-s`) would be a good way of reducing the risk that users end up with these hard-to-evolve orphans. So that's what this patch implements. Differential Revision: https://phab.mercurial-scm.org/D8287
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 13 Mar 2020 12:16:00 -0700
parents 4f2f0f367ef6
children
line wrap: on
line source

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

  $ hg init foo
  $ cd foo
  $ echo a > a
  $ hg ci -qAm a

Default queue:

  $ hg qqueue
  patches (active)

  $ echo b > a
  $ hg qnew -fgDU somestuff

Applied patches in default queue:

  $ hg qap
  somestuff

Try to change patch (create succeeds, switch fails):

  $ hg qqueue foo --create
  abort: new queue created, but cannot make active as patches are applied
  [255]

  $ hg qqueue
  foo
  patches (active)

Empty default queue:

  $ hg qpop
  popping somestuff
  patch queue now empty

Switch queue:

  $ hg qqueue foo
  $ hg qqueue
  foo (active)
  patches

List queues, quiet:

  $ hg qqueue --quiet
  foo
  patches

Fail creating queue with already existing name:

  $ hg qqueue --create foo
  abort: queue "foo" already exists
  [255]

  $ hg qqueue
  foo (active)
  patches

Create new queue for rename:

  $ hg qqueue --create bar

  $ hg qqueue
  bar (active)
  foo
  patches

Rename queue, same name:

  $ hg qqueue --rename bar
  abort: can't rename "bar" to its current name
  [255]

Rename queue to existing:

  $ hg qqueue --rename foo
  abort: queue "foo" already exists
  [255]

Rename queue:

  $ hg qqueue --rename buz

  $ hg qqueue
  buz (active)
  foo
  patches

Switch back to previous queue:

  $ hg qqueue foo
  $ hg qqueue --delete buz

  $ hg qqueue
  foo (active)
  patches

Create queue for purge:

  $ hg qqueue --create purge-me

  $ hg qqueue
  foo
  patches
  purge-me (active)

Create patch for purge:

  $ hg qnew patch-purge-me

  $ ls -1d .hg/patches-purge-me 2>/dev/null || true
  .hg/patches-purge-me

  $ hg qpop -a
  popping patch-purge-me
  patch queue now empty

Purge queue:

  $ hg qqueue foo
  $ hg qqueue --purge purge-me

  $ hg qqueue
  foo (active)
  patches

  $ ls -1d .hg/patches-purge-me 2>/dev/null || true

Unapplied patches:

  $ hg qun
  $ echo c > a
  $ hg qnew -fgDU otherstuff

Fail switching back:

  $ hg qqueue patches
  abort: new queue created, but cannot make active as patches are applied
  [255]

Fail deleting current:

  $ hg qqueue foo --delete
  abort: cannot delete currently active queue
  [255]

Switch back and delete foo:

  $ hg qpop -a
  popping otherstuff
  patch queue now empty

  $ hg qqueue patches
  $ hg qqueue foo --delete
  $ hg qqueue
  patches (active)

Tricky cases:

  $ hg qqueue store --create
  $ hg qnew journal

  $ hg qqueue
  patches
  store (active)

  $ hg qpop -a
  popping journal
  patch queue now empty

  $ hg qqueue patches
  $ hg qun
  somestuff

Invalid names:

  $ hg qqueue test/../../bar --create
  abort: invalid queue name, may not contain the characters ":\/."
  [255]

  $ hg qqueue . --create
  abort: invalid queue name, may not contain the characters ":\/."
  [255]

  $ cd ..