mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
dd91b969e6
Summary: This diff implements some simple linkrev database classes which uses dbm to store linkrev candidates. Why not sqlite? sqlite's insertion seems to be much slower with index being present, so we have to do manual buffering and do insertion in batch, not to say parsing SQL itself can introduce overhead. If we really want sqlite for some reason (i.e. its support for concurrent writer and reader seems to be better), we can still implement it as a dbm engine. Test Plan: A test will be added when there is something usable. Reviewers: #sourcecontrol, stash Reviewed By: stash Subscribers: jsgf, stash, mjpieters Differential Revision: https://phabricator.intern.facebook.com/D4143119 Signature: t1:4143119:1479131795:5f6e368ebd1798b874cec28ac05b137eb3bea86e
54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
from __future__ import absolute_import, print_function
|
|
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
|
|
# make it runnable using python directly without run-tests.py
|
|
sys.path[0:0] = [os.path.join(os.path.dirname(__file__), '..', 'hgext3rd')]
|
|
|
|
import linkrevcache
|
|
|
|
def genhsh(i):
|
|
return chr(i) + b'\0' * 19
|
|
|
|
def ensure(condition):
|
|
if not condition:
|
|
raise RuntimeError('Unexpected')
|
|
|
|
def testbasicreadwrite():
|
|
path = tempfile.mkdtemp()
|
|
db = linkrevcache.linkrevdb(path, write=True)
|
|
|
|
ensure(db.getlastrev() == 0)
|
|
for i in xrange(25):
|
|
fname = str(i % 5)
|
|
fnode = genhsh(i // 5)
|
|
ensure(db.getlinkrevs(fname, fnode) == [])
|
|
db.appendlinkrev(fname, fnode, i)
|
|
ensure(db.getlinkrevs(fname, fnode) == [i])
|
|
db.appendlinkrev(fname, fnode, i)
|
|
db.appendlinkrev(fname, fnode, i + 1)
|
|
db.appendlinkrev(fname, fnode, i)
|
|
ensure(db.getlinkrevs(fname, fnode) == [i, i + 1])
|
|
|
|
db.setlastrev(i)
|
|
ensure(db.getlastrev() == i)
|
|
|
|
db.close()
|
|
|
|
# re-open for reading
|
|
db = linkrevcache.linkrevdb(path)
|
|
ensure(db.getlastrev() == 24)
|
|
for i in xrange(25):
|
|
fname = str(i % 5)
|
|
fnode = genhsh(i // 5)
|
|
ensure(db.getlinkrevs(fname, fnode) == [i, i + 1])
|
|
|
|
for i in xrange(26, 50):
|
|
fname = str(i % 5)
|
|
fnode = genhsh(i // 5)
|
|
ensure(db.getlinkrevs(fname, fnode) == [])
|
|
|
|
testbasicreadwrite()
|