##// END OF EJS Templates
show: use consistent (and possibly shorter) node lengths...
show: use consistent (and possibly shorter) node lengths `hg show` makes heavy use of shortest() to limit the length of the node hash. For the "stack" and "work" views, you are often looking at multiple lines of similar output for "lines" of work. It is visually appeasing for things to vertically align. A naive use of {shortest(node, N)} could result in variable length nodes and for the first character of the description to vary by a column or two. We implement a function to determine the longest shortest prefix for a set of revisions. The new function is used to determine the printed node length for all `hg show` views. .. feature:: show: use consistent node length in views Our previous shortest node length of 5 was arbitrarily chosen. shortest() already does the work of ensuring that a partial node isn't ambiguous with an integer revision, which is our primary risk of a collision for very short nodes. It should be safe to go with the shortest node possible. Existing code is also optimized to handle nodes as short as 4. So, we decrease the minimum hash length from 5 to 4. We also add a test demonstrating that prefix collisions increase the node length. .. feature:: show: decrease minimum displayed hash length from 5 to 4 Differential Revision: https://phab.mercurial-scm.org/D558

File last commit:

r34192:e6b5e732 default
r34192:e6b5e732 default
Show More
test-show-stack.t
220 lines | 4.3 KiB | text/troff | Tads3Lexer
/ tests / test-show-stack.t
Gregory Szorc
show: implement "stack" view...
r33194 $ cat >> $HGRCPATH << EOF
> [extensions]
> show =
> EOF
$ hg init repo0
$ cd repo0
Empty repo / no checkout results in error
$ hg show stack
abort: stack view only available when there is a working directory
[255]
Stack displays single draft changeset as root revision
$ echo 0 > foo
$ hg -q commit -A -m 'commit 0'
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 9f17 commit 0
Gregory Szorc
show: implement "stack" view...
r33194
Stack displays multiple draft changesets
$ echo 1 > foo
$ hg commit -m 'commit 1'
$ echo 2 > foo
$ hg commit -m 'commit 2'
$ echo 3 > foo
$ hg commit -m 'commit 3'
$ echo 4 > foo
$ hg commit -m 'commit 4'
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 2737 commit 4
o d1a6 commit 3
o 128c commit 2
o 181c commit 1
o 9f17 commit 0
Gregory Szorc
show: implement "stack" view...
r33194
Public parent of draft base is displayed, separated from stack
$ hg phase --public -r 0
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 2737 commit 4
o d1a6 commit 3
o 128c commit 2
o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 9f17 commit 0
Gregory Szorc
show: implement "stack" view...
r33194
$ hg phase --public -r 1
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 2737 commit 4
o d1a6 commit 3
o 128c commit 2
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194
Draft descendants are shown
$ hg -q up 2
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 2737 commit 4
o d1a6 commit 3
@ 128c commit 2
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194
$ hg -q up 3
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 2737 commit 4
@ d1a6 commit 3
o 128c commit 2
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194
working dir on public changeset should display special message
$ hg -q up 1
$ hg show stack
Gregory Szorc
show: tweak warning message...
r33205 (empty stack; working directory parent is a published changeset)
Gregory Szorc
show: implement "stack" view...
r33194
Branch point in descendants displayed at top of graph
$ hg -q up 3
$ echo b > foo
$ hg commit -m 'commit 5 (new dag branch)'
created new head
$ hg -q up 2
$ hg show stack
\ / (multiple children)
|
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o d1a6 commit 3
@ 128c commit 2
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194
$ cd ..
Base is stopped at merges
$ hg init merge-base
$ cd merge-base
$ echo 0 > foo
$ hg -q commit -A -m initial
$ echo h1 > foo
$ hg commit -m 'head 1'
$ hg -q up 0
$ echo h2 > foo
$ hg -q commit -m 'head 2'
$ hg phase --public -r 0:tip
$ hg -q up 1
$ hg merge -t :local 2
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m 'merge heads'
TODO doesn't yet handle case where wdir is a draft merge
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 8ee9 merge heads
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 5947 head 1
Gregory Szorc
show: implement "stack" view...
r33194
$ echo d1 > foo
$ hg commit -m 'draft 1'
$ echo d2 > foo
$ hg commit -m 'draft 2'
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 430d draft 2
o 787b draft 1
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 8ee9 merge heads
Gregory Szorc
show: implement "stack" view...
r33194
$ cd ..
Now move on to stacks when there are more commits after the base branchpoint
$ hg init public-rebase
$ cd public-rebase
$ echo 0 > foo
$ hg -q commit -A -m 'base'
$ hg phase --public -r .
$ echo d1 > foo
$ hg commit -m 'draft 1'
$ echo d2 > foo
$ hg commit -m 'draft 2'
$ hg -q up 0
$ echo 1 > foo
$ hg commit -m 'new 1'
created new head
$ echo 2 > foo
$ hg commit -m 'new 2'
$ hg -q up 2
Newer draft heads don't impact output
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ eaff draft 2
o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base
Gregory Szorc
show: implement "stack" view...
r33194
Newer public heads are rendered
$ hg phase --public -r '::tip'
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o baa4 new 2
Gregory Szorc
show: implement "stack" view...
r33194 / (2 commits ahead)
:
: (stack head)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : @ eaff draft 2
: o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 :/ (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base
Gregory Szorc
show: implement "stack" view...
r33194
If rebase is available, we show a hint how to rebase to that head
$ hg --config extensions.rebase= show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o baa4 new 2
/ (2 commits ahead; hg rebase --source 2b21 --dest baa4)
Gregory Szorc
show: implement "stack" view...
r33194 :
: (stack head)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : @ eaff draft 2
: o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 :/ (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base
Gregory Szorc
show: implement "stack" view...
r33194
Similar tests but for multiple heads
$ hg -q up 0
$ echo h2 > foo
$ hg -q commit -m 'new head 2'
$ hg phase --public -r .
$ hg -q up 2
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o baa4 new 2
Gregory Szorc
show: implement "stack" view...
r33194 / (2 commits ahead)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : o 9a84 new head 2
Gregory Szorc
show: implement "stack" view...
r33194 :/ (1 commits ahead)
:
: (stack head)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : @ eaff draft 2
: o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 :/ (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base
Gregory Szorc
show: implement "stack" view...
r33194
$ hg --config extensions.rebase= show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o baa4 new 2
/ (2 commits ahead; hg rebase --source 2b21 --dest baa4)
: o 9a84 new head 2
:/ (1 commits ahead; hg rebase --source 2b21 --dest 9a84)
Gregory Szorc
show: implement "stack" view...
r33194 :
: (stack head)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : @ eaff draft 2
: o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 :/ (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base