class GitTreeTest(StandardFixturesMixin, TempGitRepoTest): def setUp(self): super(GitTreeTest, self).setUp() self._gitrepo = GitRepo(self._temp_repo) def test_path(self): revision = GitRevision('refs/heads/topic', self._gitrepo) tree = self._gitrepo.tree_at_revision('dir_1', revision) self.assertEquals(tree.path, 'dir_1') def test_revision(self): revision = GitRevision('refs/heads/topic', self._gitrepo) tree = self._gitrepo.tree_at_revision('dir_1', revision) self.assertEquals(tree.revision, revision) def test_items(self): revision = GitRevision('refs/heads/master', self._gitrepo) tree = self._gitrepo.tree_at_revision('', revision) self.assertEquals( set([item.path for item in tree.items()]), set(['file_1', 'file_2', 'file_\xe2\x98\x83']) ) def test_items_types(self): revision = GitRevision('refs/heads/topic', self._gitrepo) tree = self._gitrepo.tree_at_revision('', revision) self.assertEquals( set([(item.path, type(item)) for item in tree.items()]), set([ ('file_1', GitFile), ('file_2', GitFile), ('dir_1', GitTree) ]) )
def test_diff_revisions(self): r = GitRepo(self._temp_repo) a = GitRevision('refs/heads/topic', r) b = GitRevision('refs/heads/master', r) diff = r.diff_revisions(a, b) self.assertTrue(isinstance(diff, GitDiff))
def test_iter_revisions(self): return r = GitRepo(self._temp_repo) revisions = r.iter_revisions('refs/heads/master') self.assertEquals( [(commit.id, commit.message) for commit in revisions], [(self._commits[u'commit #7 on master\n\n\u2603'], 'commit #7 on master\n\n\xe2\x98\x83\n'), (self._commits['Merge branch bugfix into master'], "Merge branch 'bugfix'\n"), (self._commits['commit #5 on bugfix'], 'commit #5 on bugfix\n'), (self._commits['commit #3 on master'], 'commit #3 on master\n'), (self._commits['commit #2 on master'], 'commit #2 on master\n'), (self._commits['commit #1 on master'], 'commit #1 on master\n') ] )
def test_path_at_revision_root(self): r = GitRepo(self._temp_repo) f = r.path_at_revision('', GitRevision('refs/heads/master', r)) self.assertTrue(isinstance(f, GitTree))
def test_path_at_revision_file(self): r = GitRepo(self._temp_repo) f = r.path_at_revision('file_1', GitRevision('refs/heads/master', r)) self.assertTrue(isinstance(f, GitFile))
def test_tree_at_revision(self): r = GitRepo(self._temp_repo) tree = r.tree_at_revision('', GitRevision('refs/heads/master', r)) self.assertTrue(isinstance(tree, GitTree))
def test_head(self): r = GitRepo(self._temp_repo) self.assertEquals( r.get_object('HEAD').id, self._head() )
def test_pretty_revision_sha(self): r = GitRepo(self._temp_repo) rev = r.get_revision(self._commits['commit #2 on master']) pr = GitRepo.pretty_revision(rev) self.assertEquals(pr, self._commits['commit #2 on master'][:7])
class GitFileTest(StandardFixturesMixin, TempGitRepoTest): def setUp(self): super(GitFileTest, self).setUp() self._gitrepo = GitRepo(self._temp_repo) def test_path(self): revision = GitRevision('refs/heads/master', self._gitrepo) f = self._gitrepo.file_at_revision('file_1', revision) self.assertEquals( f.path, 'file_1' ) def test_type(self): f = self._gitrepo.file_at_revision( 'dir_1/file_3', GitRevision(self._commits['Merge branch bugfix into master'], self._gitrepo) ) self.assertEquals(type(f), GitFile) def test_latest_revision(self): revision = GitRevision(self._commits['commit #6 on topic'], self._gitrepo) f = self._gitrepo.file_at_revision('dir_1/file_3', revision) self.assertEquals(revision.id, f.last_modified_revision.id) def test_mimetype(self): revision = GitRevision('refs/heads/master', self._gitrepo) f = self._gitrepo.file_at_revision('file_2', revision) self.assertEquals( f.mimetype[:10], 'text/plain' ) def test_file_data(self): revision = GitRevision('refs/heads/master', self._gitrepo) f = self._gitrepo.file_at_revision('file_1', revision) self.assertEquals( f.data, textwrap.dedent('''\ first line second line third line''') ) def test_last_modified_message(self): """We know that 'file_1' was last modified as part of 'commit #3...' but that 'refs/heads/master' points to a more recent commit""" revision = GitRevision('refs/heads/master', self._gitrepo) f = self._gitrepo.file_at_revision('file_1', revision) self.assertEquals( f.last_modified_revision.message, 'commit #3 on master\n' ) def test_file_chunked(self): revision = GitRevision('refs/heads/master', self._gitrepo) f = self._gitrepo.file_at_revision('file_1', revision) self.assertEquals( f.chunked, ['first line\nsecond line\nthird line',], ) def test_no_file_at_revision(self): with self.assertRaises(NoPathAtRevision): f = self._gitrepo.file_at_revision( 'file_3', GitRevision(self._commits['commit #1 on master'], self._gitrepo) ) # touch the repo in some way f.blob
class GitDiffTest(StandardFixturesMixin, TempGitRepoTest): def setUp(self): super(GitDiffTest, self).setUp() self._gitrepo = GitRepo(self._temp_repo) self.maxDiff = None def test_common_ancestor_typical(self): """Test typical usage of the method where b was branched from a""" a = GitRevision('refs/heads/master', self._gitrepo) b = GitRevision('refs/heads/topic', self._gitrepo) self.assertEquals( self._gitrepo._common_ancestor(a.id, b.id), self._commits['commit #3 on master'] ) def test_common_ancestor_reverse(self): """Testing the same thing, but a was branched from b. Result should be the same as test_common_ancestor_typical""" a = GitRevision('refs/heads/topic', self._gitrepo) b = GitRevision('refs/heads/master', self._gitrepo) self.assertEquals( self._gitrepo._common_ancestor(a.id, b.id), self._commits['commit #3 on master'] ) def test_common_ancestor_initial_commit(self): self.assertEquals( self._gitrepo._common_ancestor( self._commits['commit #1 on master'], self._commits['commit #2 on master'] ), self._commits['commit #1 on master'] ) def test_common_ancestor_same_commit(self): self.assertEquals( self._gitrepo._common_ancestor( self._commits['commit #3 on master'], self._commits['commit #3 on master'] ), self._commits['commit #3 on master'] ) def test_diff_revisions_output(self): a = GitRevision('refs/heads/topic', self._gitrepo) b = GitRevision('refs/heads/master', self._gitrepo) diff = self._gitrepo.diff_revisions(a, b) unified_diff = [ud[1] for ud in diff.unified_diff()] self.assertEquals( unified_diff, [ textwrap.dedent('''\ diff --git a/dir_1/file_3 /dev/null deleted mode 100644 index da2940c..0000000 --- a/dir_1/file_3 +++ /dev/null @@ -1,7 +1,0 @@ -first line -second line - - - - -seventh line \\ No newline at end of file ''' ), textwrap.dedent('''\ diff --git a/file_2 b/file_2 index 9a2973f..fa58e34 100644 --- a/file_2 +++ b/file_2 @@ -1,4 +1,3 @@ line one line two -line three -line four \\ No newline at end of file +line three \\ No newline at end of file ''' ), textwrap.dedent('''\ diff --git /dev/null b/file_\xe2\x98\x83 new mode 100644 index 0000000..0d7e5f8 100644 --- /dev/null +++ b/file_\xe2\x98\x83 @@ -1,0 +1,1 @@ +\xe2\x98\x83 \\ No newline at end of file ''') ] )
def test_valid_revision_sha(self): repo = GitRepo(self._temp_repo) revision = repo.get_revision(self._commits['commit #3 on master']) self.assertTrue(repo.valid_revision(revision))
def test_pretty_no_such_revision(self): r = GitRepo(self._temp_repo) rev = r.get_revision('refs/codereview/foo/bar') pr = GitRepo.pretty_revision(rev) self.assertEquals(pr, 'refs/codereview/foo/bar')
def test_pretty_revision_tag(self): r = GitRepo(self._temp_repo) rev = r.get_revision('refs/tags/0.1') pr = GitRepo.pretty_revision(rev) self.assertEquals(pr, '0.1')
def test_pretty_revision_branch(self): r = GitRepo(self._temp_repo) rev = r.get_revision('refs/heads/master') pr = GitRepo.pretty_revision(rev) self.assertEquals(pr, 'master')
def test_path_at_revision_trailing_slash(self): r = GitRepo(self._temp_repo) f = r.path_at_revision('dir_1/', GitRevision('refs/heads/topic', r)) self.assertTrue(isinstance(f, GitTree))
def setUp(self): super(GitDiffTest, self).setUp() self._gitrepo = GitRepo(self._temp_repo) self.maxDiff = None
def test_valid_revision_branch(self): repo = GitRepo(self._temp_repo) revision = repo.get_revision('refs/heads/topic') self.assertTrue(repo.valid_revision(revision))
def test_invalid_revision(self): repo = GitRepo(self._temp_repo) revision = repo.get_revision('u mad') self.assertFalse(repo.valid_revision(revision))
def test_invalid_revision_confusing_mix(self): repo = GitRepo(self._temp_repo) revision = repo.get_revision('refs/heads/master/And I think so') self.assertFalse(repo.valid_revision(revision))
def setUp(self): super(GitFileTest, self).setUp() self._gitrepo = GitRepo(self._temp_repo)
def test_no_path_at_revision(self): r = GitRepo(self._temp_repo) with self.assertRaises(NoPathAtRevision): f = r.path_at_revision( 'dir_10/file_foo', GitRevision('refs/heads/topic', r) )