diff mercurial/testing/storage.py @ 40387:f1a39128da95

filelog: add a hasnode() method (API) Missing in the file storage interface is the ability to query whether a specified value is a known node. This commit defines that interface member and implements it on the revlog and sqlite file stores. Storage unit tests have been added. The revlog implementation is a bit more complicated because index lookups don't consistently raise the same exception. For SQLite, we can simply look for a key in a dict. Differential Revision: https://phab.mercurial-scm.org/D5163
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 03 Oct 2018 14:57:29 -0700
parents 2c0aa02ecd5a
children 6a917075535a
line wrap: on
line diff
--- a/mercurial/testing/storage.py	Sun Oct 21 22:26:00 2018 -0400
+++ b/mercurial/testing/storage.py	Wed Oct 03 14:57:29 2018 -0700
@@ -45,6 +45,13 @@
         with self.assertRaises(StopIteration):
             next(gen)
 
+        self.assertFalse(f.hasnode(None))
+        self.assertFalse(f.hasnode(0))
+        self.assertFalse(f.hasnode(nullrev))
+        self.assertFalse(f.hasnode(nullid))
+        self.assertFalse(f.hasnode(b'0'))
+        self.assertFalse(f.hasnode(b'a' * 20))
+
         # revs() should evaluate to an empty list.
         self.assertEqual(list(f.revs()), [])
 
@@ -161,6 +168,13 @@
         with self.assertRaises(StopIteration):
             next(gen)
 
+        self.assertTrue(f.hasnode(node))
+        self.assertFalse(f.hasnode(hex(node)))
+        self.assertFalse(f.hasnode(nullrev))
+        self.assertFalse(f.hasnode(nullid))
+        self.assertFalse(f.hasnode(node[0:12]))
+        self.assertFalse(f.hasnode(hex(node)[0:20]))
+
         self.assertEqual(list(f.revs()), [0])
         self.assertEqual(list(f.revs(start=1)), [])
         self.assertEqual(list(f.revs(start=0)), [0])