from __future__ import absolute_import, print_function

import os

from edenscm.mercurial import hg, scmutil, ui as uimod, util
from hghave import require


chdir = os.chdir
mkdir = os.mkdir
pjoin = os.path.join

walkrepos = scmutil.walkrepos
checklink = util.checklink

u = uimod.ui.load()
sym = checklink(".")

hg.repository(u, "top1", create=1)
mkdir("subdir")
chdir("subdir")
hg.repository(u, "sub1", create=1)
mkdir("subsubdir")
chdir("subsubdir")
hg.repository(u, "subsub1", create=1)
chdir(os.path.pardir)
if sym:
    os.symlink(os.path.pardir, "circle")
    os.symlink(pjoin("subsubdir", "subsub1"), "subsub1")


def runtest():
    reposet = frozenset(walkrepos(".", followsym=True))
    if sym and (len(reposet) != 3):
        print("reposet = %r" % (reposet,))
        print(("Found %d repositories when I should have found 3" % (len(reposet),)))
    if (not sym) and (len(reposet) != 2):
        print("reposet = %r" % (reposet,))
        print(("Found %d repositories when I should have found 2" % (len(reposet),)))
    sub1set = frozenset((pjoin(".", "sub1"), pjoin(".", "circle", "subdir", "sub1")))
    if len(sub1set & reposet) != 1:
        print("sub1set = %r" % (sub1set,))
        print("reposet = %r" % (reposet,))
        print("sub1set and reposet should have exactly one path in common.")
    sub2set = frozenset((pjoin(".", "subsub1"), pjoin(".", "subsubdir", "subsub1")))
    if len(sub2set & reposet) != 1:
        print("sub2set = %r" % (sub2set,))
        print("reposet = %r" % (reposet,))
        print("sub2set and reposet should have exactly one path in common.")
    sub3 = pjoin(".", "circle", "top1")
    if sym and sub3 not in reposet:
        print("reposet = %r" % (reposet,))
        print("Symbolic links are supported and %s is not in reposet" % (sub3,))


runtest()
if sym:
    # Simulate not having symlinks.
    del os.path.samestat
    sym = False
    runtest()
