/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tests/test_git_repository.py

Rewrite GitRepository._parse_rev, with unit tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 
33
33
 
34
34
class TestGitRepository(tests.TestCaseInTempDir):
 
35
    """Feature tests for GitRepository."""
35
36
 
36
37
    _test_needs_features = [tests.GitCommandFeature]
37
38
 
85
86
                         repo.get_revision_graph(bzr_revisions[3]))
86
87
 
87
88
    def test_get_revision(self):
88
 
        # Test that GitRepository.get_revision gives a Revision object.
 
89
        # GitRepository.get_revision gives a Revision object.
89
90
 
90
91
        # Create a git repository with a revision.
91
92
        tests.run_git('init')
92
93
        builder = tests.GitBranchBuilder()
93
 
        file_handle = builder.set_file('a', 'text for a\n', False)
 
94
        builder.set_file('a', 'text for a\n', False)
94
95
        commit_handle = builder.commit('Joe Foo <joe@foo.com>', u'message')
95
96
        mapping = builder.finish()
96
97
        commit_id = mapping[commit_handle]
100
101
        repo = repository.Repository.open('.')
101
102
        rev = repo.get_revision(revid)
102
103
        self.assertIsInstance(rev, revision.Revision)
 
104
 
 
105
 
 
106
class TestGitRepositoryParseRev(tests.TestCase):
 
107
    """Unit tests for GitRepository._parse_rev."""
 
108
 
 
109
    def test_base_commit(self):
 
110
        # GitRepository._parse_rev works for a simple base commit.
 
111
        rev = git_repository.GitRepository._parse_rev([
 
112
            "873a8ae0d682b0e63e9795bc53056d32ed3de93f\n",
 
113
            "tree aaff74984cccd156a469afa7d9ab10e4777beb24\n",
 
114
            "author Jane Bar <jane@bar.com> 1198784533 +0200\n",
 
115
            "committer Joe Foo <joe@foo.com> 1198784532 +0100\n",
 
116
            "\n",
 
117
            "    message\n",
 
118
            "\x00"])
 
119
        self.assertEqual(
 
120
            rev.revision_id, 'git1r-873a8ae0d682b0e63e9795bc53056d32ed3de93f')
 
121
        self.assertEqual(rev.parent_ids, [])
 
122
        self.assertEqual(rev.committer, 'Joe Foo <joe@foo.com>')
 
123
        self.assertEqual(rev.timestamp, 1198784532.0)
 
124
        self.assertEqual(rev.timezone, '+0100')
 
125
        self.assertEqual(rev.message, 'message\n')
 
126
        self.assertEqual(
 
127
            rev.properties,
 
128
            {'git-tree-id': 'aaff74984cccd156a469afa7d9ab10e4777beb24',
 
129
             'author': 'Jane Bar <jane@bar.com>',
 
130
             'git-author-timestamp': '1198784533',
 
131
             'git-author-timezone': '+0200'})
 
132
 
 
133
    def test_merge_commit(self):
 
134
        # Multi-parent commits (merges) are parsed correctly.
 
135
        rev = git_repository.GitRepository._parse_rev([
 
136
            "873a8ae0d682b0e63e9795bc53056d32ed3de93f\n",
 
137
            "tree aaff74984cccd156a469afa7d9ab10e4777beb24\n",
 
138
            "parent 263ed20f0d4898be994404ca418bafe8e89abb8a\n",
 
139
            "parent 546563eb8f3e94a557f3bb779b6e5a2bd9658752\n",
 
140
            "parent 3116d42db7b5c5e69e58f651721e179791479c23\n",
 
141
            "author Jane Bar <jane@bar.com> 1198784533 +0200\n",
 
142
            "committer Joe Foo <joe@foo.com> 1198784532 +0100\n",
 
143
            "\n",
 
144
            "    message\n",
 
145
            "\x00"])
 
146
        # Git records merges in the same way as bzr. The first parent is the
 
147
        # commit base, the following parents are the ordered merged revisions.
 
148
        self.assertEqual(
 
149
            rev.parent_ids,
 
150
            ['git1r-263ed20f0d4898be994404ca418bafe8e89abb8a',
 
151
             'git1r-546563eb8f3e94a557f3bb779b6e5a2bd9658752',
 
152
             'git1r-3116d42db7b5c5e69e58f651721e179791479c23'])
 
153
 
 
154
    def test_redundant_spaces(self):
 
155
        # Redundant spaces in author and committer are preserved.
 
156
        rev = git_repository.GitRepository._parse_rev([
 
157
            "873a8ae0d682b0e63e9795bc53056d32ed3de93f\n",
 
158
            "tree aaff74984cccd156a469afa7d9ab10e4777beb24\n",
 
159
            "author  Jane  Bar  <jane@bar.com>  1198784533 +0200\n",
 
160
            "committer  Joe  Foo  <joe@foo.com>  1198784532 +0100\n",
 
161
            "\n",
 
162
            "    message\n",
 
163
            "\x00"])
 
164
        self.assertEqual(rev.committer, ' Joe  Foo  <joe@foo.com> ')
 
165
        self.assertEqual(
 
166
            rev.properties['author'], ' Jane  Bar  <jane@bar.com> ')
 
167
 
 
168
    def test_no_committer(self):
 
169
        # If committer is not set, then author is used.
 
170
        #
 
171
        # Folks in #git say that git fsck would likely accept commits that do
 
172
        # not set committer, but that author is a mandatory value.
 
173
        rev = git_repository.GitRepository._parse_rev([
 
174
            "873a8ae0d682b0e63e9795bc53056d32ed3de93f\n",
 
175
            "tree aaff74984cccd156a469afa7d9ab10e4777beb24\n",
 
176
            "author Jane Bar <jane@bar.com> 1198784533 +0200\n",
 
177
            "\n",
 
178
            "    message\n",
 
179
            "\x00"])
 
180
        self.assertEqual(rev.committer, 'Jane Bar <jane@bar.com>')
 
181
        self.assertEqual(rev.timestamp, 1198784533.0)
 
182
        self.assertEqual(rev.timezone, '+0200')
 
183
        self.assertEqual(rev.properties['author'], 'Jane Bar <jane@bar.com>')
 
184
        self.assertEqual(rev.properties['git-author-timestamp'], '1198784533')
 
185
        self.assertEqual(rev.properties['git-author-timezone'], '+0200')