mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
545ec2de44
`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
174 lines
3.9 KiB
Perl
174 lines
3.9 KiB
Perl
$ cat >> $HGRCPATH << EOF
|
|
> [extensions]
|
|
> show =
|
|
> EOF
|
|
|
|
No arguments shows available views
|
|
|
|
$ hg init empty
|
|
$ cd empty
|
|
$ hg show
|
|
available views:
|
|
|
|
bookmarks -- bookmarks and their associated changeset
|
|
stack -- current line of work
|
|
work -- changesets that aren't finished
|
|
|
|
abort: no view requested
|
|
(use "hg show VIEW" to choose a view)
|
|
[255]
|
|
|
|
`hg help show` prints available views
|
|
|
|
$ hg help show
|
|
hg show VIEW
|
|
|
|
show various repository information
|
|
|
|
A requested view of repository data is displayed.
|
|
|
|
If no view is requested, the list of available views is shown and the
|
|
command aborts.
|
|
|
|
Note:
|
|
There are no backwards compatibility guarantees for the output of this
|
|
command. Output may change in any future Mercurial release.
|
|
|
|
Consumers wanting stable command output should specify a template via
|
|
"-T/--template".
|
|
|
|
List of available views:
|
|
|
|
bookmarks bookmarks and their associated changeset
|
|
|
|
stack current line of work
|
|
|
|
work changesets that aren't finished
|
|
|
|
(use 'hg help -e show' to show help for the show extension)
|
|
|
|
options:
|
|
|
|
-T --template TEMPLATE display with template
|
|
|
|
(some details hidden, use --verbose to show complete help)
|
|
|
|
Unknown view prints error
|
|
|
|
$ hg show badview
|
|
abort: unknown view: badview
|
|
(run "hg show" to see available views)
|
|
[255]
|
|
|
|
HGPLAIN results in abort
|
|
|
|
$ HGPLAIN=1 hg show bookmarks
|
|
abort: must specify a template in plain mode
|
|
(invoke with -T/--template to control output format)
|
|
[255]
|
|
|
|
But not if a template is specified
|
|
|
|
$ HGPLAIN=1 hg show bookmarks -T '{bookmark}\n'
|
|
(no bookmarks set)
|
|
|
|
$ cd ..
|
|
|
|
bookmarks view with no bookmarks prints empty message
|
|
|
|
$ hg init books
|
|
$ cd books
|
|
$ touch f0
|
|
$ hg -q commit -A -m initial
|
|
|
|
$ hg show bookmarks
|
|
(no bookmarks set)
|
|
|
|
bookmarks view shows bookmarks in an aligned table
|
|
|
|
$ echo book1 > f0
|
|
$ hg commit -m 'commit for book1'
|
|
$ echo book2 > f0
|
|
$ hg commit -m 'commit for book2'
|
|
|
|
$ hg bookmark -r 1 book1
|
|
$ hg bookmark a-longer-bookmark
|
|
|
|
$ hg show bookmarks
|
|
* a-longer-bookmark 7b57
|
|
book1 b757
|
|
|
|
A custom bookmarks template works
|
|
|
|
$ hg show bookmarks -T '{node} {bookmark} {active}\n'
|
|
7b5709ab64cbc34da9b4367b64afff47f2c4ee83 a-longer-bookmark True
|
|
b757f780b8ffd71267c6ccb32e0882d9d32a8cc0 book1 False
|
|
|
|
bookmarks JSON works
|
|
|
|
$ hg show bookmarks -T json
|
|
[
|
|
{
|
|
"active": true,
|
|
"bookmark": "a-longer-bookmark",
|
|
"longestbookmarklen": 17,
|
|
"node": "7b5709ab64cbc34da9b4367b64afff47f2c4ee83",
|
|
"nodelen": 4
|
|
},
|
|
{
|
|
"active": false,
|
|
"bookmark": "book1",
|
|
"longestbookmarklen": 17,
|
|
"node": "b757f780b8ffd71267c6ccb32e0882d9d32a8cc0",
|
|
"nodelen": 4
|
|
}
|
|
]
|
|
|
|
JSON works with no bookmarks
|
|
|
|
$ hg book -d a-longer-bookmark
|
|
$ hg book -d book1
|
|
$ hg show bookmarks -T json
|
|
[
|
|
]
|
|
|
|
commands.show.aliasprefix aliases values to `show <view>`
|
|
|
|
$ hg --config commands.show.aliasprefix=s sbookmarks
|
|
(no bookmarks set)
|
|
|
|
$ hg --config commands.show.aliasprefix=sh shwork
|
|
@ 7b57 commit for book2
|
|
o b757 commit for book1
|
|
o ba59 initial
|
|
|
|
$ hg --config commands.show.aliasprefix='s sh' swork
|
|
@ 7b57 commit for book2
|
|
o b757 commit for book1
|
|
o ba59 initial
|
|
|
|
$ hg --config commands.show.aliasprefix='s sh' shwork
|
|
@ 7b57 commit for book2
|
|
o b757 commit for book1
|
|
o ba59 initial
|
|
|
|
The aliases don't appear in `hg config`
|
|
|
|
$ hg --config commands.show.aliasprefix=s config alias
|
|
[1]
|
|
|
|
Doesn't overwrite existing alias
|
|
|
|
$ hg --config alias.swork='log -r .' --config commands.show.aliasprefix=s swork
|
|
changeset: 2:7b5709ab64cb
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: commit for book2
|
|
|
|
|
|
$ hg --config alias.swork='log -r .' --config commands.show.aliasprefix=s config alias
|
|
alias.swork=log -r .
|
|
|
|
$ cd ..
|