~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_status.py

  • Committer: Martin Pool
  • Date: 2006-08-10 01:16:16 UTC
  • mto: (1904.1.2 0.9)
  • mto: This revision was merged to the branch mainline in revision 1913.
  • Revision ID: mbp@sourcefrog.net-20060810011616-d74881eba696e746
compare_trees is deprecated in 0.9 not 0.10

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 by Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
28
28
import sys
29
29
from tempfile import TemporaryFile
30
30
 
31
 
from bzrlib import bzrdir, errors
 
31
from bzrlib import bzrdir, errors, ignores
32
32
import bzrlib.branch
33
33
from bzrlib.builtins import merge
34
34
from bzrlib.osutils import pathjoin
40
40
 
41
41
class BranchStatus(TestCaseWithTransport):
42
42
    
43
 
    def assertStatus(self, output_lines, working_tree,
44
 
        revision=None, short=False):
45
 
        """Run status in working_tree and look for output.
46
 
        
47
 
        :param output_lines: The lines to look for.
48
 
        :param working_tree: The tree to run status in.
49
 
        """
50
 
        output_string = self.status_string(working_tree, revision, short)
51
 
        self.assertEqual(output_lines, output_string.splitlines(True))
52
 
    
53
 
    def status_string(self, wt, revision=None, short=False):
54
 
        # use a real file rather than StringIO because it doesn't handle
55
 
        # Unicode very well.
56
 
        tof = codecs.getwriter('utf-8')(TemporaryFile())
57
 
        show_tree_status(wt, to_file=tof, revision=revision, short=short)
58
 
        tof.seek(0)
59
 
        return tof.read().decode('utf-8')
60
 
 
61
43
    def test_branch_status(self):
62
44
        """Test basic branch status"""
63
45
        wt = self.make_branch_and_tree('.')
64
 
 
65
 
        # status with no commits or files - it must
66
 
        # work and show no output. We do this with no
67
 
        # commits to be sure that it's not going to fail
68
 
        # as a corner case.
69
 
        self.assertStatus([], wt)
70
 
 
 
46
        b = wt.branch
 
47
 
 
48
        ignores._set_user_ignores(['./.bazaar'])
 
49
 
 
50
        # status with nothing
 
51
        tof = StringIO()
 
52
        show_tree_status(wt, to_file=tof)
 
53
        self.assertEquals(tof.getvalue(), "")
 
54
 
 
55
        tof = StringIO()
71
56
        self.build_tree(['hello.c', 'bye.c'])
72
 
        self.assertStatus([
73
 
                'unknown:\n',
74
 
                '  bye.c\n',
75
 
                '  hello.c\n',
76
 
            ],
77
 
            wt)
78
 
        self.assertStatus([
79
 
                '?  bye.c\n',
80
 
                '?  hello.c\n',
81
 
            ],
82
 
            wt, short=True)
83
 
 
84
 
        # add a commit to allow showing pending merges.
85
 
        wt.commit('create a parent to allow testing merge output')
86
 
 
87
 
        wt.add_parent_tree_id('pending@pending-0-0')
88
 
        self.assertStatus([
89
 
                'unknown:\n',
90
 
                '  bye.c\n',
91
 
                '  hello.c\n',
92
 
                'pending merges:\n',
93
 
                '  pending@pending-0-0\n',
94
 
            ],
95
 
            wt)
96
 
        self.assertStatus([
97
 
                '?  bye.c\n',
98
 
                '?  hello.c\n',
99
 
                'P  pending@pending-0-0\n',
100
 
            ],
101
 
            wt, short=True)
 
57
        wt.add_pending_merge('pending@pending-0-0')
 
58
        show_tree_status(wt, to_file=tof)
 
59
        tof.seek(0)
 
60
        self.assertEquals(tof.readlines(),
 
61
                          ['unknown:\n',
 
62
                           '  bye.c\n',
 
63
                           '  hello.c\n',
 
64
                           'pending merges:\n',
 
65
                           '  pending@pending-0-0\n'
 
66
                           ])
102
67
 
103
68
    def test_branch_status_revisions(self):
104
69
        """Tests branch status with revisions"""
105
70
        wt = self.make_branch_and_tree('.')
106
 
 
 
71
        b = wt.branch
 
72
 
 
73
        ignores._set_user_ignores(['./.bazaar'])
 
74
 
 
75
        tof = StringIO()
107
76
        self.build_tree(['hello.c', 'bye.c'])
108
77
        wt.add('hello.c')
109
78
        wt.add('bye.c')
110
79
        wt.commit('Test message')
111
80
 
112
 
        revs = [RevisionSpec.from_string('0')]
113
 
        self.assertStatus([
114
 
                'added:\n',
115
 
                '  bye.c\n',
116
 
                '  hello.c\n'
117
 
            ],
118
 
            wt,
119
 
            revision=revs)
 
81
        tof = StringIO()
 
82
        revs =[]
 
83
        revs.append(RevisionSpec(0))
 
84
        
 
85
        show_tree_status(wt, to_file=tof, revision=revs)
 
86
        
 
87
        tof.seek(0)
 
88
        self.assertEquals(tof.readlines(),
 
89
                          ['added:\n',
 
90
                           '  bye.c\n',
 
91
                           '  hello.c\n'])
120
92
 
121
93
        self.build_tree(['more.c'])
122
94
        wt.add('more.c')
123
95
        wt.commit('Another test message')
124
96
        
125
 
        revs.append(RevisionSpec.from_string('1'))
126
 
        self.assertStatus([
127
 
                'added:\n',
128
 
                '  bye.c\n',
129
 
                '  hello.c\n',
130
 
            ],
131
 
            wt,
132
 
            revision=revs)
 
97
        tof = StringIO()
 
98
        revs.append(RevisionSpec(1))
 
99
        
 
100
        show_tree_status(wt, to_file=tof, revision=revs)
 
101
        
 
102
        tof.seek(0)
 
103
        self.assertEquals(tof.readlines(),
 
104
                          ['added:\n',
 
105
                           '  bye.c\n',
 
106
                           '  hello.c\n'])
 
107
 
 
108
    def status_string(self, wt):
 
109
        # use a real file rather than StringIO because it doesn't handle
 
110
        # Unicode very well.
 
111
        tof = codecs.getwriter('utf-8')(TemporaryFile())
 
112
        show_tree_status(wt, to_file=tof)
 
113
        tof.seek(0)
 
114
        return tof.read().decode('utf-8')
133
115
 
134
116
    def test_pending(self):
135
117
        """Pending merges display works, including Unicode"""
160
142
        wt = self.make_branch_and_tree('.')
161
143
        b = wt.branch
162
144
 
 
145
        ignores._set_user_ignores(['./.bazaar'])
 
146
 
163
147
        self.build_tree(['directory/','directory/hello.c', 'bye.c','test.c','dir2/'])
164
148
        wt.add('directory')
165
149
        wt.add('test.c')
166
150
        wt.commit('testing')
167
151
        
168
 
        self.assertStatus([
169
 
                'unknown:\n',
170
 
                '  bye.c\n',
171
 
                '  dir2\n',
172
 
                '  directory/hello.c\n'
173
 
                ],
174
 
                wt)
175
 
 
176
 
        self.assertStatus([
177
 
                '?  bye.c\n',
178
 
                '?  dir2\n',
179
 
                '?  directory/hello.c\n'
180
 
                ],
181
 
                wt, short=True)
182
 
 
183
152
        tof = StringIO()
 
153
        show_tree_status(wt, to_file=tof)
 
154
        tof.seek(0)
 
155
        self.assertEquals(tof.readlines(),
 
156
                          ['unknown:\n',
 
157
                           '  bye.c\n',
 
158
                           '  dir2\n',
 
159
                           '  directory/hello.c\n'
 
160
                           ])
 
161
 
184
162
        self.assertRaises(errors.PathsDoNotExist,
185
163
                          show_tree_status,
186
164
                          wt, specific_files=['bye.c','test.c','absent.c'], 
194
172
                           '  directory/hello.c\n'
195
173
                           ])
196
174
        tof = StringIO()
197
 
        show_tree_status(wt, specific_files=['directory'], to_file=tof,
198
 
                         short=True)
199
 
        tof.seek(0)
200
 
        self.assertEquals(tof.readlines(), ['?  directory/hello.c\n'])
201
 
 
202
 
        tof = StringIO()
203
175
        show_tree_status(wt, specific_files=['dir2'], to_file=tof)
204
176
        tof.seek(0)
205
177
        self.assertEquals(tof.readlines(),
206
178
                          ['unknown:\n',
207
179
                           '  dir2\n'
208
180
                           ])
209
 
        tof = StringIO()
210
 
        show_tree_status(wt, specific_files=['dir2'], to_file=tof, short=True)
211
 
        tof.seek(0)
212
 
        self.assertEquals(tof.readlines(), ['?  dir2\n'])
213
181
 
214
182
    def test_status_nonexistent_file(self):
215
183
        # files that don't exist in either the basis tree or working tree
218
186
        out, err = self.run_bzr('status', 'does-not-exist', retcode=3)
219
187
        self.assertContainsRe(err, r'do not exist.*does-not-exist')
220
188
 
221
 
    def test_status_out_of_date(self):
222
 
        """Simulate status of out-of-date tree after remote push"""
223
 
        tree = self.make_branch_and_tree('.')
224
 
        self.build_tree_contents([('a', 'foo\n')])
225
 
        tree.lock_write()
226
 
        try:
227
 
            tree.add(['a'])
228
 
            tree.commit('add test file')
229
 
            # simulate what happens after a remote push
230
 
            tree.set_last_revision("0")
231
 
            out, err = self.run_bzr('status')
232
 
            self.assertEqual("working tree is out of date, run 'bzr update'\n",
233
 
                             err)
234
 
        finally:
235
 
            tree.unlock()
236
 
 
237
189
 
238
190
class CheckoutStatus(BranchStatus):
239
191
 
252
204
class TestStatus(TestCaseWithTransport):
253
205
 
254
206
    def test_status(self):
 
207
        ignores._set_user_ignores(['./.bazaar'])
 
208
 
255
209
        self.run_bzr("init")
256
 
 
257
210
        self.build_tree(['hello.txt'])
258
211
        result = self.run_bzr("status")[0]
259
212
        self.assert_("unknown:\n  hello.txt\n" in result, result)
260
 
        result = self.run_bzr("status","--short")[0]
261
 
        self.assert_("?  hello.txt\n" in result, result)
262
 
 
263
213
        self.run_bzr("add", "hello.txt")
264
214
        result = self.run_bzr("status")[0]
265
215
        self.assert_("added:\n  hello.txt\n" in result, result)
266
 
        result = self.run_bzr("status","--short")[0]
267
 
        self.assert_("A  hello.txt\n" in result, result)
268
 
 
269
216
        self.run_bzr("commit", "-m", "added")
270
217
        result = self.run_bzr("status", "-r", "0..1")[0]
271
218
        self.assert_("added:\n  hello.txt\n" in result, result)
272
 
        result = self.run_bzr("status", "--short", "-r", "0..1")[0]
273
 
        self.assert_("A  hello.txt\n" in result, result)
274
 
 
275
219
        self.build_tree(['world.txt'])
276
220
        result = self.run_bzr("status", "-r", "0")[0]
277
221
        self.assert_("added:\n  hello.txt\n" \
278
222
                     "unknown:\n  world.txt\n" in result, result)
 
223
 
279
224
        result2 = self.run_bzr("status", "-r", "0..")[0]
280
225
        self.assertEquals(result2, result)
281
 
        result = self.run_bzr("status", "--short", "-r", "0")[0]
282
 
        self.assert_("A  hello.txt\n" \
283
 
                     "?  world.txt\n" in result, result)
284
 
        result2 = self.run_bzr("status", "--short", "-r", "0..")[0]
285
 
        self.assertEquals(result2, result)
286
226
 
287
227
 
288
228
class TestStatusEncodings(TestCaseWithTransport):