revlog: adapt the `reading` check for `unionrepo`
We cannot just rely on the length check for the `unionrepo` as the local revlog
might be empty while the other revlog contains data. In addition, we need to
also open the second revlog for reading when needed.
import os
from mercurial import (
hg,
merge,
ui as uimod,
)
u = uimod.ui.load()
repo = hg.repository(u, b'test1', create=1)
os.chdir('test1')
def commit(text, time):
repo.commit(text=text, date=b"%d 0" % time)
def addcommit(name, time):
f = open(name, 'wb')
f.write(b'%s\n' % name)
f.close()
with repo.wlock():
with repo.dirstate.changing_files(repo):
repo[None].add([name])
commit(name, time)
def update(rev):
merge.clean_update(repo[rev])
def merge_(rev):
merge.merge(repo[rev])
if __name__ == '__main__':
addcommit(b"A", 0)
addcommit(b"B", 1)
update(0)
addcommit(b"C", 2)
merge_(1)
commit(b"D", 3)
update(2)
addcommit(b"E", 4)
addcommit(b"F", 5)
update(3)
addcommit(b"G", 6)
merge_(5)
commit(b"H", 7)
update(5)
addcommit(b"I", 8)
# Ancestors
print('Ancestors of 5')
for r in repo.changelog.ancestors([5]):
print(r, end=' ')
print('\nAncestors of 6 and 5')
for r in repo.changelog.ancestors([6, 5]):
print(r, end=' ')
print('\nAncestors of 5 and 4')
for r in repo.changelog.ancestors([5, 4]):
print(r, end=' ')
print('\nAncestors of 7, stop at 6')
for r in repo.changelog.ancestors([7], 6):
print(r, end=' ')
print('\nAncestors of 7, including revs')
for r in repo.changelog.ancestors([7], inclusive=True):
print(r, end=' ')
print('\nAncestors of 7, 5 and 3, including revs')
for r in repo.changelog.ancestors([7, 5, 3], inclusive=True):
print(r, end=' ')
# Descendants
print('\n\nDescendants of 5')
for r in repo.changelog.descendants([5]):
print(r, end=' ')
print('\nDescendants of 5 and 3')
for r in repo.changelog.descendants([5, 3]):
print(r, end=' ')
print('\nDescendants of 5 and 4')
print(*repo.changelog.descendants([5, 4]), sep=' ')