Mercurial > hg
view tests/test-filelog.py @ 46495:5aac1a1a5beb
tagcache: distinguish between invalid and missing entries
The TortoiseHg repo has typically not had a newly applied tag accessible by name
for recent releases, for unknown reasons. Deleting and rebuilding the tag cache
doesn't fix it, though deleting the cache and running `hg log -r $new_tag` does.
Eventually the situation does sort itself out for new clones from the server.
In an effort to figure out what the issue is, Pierre-Yves David suggested
listing these entries in the debug output more specifically.
This isn't complete yet- the second test change that says "missing" is more like
"invalid", since it was truncated. The problem there is the code that reads the
raw array truncates any partial records and then fills it with 0xFF, which
signifies that it is missing. As a side note, that means the check for the
length when validating an existing entry never fails.
Differential Revision: https://phab.mercurial-scm.org/D9811
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 24 Dec 2020 11:21:23 -0500 |
parents | c102b704edb5 |
children | d55b71393907 |
line wrap: on
line source
#!/usr/bin/env python3 """ Tests the behavior of filelog w.r.t. data starting with '\1\n' """ from __future__ import absolute_import, print_function from mercurial.node import ( hex, nullid, ) from mercurial import ( hg, ui as uimod, ) myui = uimod.ui.load() repo = hg.repository(myui, path=b'.', create=True) fl = repo.file(b'foobar') def addrev(text, renamed=False): if renamed: # data doesn't matter. Just make sure filelog.renamed() returns True meta = {b'copyrev': hex(nullid), b'copy': b'bar'} else: meta = {} lock = t = None try: lock = repo.lock() t = repo.transaction(b'commit') node = fl.add(text, meta, t, 0, nullid, nullid) return node finally: if t: t.close() if lock: lock.release() def error(text): print('ERROR: ' + text) textwith = b'\1\nfoo' without = b'foo' node = addrev(textwith) if not textwith == fl.read(node): error('filelog.read for data starting with \\1\\n') if fl.cmp(node, textwith) or not fl.cmp(node, without): error('filelog.cmp for data starting with \\1\\n') if fl.size(0) != len(textwith): error( 'FIXME: This is a known failure of filelog.size for data starting ' 'with \\1\\n' ) node = addrev(textwith, renamed=True) if not textwith == fl.read(node): error('filelog.read for a renaming + data starting with \\1\\n') if fl.cmp(node, textwith) or not fl.cmp(node, without): error('filelog.cmp for a renaming + data starting with \\1\\n') if fl.size(1) != len(textwith): error('filelog.size for a renaming + data starting with \\1\\n') print('OK.')