git: make {shortest()} return shortest *unique* prefix
authorMartin von Zweigbergk <martinvonz@google.com>
Fri, 06 Mar 2020 14:14:05 -0800
changeset 44478 6d953b3fc2bd
parent 44477 ad718271a9eb
child 44479 7518ea76eff4
git: make {shortest()} return shortest *unique* prefix It used to return the prefix of the specified length as long as the full node was unique (i.e. always). Differential Revision: https://phab.mercurial-scm.org/D8256
hgext/git/gitlog.py
tests/test-git-interop.t
--- a/hgext/git/gitlog.py	Tue Feb 11 00:44:59 2020 -0500
+++ b/hgext/git/gitlog.py	Fri Mar 06 14:14:05 2020 -0800
@@ -170,7 +170,7 @@
             matches = int(
                 self._db.execute(
                     'SELECT COUNT(*) FROM changelog WHERE node LIKE ?',
-                    (pycompat.sysstr(nodehex + b'%'),),
+                    (pycompat.sysstr(candidate + b'%'),),
                 ).fetchone()[0]
             )
             if matches == 1:
--- a/tests/test-git-interop.t	Tue Feb 11 00:44:59 2020 -0500
+++ b/tests/test-git-interop.t	Fri Mar 06 14:14:05 2020 -0800
@@ -180,10 +180,6 @@
      summary:     Add beta
   
 
-node|shortest works correctly
-  $ hg log -r tip --template "{node|shortest}\n"
-  6626
-
 hg annotate
 
   $ hg annotate alpha
@@ -221,3 +217,15 @@
   nothing to commit, working tree clean
   $ hg status
 
+
+node|shortest works correctly
+  $ hg log -T '{node}\n' | sort
+  3d9be8deba43482be2c81a4cb4be1f10d85fa8bc
+  6626247b7dc8f231b183b8a4761c89139baca2ad
+  a1983dd7fb19cbd83ad5a1c2fc8bf3d775dea12f
+  ae1ab744f95bfd5b07cf573baef98a778058537b
+  c5864c9d16fb3431fe2c175ff84dc6accdbb2c18
+  d8ee22687733a1991813560b15128cd9734f4b48
+  $ hg log -r ae1ab744f95bfd5b07cf573baef98a778058537b --template "{shortest(node,1)}\n"
+  ae
+