/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.64.349 by Jelmer Vernooij
Reimport some modules removed from python-fastimport 0.9.2.
1
# Copyright (C) 2009 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16
"""Test tracking of heads"""
17
6628.1.2 by Jelmer Vernooij
Fix imports, move exporter.py, drop explorer metadata.
18
from __future__ import absolute_import
19
6791.2.3 by Jelmer Vernooij
Fix more imports.
20
from ....sixish import StringIO
0.64.349 by Jelmer Vernooij
Reimport some modules removed from python-fastimport 0.9.2.
21
22
from fastimport import (
23
    commands,
24
    parser,
25
    )
26
27
import testtools
28
6628.1.2 by Jelmer Vernooij
Fix imports, move exporter.py, drop explorer metadata.
29
from .reftracker import (
0.64.349 by Jelmer Vernooij
Reimport some modules removed from python-fastimport 0.9.2.
30
    RefTracker,
31
    )
32
33
34
# A sample input stream that only adds files to a branch
35
_SAMPLE_MAINLINE = \
36
"""blob
37
mark :1
38
data 9
39
Welcome!
40
commit refs/heads/master
41
mark :100
42
committer a <b@c> 1234798653 +0000
43
data 4
44
test
45
M 644 :1 doc/README.txt
46
blob
47
mark :2
48
data 17
49
Life
50
is
51
good ...
52
commit refs/heads/master
53
mark :101
54
committer a <b@c> 1234798653 +0000
55
data 8
56
test
57
ing
58
from :100
59
M 644 :2 NEWS
60
blob
61
mark :3
62
data 19
63
Welcome!
64
my friend
65
blob
66
mark :4
67
data 11
68
== Docs ==
69
commit refs/heads/master
70
mark :102
71
committer d <b@c> 1234798653 +0000
72
data 8
73
test
74
ing
75
from :101
76
M 644 :3 doc/README.txt
77
M 644 :4 doc/index.txt
78
"""
79
80
# A sample input stream that adds files to two branches
81
_SAMPLE_TWO_HEADS = \
82
"""blob
83
mark :1
84
data 9
85
Welcome!
86
commit refs/heads/master
87
mark :100
88
committer a <b@c> 1234798653 +0000
89
data 4
90
test
91
M 644 :1 doc/README.txt
92
blob
93
mark :2
94
data 17
95
Life
96
is
97
good ...
98
commit refs/heads/mybranch
99
mark :101
100
committer a <b@c> 1234798653 +0000
101
data 8
102
test
103
ing
104
from :100
105
M 644 :2 NEWS
106
blob
107
mark :3
108
data 19
109
Welcome!
110
my friend
111
blob
112
mark :4
113
data 11
114
== Docs ==
115
commit refs/heads/master
116
mark :102
117
committer d <b@c> 1234798653 +0000
118
data 8
119
test
120
ing
121
from :100
122
M 644 :3 doc/README.txt
123
M 644 :4 doc/index.txt
124
"""
125
126
# A sample input stream that adds files to two branches
127
_SAMPLE_TWO_BRANCHES_MERGED = \
128
"""blob
129
mark :1
130
data 9
131
Welcome!
132
commit refs/heads/master
133
mark :100
134
committer a <b@c> 1234798653 +0000
135
data 4
136
test
137
M 644 :1 doc/README.txt
138
blob
139
mark :2
140
data 17
141
Life
142
is
143
good ...
144
commit refs/heads/mybranch
145
mark :101
146
committer a <b@c> 1234798653 +0000
147
data 8
148
test
149
ing
150
from :100
151
M 644 :2 NEWS
152
blob
153
mark :3
154
data 19
155
Welcome!
156
my friend
157
blob
158
mark :4
159
data 11
160
== Docs ==
161
commit refs/heads/master
162
mark :102
163
committer d <b@c> 1234798653 +0000
164
data 8
165
test
166
ing
167
from :100
168
M 644 :3 doc/README.txt
169
M 644 :4 doc/index.txt
170
commit refs/heads/master
171
mark :103
172
committer d <b@c> 1234798653 +0000
173
data 8
174
test
175
ing
176
from :102
177
merge :101
178
D doc/index.txt
179
"""
180
181
# A sample input stream that contains a reset
182
_SAMPLE_RESET = \
183
"""blob
184
mark :1
185
data 9
186
Welcome!
187
commit refs/heads/master
188
mark :100
189
committer a <b@c> 1234798653 +0000
190
data 4
191
test
192
M 644 :1 doc/README.txt
193
reset refs/remotes/origin/master
194
from :100
195
"""
196
197
# A sample input stream that contains a reset and more commits
198
_SAMPLE_RESET_WITH_MORE_COMMITS = \
199
"""blob
200
mark :1
201
data 9
202
Welcome!
203
commit refs/heads/master
204
mark :100
205
committer a <b@c> 1234798653 +0000
206
data 4
207
test
208
M 644 :1 doc/README.txt
209
reset refs/remotes/origin/master
210
from :100
211
commit refs/remotes/origin/master
212
mark :101
213
committer d <b@c> 1234798653 +0000
214
data 8
215
test
216
ing
217
from :100
218
D doc/README.txt
219
"""
220
221
class TestHeadTracking(testtools.TestCase):
222
223
    def assertHeads(self, input, expected):
224
        s = StringIO(input)
225
        p = parser.ImportParser(s)
226
        reftracker = RefTracker()
227
        for cmd in p.iter_commands():
228
            if isinstance(cmd, commands.CommitCommand):
229
                reftracker.track_heads(cmd)
230
                # eat the file commands
231
                list(cmd.iter_files())
232
            elif isinstance(cmd, commands.ResetCommand):
233
                if cmd.from_ is not None:
234
                    reftracker.track_heads_for_ref(cmd.ref, cmd.from_)
235
        self.assertEqual(reftracker.heads, expected)
236
237
    def test_mainline(self):
238
        self.assertHeads(_SAMPLE_MAINLINE, {
239
            ':102': set(['refs/heads/master']),
240
            })
241
242
    def test_two_heads(self):
243
        self.assertHeads(_SAMPLE_TWO_HEADS, {
244
            ':101': set(['refs/heads/mybranch']),
245
            ':102': set(['refs/heads/master']),
246
            })
247
248
    def test_two_branches_merged(self):
249
        self.assertHeads(_SAMPLE_TWO_BRANCHES_MERGED, {
250
            ':103': set(['refs/heads/master']),
251
            })
252
253
    def test_reset(self):
254
        self.assertHeads(_SAMPLE_RESET, {
255
            ':100': set(['refs/heads/master', 'refs/remotes/origin/master']),
256
            })
257
258
    def test_reset_with_more_commits(self):
259
        self.assertHeads(_SAMPLE_RESET_WITH_MORE_COMMITS, {
260
            ':101': set(['refs/remotes/origin/master']),
261
            })