Patchwork D4038: scmutil: make shortest() respect disambiguation revset

login
register
mail settings
Submitter phabricator
Date Aug. 4, 2018, 3:12 a.m.
Message ID <4ece6d4b254a07ddf6dd8fe5df7c2b57@localhost.localdomain>
Download mbox | patch
Permalink /patch/33208/
State Not Applicable
Headers show

Comments

phabricator - Aug. 4, 2018, 3:12 a.m.
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG6f7c9527030b: scmutil: make shortest() respect disambiguation revset (authored by martinvonz, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D4038?vs=9754&id=9877

REVISION DETAIL
  https://phab.mercurial-scm.org/D4038

AFFECTED FILES
  mercurial/scmutil.py
  tests/test-revisions.t

CHANGE DETAILS




To: martinvonz, #hg-reviewers
Cc: yuja, mercurial-devel

Patch

diff --git a/tests/test-revisions.t b/tests/test-revisions.t
--- a/tests/test-revisions.t
+++ b/tests/test-revisions.t
@@ -23,6 +23,12 @@ 
   > [experimental]
   > revisions.disambiguatewithin=:3
   > EOF
+  $ hg l
+  4:7ba5d
+  3:7b
+  2:72
+  1:9
+  0:b
 9 was unambiguous and still is
   $ hg l -r 9
   1:9
@@ -32,6 +38,6 @@ 
   [255]
 7b is no longer ambiguous
   $ hg l -r 7b
-  3:7ba57
+  3:7b
 
   $ cd ..
diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -489,6 +489,21 @@ 
             if not isrev(prefix):
                 return prefix
 
+    revset = repo.ui.config('experimental', 'revisions.disambiguatewithin')
+    if revset:
+        revs = repo.anyrevs([revset], user=True)
+        if cl.rev(node) in revs:
+            hexnode = hex(node)
+            for length in range(minlength, len(hexnode) + 1):
+                matches = []
+                prefix = hexnode[:length]
+                for rev in revs:
+                    otherhexnode = repo[rev].hex()
+                    if prefix == otherhexnode[:length]:
+                        matches.append(otherhexnode)
+                if len(matches) == 1:
+                    return disambiguate(prefix)
+
     try:
         return disambiguate(cl.shortest(node, minlength))
     except error.LookupError: