tests/test-walkrepo.py
author Brodie Rao <brodie@bitheap.org>
Tue, 07 Dec 2010 19:47:53 +1100
branchstable
changeset 13102 2956945c3bee
parent 8656 284fda4cd093
child 13975 938fbeacac84
permissions -rw-r--r--
archival: don't set gzip filename header when there's no filename This mainly affects hgweb, which can generate tar.gz archives without filenames. Without this change, the header would be set to ".gz", which can confuse Safari into extracting the file and renaming it to "gz" when "Open 'safe' files after downloading" is enabled. file(1) before: hg-crew-5e51254ad4d4.tar.gz: gzip compressed data, was ".gz", last modified: Thu Dec 2 11:46:20 2010, max compression after: hg-crew-5e51254ad4d4.tar.gz: gzip compressed data, last modified: Thu Dec 2 11:46:20 2010, max compression

import os
from mercurial import hg, ui
from mercurial.util import walkrepos
from os import mkdir, chdir
from os.path import join as pjoin

u = ui.ui()
sym = hasattr(os, 'symlink') and hasattr(os.path, 'samestat')

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 "sub1set and reposet should have exactly one path in common."
    sub3 = pjoin('.', 'circle', 'top1')
    if sym and not (sub3 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()