Esempio n. 1
0
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)
            ])
        )
Esempio n. 2
0
    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))
Esempio n. 3
0
 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')
         ]
     )
Esempio n. 4
0
 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))
Esempio n. 5
0
 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))
Esempio n. 6
0
 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))
Esempio n. 7
0
 def test_head(self):
     r = GitRepo(self._temp_repo)
     self.assertEquals(
         r.get_object('HEAD').id,
         self._head()
     )
Esempio n. 8
0
 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])
Esempio n. 9
0
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
Esempio n. 10
0
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
            ''')
            ]
        )
Esempio n. 11
0
 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))
Esempio n. 12
0
 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')
Esempio n. 13
0
 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')
Esempio n. 14
0
 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')
Esempio n. 15
0
 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))
Esempio n. 16
0
 def setUp(self):
     super(GitDiffTest, self).setUp()
     self._gitrepo = GitRepo(self._temp_repo)
     self.maxDiff = None
Esempio n. 17
0
 def test_valid_revision_branch(self):
     repo = GitRepo(self._temp_repo)
     revision = repo.get_revision('refs/heads/topic')
     self.assertTrue(repo.valid_revision(revision))
Esempio n. 18
0
 def test_invalid_revision(self):
     repo = GitRepo(self._temp_repo)
     revision = repo.get_revision('u mad')
     self.assertFalse(repo.valid_revision(revision))
Esempio n. 19
0
 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))
Esempio n. 20
0
 def setUp(self):
     super(GitFileTest, self).setUp()
     self._gitrepo = GitRepo(self._temp_repo)
Esempio n. 21
0
 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)
        )