mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
c9ba1e00a4
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.
107 lines
4.2 KiB
Python
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)
|