sapling/tests/test_fetch_mappings.py
Dirkjan Ochtman c9ba1e00a4 maps: make sure AuthorMaps don't overwrite themselves, fix overriding
Author maps for the Python repo got truncated because of the author map stupidly
writing upon itself. This patch implements a better and faster scenario, where
entries will only be written to the saved author map if they're not coming from that
file. They're also now streamed into the file directly, instead of having to re-open
the file on every entry, and formatting is preserved.
2009-06-15 16:09:27 +02:00

107 lines
4.2 KiB
Python

"""Tests for author maps and file maps.
"""
import os
import unittest
from mercurial import commands
from mercurial import ui
from mercurial import node
import test_util
from hgsubversion import maps
class MapTests(test_util.TestBase):
@property
def authors(self):
return os.path.join(self.tmpdir, 'authormap')
@property
def filemap(self):
return os.path.join(self.tmpdir, 'filemap')
def test_author_map(self, stupid=False):
test_util.load_svndump_fixture(self.repo_path, 'replace_trunk_with_branch.svndump')
authormap = open(self.authors, 'w')
authormap.write('Augie=Augie Fackler <durin42@gmail.com> # stuffy\n')
authormap.write("Augie Fackler <durin42@gmail.com>\n")
authormap.close()
_ui = ui.ui()
_ui.setconfig('hgsubversion', 'stupid', str(stupid))
_ui.setconfig('hgsubversion', 'authormap', self.authors)
commands.clone(_ui, test_util.fileurl(self.repo_path),
self.wc_path, authors=self.authors)
self.assertEqual(self.repo[0].user(),
'Augie Fackler <durin42@gmail.com>')
self.assertEqual(self.repo['tip'].user(),
'evil@5b65bade-98f3-4993-a01f-b7a6710da339')
def test_author_map_stupid(self):
self.test_author_map(True)
def test_author_map_closing_author(self, stupid=False):
test_util.load_svndump_fixture(self.repo_path, 'replace_trunk_with_branch.svndump')
authormap = open(self.authors, 'w')
authormap.write("evil=Testy <test@test>")
authormap.close()
_ui = ui.ui()
_ui.setconfig('hgsubversion', 'stupid', str(stupid))
_ui.setconfig('hgsubversion', 'authormap', self.authors)
commands.clone(_ui, test_util.fileurl(self.repo_path),
self.wc_path, authors=self.authors)
self.assertEqual(self.repo[0].user(),
'Augie@5b65bade-98f3-4993-a01f-b7a6710da339')
self.assertEqual(self.repo['tip'].user(),
'Testy <test@test>')
def test_author_map_closing_author_stupid(self):
self.test_author_map_closing_author(True)
def test_author_map_no_overwrite(self):
cwd = os.path.dirname(__file__)
orig = os.path.join(cwd, 'fixtures', 'author-map-test.txt')
new = open(self.authors, 'w')
new.write(open(orig).read())
new.close()
test = maps.AuthorMap(ui.ui(), self.authors)
fromself = set(test)
test.load(orig)
all = set(test)
self.assertEqual(fromself.symmetric_difference(all), set())
def test_file_map(self, stupid=False):
test_util.load_svndump_fixture(self.repo_path, 'replace_trunk_with_branch.svndump')
filemap = open(self.filemap, 'w')
filemap.write("include alpha\n")
filemap.close()
_ui = ui.ui()
_ui.setconfig('hgsubversion', 'stupid', str(stupid))
_ui.setconfig('hgsubversion', 'filemap', self.filemap)
commands.clone(_ui, test_util.fileurl(self.repo_path),
self.wc_path, filemap=self.filemap)
self.assertEqual(node.hex(self.repo[0].node()), '88e2c7492d83e4bf30fbb2dcbf6aa24d60ac688d')
self.assertEqual(node.hex(self.repo['default'].node()), 'e524296152246b3837fe9503c83b727075835155')
def test_file_map_stupid(self):
self.test_file_map(True)
def test_file_map_exclude(self, stupid=False):
test_util.load_svndump_fixture(self.repo_path, 'replace_trunk_with_branch.svndump')
filemap = open(self.filemap, 'w')
filemap.write("exclude alpha\n")
filemap.close()
_ui = ui.ui()
_ui.setconfig('hgsubversion', 'stupid', str(stupid))
_ui.setconfig('hgsubversion', 'filemap', self.filemap)
commands.clone(_ui, test_util.fileurl(self.repo_path),
self.wc_path, filemap=self.filemap)
self.assertEqual(node.hex(self.repo[0].node()), '2c48f3525926ab6c8b8424bcf5eb34b149b61841')
self.assertEqual(node.hex(self.repo['default'].node()), 'b37a3c0297b71f989064d9b545b5a478bbed7cc1')
def test_file_map_exclude_stupid(self):
self.test_file_map_exclude(True)
def suite():
return unittest.TestLoader().loadTestsFromTestCase(MapTests)