Index: tests/git_common_test.py |
diff --git a/tests/git_common_test.py b/tests/git_common_test.py |
index 76a91520dcee4ec73a67d31385725665ac6be6c0..117fc93c38e33164f5e095dbf84789fcb11bb681 100755 |
--- a/tests/git_common_test.py |
+++ b/tests/git_common_test.py |
@@ -176,15 +176,15 @@ class GitReadOnlyFunctionsTest(git_test_utils.GitRepoReadOnlyTestBase, |
COMMIT_C = { |
'some/files/file2': { |
'mode': 0755, |
- 'data': 'file2 - vanilla'}, |
+ 'data': 'file2 - vanilla\n'}, |
} |
COMMIT_E = { |
- 'some/files/file2': {'data': 'file2 - merged'}, |
+ 'some/files/file2': {'data': 'file2 - merged\n'}, |
} |
COMMIT_D = { |
- 'some/files/file2': {'data': 'file2 - vanilla\nfile2 - merged'}, |
+ 'some/files/file2': {'data': 'file2 - vanilla\nfile2 - merged\n'}, |
} |
def testHashes(self): |
@@ -259,6 +259,40 @@ class GitReadOnlyFunctionsTest(git_test_utils.GitRepoReadOnlyTestBase, |
self.repo.git('config', 'branch.master.dormant', 'true') |
self.assertTrue(self.repo.run(self.gc.is_dormant, 'master')) |
+ def testBlame(self): |
+ def get_porcelain_for_commit(commit_name, lines): |
+ format_string = ('%H {}\nauthor %an\nauthor-mail <%ae>\nauthor-time %at\n' |
+ 'author-tz +0000\ncommitter %cn\ncommitter-mail <%ce>\n' |
+ 'committer-time %ct\ncommitter-tz +0000\nsummary {}') |
+ format_string = format_string.format(lines, commit_name) |
+ info = self.repo.show_commit(commit_name, format_string=format_string) |
+ return info.split('\n') |
+ |
+ # Expect to blame line 1 on C, line 2 on E. |
+ c_short = self.repo['C'][:8] |
+ c_author = self.repo.show_commit('C', format_string='%an %ai') |
+ e_short = self.repo['E'][:8] |
+ e_author = self.repo.show_commit('E', format_string='%an %ai') |
+ expected_output = ['%s (%s 1) file2 - vanilla' % (c_short, c_author), |
+ '%s (%s 2) file2 - merged' % (e_short, e_author)] |
+ self.assertEqual(expected_output, |
+ self.repo.run(self.gc.blame, 'some/files/file2', |
+ 'tag_D').split('\n')) |
+ |
+ # Test porcelain. |
+ expected_output = [] |
+ expected_output.extend(get_porcelain_for_commit('C', '1 1 1')) |
+ expected_output.append('previous %s some/files/file2' % self.repo['B']) |
+ expected_output.append('filename some/files/file2') |
+ expected_output.append('\tfile2 - vanilla') |
+ expected_output.extend(get_porcelain_for_commit('E', '1 2 1')) |
+ expected_output.append('previous %s some/files/file2' % self.repo['B']) |
+ expected_output.append('filename some/files/file2') |
+ expected_output.append('\tfile2 - merged') |
+ self.assertEqual(expected_output, |
+ self.repo.run(self.gc.blame, 'some/files/file2', |
+ 'tag_D', porcelain=True).split('\n')) |
+ |
def testParseCommitrefs(self): |
ret = self.repo.run( |
self.gc.parse_commitrefs, *[ |
@@ -280,6 +314,17 @@ class GitReadOnlyFunctionsTest(git_test_utils.GitRepoReadOnlyTestBase, |
with self.assertRaisesRegexp(Exception, r"one of \('master', 'bananas'\)"): |
self.repo.run(self.gc.parse_commitrefs, 'master', 'bananas') |
+ def testRepoRoot(self): |
+ def cd_and_repo_root(path): |
+ print(os.getcwd()) |
+ os.chdir(path) |
+ return self.gc.repo_root() |
+ |
+ self.assertEqual(self.repo.repo_path, self.repo.run(self.gc.repo_root)) |
+ # cd to a subdirectory; repo_root should still return the root dir. |
+ self.assertEqual(self.repo.repo_path, |
+ self.repo.run(cd_and_repo_root, 'some/files')) |
+ |
def testTags(self): |
self.assertEqual(set(self.repo.run(self.gc.tags)), |
{'tag_'+l for l in 'ABCDE'}) |