##// END OF EJS Templates
revisions: allow "x123" to refer to nodeid prefix "123"...
revisions: allow "x123" to refer to nodeid prefix "123" When resolving "123" to a revision, we try to interpret it as revnum before we try to interpret it as a nodeid hex prefix. This can lead to the shortest valid prefix being longer than necessary. This patch lets us write such nodeids in a shorter form by prefixing them with "x" instead of adding more hex digits until they're longer than the longest decimal revnum. On my hg repo with almost 69k revisions, turning this feature on saves on average 0.4% on the average nodeid length. That clearly doesn't justify this patch. However, it becomes more usefule when combined with the earlier patches in this series that let you disambiguate nodeid prefixes within a configured revset. Note that we attempt to resolve symbols as nodeid prefixes after we've exhausted all other posibilities, so this is a backwards compatible change (only queries that would previously fail may now succeed). I've still hidden this feature behind an experiemntal config option so we can roll it back if needed. Differential Revision: https://phab.mercurial-scm.org/D4041

File last commit:

r34145:9e4f82bc default
r38891:7848f284 default
Show More
test-merge-local.t
151 lines | 3.4 KiB | text/troff | Tads3Lexer
$ hg init
Revision 0:
$ echo "unchanged" > unchanged
$ echo "remove me" > remove
$ echo "copy me" > copy
$ echo "move me" > move
$ for i in 1 2 3 4 5 6 7 8 9; do
> echo "merge ok $i" >> zzz1_merge_ok
> done
$ echo "merge bad" > zzz2_merge_bad
$ hg ci -Am "revision 0"
adding copy
adding move
adding remove
adding unchanged
adding zzz1_merge_ok
adding zzz2_merge_bad
Revision 1:
$ hg rm remove
$ hg mv move moved
$ hg cp copy copied
$ echo "added" > added
$ hg add added
$ echo "new first line" > zzz1_merge_ok
$ hg cat zzz1_merge_ok >> zzz1_merge_ok
$ echo "new last line" >> zzz2_merge_bad
$ hg ci -m "revision 1"
Local changes to revision 0:
$ hg co 0
4 files updated, 0 files merged, 3 files removed, 0 files unresolved
$ echo "new last line" >> zzz1_merge_ok
$ echo "another last line" >> zzz2_merge_bad
$ hg diff --nodates | grep "^[+-][^<>]"
--- a/zzz1_merge_ok
+++ b/zzz1_merge_ok
+new last line
--- a/zzz2_merge_bad
+++ b/zzz2_merge_bad
+another last line
$ hg st
M zzz1_merge_ok
M zzz2_merge_bad
Local merge with bad merge tool:
$ HGMERGE=false hg co
merging zzz1_merge_ok
merging zzz2_merge_bad
merging zzz2_merge_bad failed!
3 files updated, 1 files merged, 2 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges
[1]
$ hg resolve -m
(no more unresolved files)
$ hg co 0
merging zzz1_merge_ok
merging zzz2_merge_bad
warning: conflicts while merging zzz2_merge_bad! (edit, then use 'hg resolve --mark')
2 files updated, 1 files merged, 3 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges
[1]
$ hg diff --nodates | grep "^[+-][^<>]"
--- a/zzz1_merge_ok
+++ b/zzz1_merge_ok
+new last line
--- a/zzz2_merge_bad
+++ b/zzz2_merge_bad
+another last line
+=======
$ hg st
M zzz1_merge_ok
M zzz2_merge_bad
? zzz2_merge_bad.orig
Local merge with conflicts:
$ hg resolve -m
(no more unresolved files)
$ hg co
merging zzz1_merge_ok
merging zzz2_merge_bad
warning: conflicts while merging zzz2_merge_bad! (edit, then use 'hg resolve --mark')
3 files updated, 1 files merged, 2 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges
[1]
$ hg resolve -m
(no more unresolved files)
$ hg co 0 --config 'ui.origbackuppath=.hg/origbackups'
merging zzz1_merge_ok
merging zzz2_merge_bad
warning: conflicts while merging zzz2_merge_bad! (edit, then use 'hg resolve --mark')
2 files updated, 1 files merged, 3 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges
[1]
Are orig files from the last commit where we want them?
$ ls .hg/origbackups
zzz2_merge_bad
$ hg diff --nodates | grep "^[+-][^<>]"
--- a/zzz1_merge_ok
+++ b/zzz1_merge_ok
+new last line
--- a/zzz2_merge_bad
+++ b/zzz2_merge_bad
+another last line
+=======
+=======
+new last line
+=======
$ hg st
M zzz1_merge_ok
M zzz2_merge_bad
? zzz2_merge_bad.orig
Local merge without conflicts:
$ hg revert zzz2_merge_bad
$ hg resolve -m
(no more unresolved files)
$ hg co
merging zzz1_merge_ok
4 files updated, 1 files merged, 2 files removed, 0 files unresolved
$ hg diff --nodates | grep "^[+-][^<>]"
--- a/zzz1_merge_ok
+++ b/zzz1_merge_ok
+new last line
$ hg st
M zzz1_merge_ok
? zzz2_merge_bad.orig