git: decode node IDs back into Python strings (issue6349)
authorHollis Blanchard <hollis_blanchard@mentor.com>
Tue, 09 Jun 2020 13:18:21 -0700
changeset 44946 fb2936c5f6dc
parent 44945 7a0a1be721a3
child 44947 ad6971e6740c
git: decode node IDs back into Python strings (issue6349) db.text_factory = bytes, so the database contains only strings. The object IDs we get from pygit2 are Python strings. b'foo' != 'foo' This change allows the "don't reindex" optimization to work by allowing the "cur_cache_heads == cache_heads" comparison a few lines down to succeed. Differential Revision: https://phab.mercurial-scm.org/D8622
hgext/git/index.py
--- a/hgext/git/index.py	Tue Jun 09 22:02:09 2020 +0530
+++ b/hgext/git/index.py	Tue Jun 09 13:18:21 2020 -0700
@@ -245,7 +245,10 @@
     # TODO: we should figure out how to incrementally index history
     # (preferably by detecting rewinds!) so that we don't have to do a
     # full changelog walk every time a new commit is created.
-    cache_heads = {x[0] for x in db.execute('SELECT node FROM possible_heads')}
+    cache_heads = {
+        pycompat.sysstr(x[0])
+        for x in db.execute('SELECT node FROM possible_heads')
+    }
     walker = None
     cur_cache_heads = {h.hex for h in possible_heads}
     if cur_cache_heads == cache_heads: