view tests/test_startrev.py @ 820:09f7c1c09207

authormap: only append new or changed authors Previously, specifying an extra authormap with the hgsubversion.authormap configuration variable would cause the entirety of the other authormap to be appended to the one in '.hg/svn/authors' on each subversion access (e.g. hg in/out/pull/push). This also changes the authormap to preserve comments and the like in the authormap file.
author maugustin <maugustin@gmx.net>
date Sat, 23 Jul 2011 19:33:50 -0500
parents d101b39f6c51
children e9af7eba88db
line wrap: on
line source

import test_util

import os
import unittest

def _do_case(self, name, subdir, stupid):
    wc_base = self.wc_path
    self.wc_path = wc_base + '_full'
    headclone = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid,
                                             layout='single', startrev='HEAD')
    self.wc_path = wc_base + '_head'
    fullclone = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid,
                                             layout='single')

    fulltip = fullclone['tip']
    headtip = headclone['tip']
    # viewing diff's of lists of files is easier on the eyes
    self.assertMultiLineEqual('\n'.join(fulltip), '\n'.join(headtip))

    for f in fulltip:
        self.assertMultiLineEqual(fulltip[f].data(), headtip[f].data())

    self.assertNotEqual(len(fullclone), 0, "full clone shouldn't be empty")
    self.assertEqual(len(headclone), 1,
                     "shallow clone should have just one revision, not %d"
                     % len(headclone))

def buildmethod(case, name, subdir, stupid):
    m = lambda self: self._do_case(case, subdir.strip('/'), stupid)
    m.__name__ = name
    m.__doc__ = ('Test clone with startrev on %s%s with %s replay.' %
                 (case, subdir, (stupid and 'stupid') or 'real'))
    return m


# these fixtures contain no files at HEAD and would result in empty clones
nofiles = set([
    'binaryfiles.svndump',
    'emptyrepo.svndump',
])

# these fixtures contain no files in trunk at HEAD and would result in an empty
# shallow clone if cloning trunk, so we use another subdirectory
subdirmap = {
    'commit-to-tag.svndump': '/branches/magic',
    'pushexternals.svndump': '',
    'tag_name_same_as_branch.svndump': '/branches/magic',
}

attrs = {'_do_case': _do_case,
         }

for case in [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]:
    if case in nofiles:
        continue

    subdir = test_util.subdir.get(case, '') + subdirmap.get(case, '/trunk')

    bname = 'test_' + case[:-len('.svndump')]
    attrs[bname] = buildmethod(case, bname, subdir, False)
    name = bname + '_stupid'
    attrs[name] = buildmethod(case, name, subdir, True)

StartRevTests = type('StartRevTests', (test_util.TestBase, ), attrs)


def suite():
    all = [unittest.TestLoader().loadTestsFromTestCase(StartRevTests),
          ]
    return unittest.TestSuite(all)