view tests/test-revlog-ancestry.py @ 47012:d55b71393907

node: replace nullid and friends with nodeconstants class The introduction of 256bit hashes require changes to nullid and other constant magic values. Start pushing them down from repository and revlog where sensible. Differential Revision: https://phab.mercurial-scm.org/D9465
author Joerg Sonnenberger <joerg@bec.de>
date Mon, 29 Mar 2021 01:52:06 +0200
parents 0e5e192adb6f
children 6000f5b25c9b
line wrap: on
line source

from __future__ import absolute_import, print_function
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()
    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=' ')