/breezy/unstable

To get this branch, use:
bzr branch https://code.breezy-vcs.org/breezy/unstable

« back to all changes in this revision

Viewing changes to breezy/plugins/fastimport/tests/test_head_tracking.py

  • Committer: Jelmer Vernooij
  • Date: 2017-05-24 01:39:33 UTC
  • mfrom: (3815.3776.6)
  • Revision ID: jelmer@jelmer.uk-20170524013933-ir4y4tqtrsiz2ka2
New upstream snapshot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
18
from __future__ import absolute_import
 
19
 
 
20
from cStringIO import StringIO
 
21
 
 
22
from fastimport import (
 
23
    commands,
 
24
    parser,
 
25
    )
 
26
 
 
27
import testtools
 
28
 
 
29
from .reftracker import (
 
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
            })