~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/info.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-11-06 11:11:18 UTC
  • mfrom: (2968.2.1 lukas)
  • Revision ID: pqm@pqm.ubuntu.com-20071106111118-y3bzab49xldvajyh
(Lukas Lalinksy) Unicode-safe output from ``bzr info``

Show diffs side-by-side

added added

removed removed

Lines of Context:
128
128
    return [(n, locs[n]) for n in order if n in locs]
129
129
 
130
130
 
131
 
def _show_location_info(locs):
 
131
def _show_location_info(locs, outfile):
132
132
    """Show known locations for working, branch and repository."""
133
 
    print 'Location:'
 
133
    outfile.write('Location:\n')
134
134
    path_list = LocationList(osutils.getcwd())
135
135
    for name, loc in locs:
136
136
        path_list.add_url(name, loc)
137
 
    sys.stdout.writelines(path_list.get_lines())
 
137
    outfile.writelines(path_list.get_lines())
 
138
 
138
139
 
139
140
def _gather_related_branches(branch):
140
141
    locs = LocationList(osutils.getcwd())
144
145
    locs.add_url('submit branch', branch.get_submit_branch())
145
146
    return locs
146
147
 
 
148
 
147
149
def _show_related_info(branch, outfile):
148
150
    """Show parent and push location of branch."""
149
151
    locs = _gather_related_branches(branch)
153
155
        outfile.writelines(locs.get_lines())
154
156
 
155
157
 
156
 
def _show_format_info(control=None, repository=None, branch=None, working=None):
 
158
def _show_format_info(control=None, repository=None, branch=None,
 
159
                      working=None, outfile=None):
157
160
    """Show known formats for control, working, branch and repository."""
158
 
    print
159
 
    print 'Format:'
 
161
    outfile.write('\n')
 
162
    outfile.write('Format:\n')
160
163
    if control:
161
 
        print '       control: %s' % control._format.get_format_description()
 
164
        outfile.write('       control: %s\n' %
 
165
            control._format.get_format_description())
162
166
    if working:
163
 
        print '  working tree: %s' % working._format.get_format_description()
 
167
        outfile.write('  working tree: %s\n' %
 
168
            working._format.get_format_description())
164
169
    if branch:
165
 
        print '        branch: %s' % branch._format.get_format_description()
 
170
        outfile.write('        branch: %s\n' %
 
171
            branch._format.get_format_description())
166
172
    if repository:
167
 
        print '    repository: %s' % repository._format.get_format_description()
168
 
 
169
 
 
170
 
def _show_locking_info(repository, branch=None, working=None):
 
173
        outfile.write('    repository: %s\n' %
 
174
            repository._format.get_format_description())
 
175
 
 
176
 
 
177
def _show_locking_info(repository, branch=None, working=None, outfile=None):
171
178
    """Show locking status of working, branch and repository."""
172
179
    if (repository.get_physical_lock_status() or
173
180
        (branch and branch.get_physical_lock_status()) or
174
181
        (working and working.get_physical_lock_status())):
175
 
        print
176
 
        print 'Lock status:'
 
182
        outfile.write('\n')
 
183
        outfile.write('Lock status:\n')
177
184
        if working:
178
185
            if working.get_physical_lock_status():
179
186
                status = 'locked'
180
187
            else:
181
188
                status = 'unlocked'
182
 
            print '  working tree: %s' % status
 
189
            outfile.write('  working tree: %s\n' % status)
183
190
        if branch:
184
191
            if branch.get_physical_lock_status():
185
192
                status = 'locked'
186
193
            else:
187
194
                status = 'unlocked'
188
 
            print '        branch: %s' % status
 
195
            outfile.write('        branch: %s\n' % status)
189
196
        if repository:
190
197
            if repository.get_physical_lock_status():
191
198
                status = 'locked'
192
199
            else:
193
200
                status = 'unlocked'
194
 
            print '    repository: %s' % status
195
 
 
196
 
 
197
 
def _show_missing_revisions_branch(branch):
 
201
            outfile.write('    repository: %s\n' % status)
 
202
 
 
203
 
 
204
def _show_missing_revisions_branch(branch, outfile):
198
205
    """Show missing master revisions in branch."""
199
206
    # Try with inaccessible branch ?
200
207
    master = branch.get_master_branch()
201
208
    if master:
202
209
        local_extra, remote_extra = find_unmerged(branch, master)
203
210
        if remote_extra:
204
 
            print
205
 
            print 'Branch is out of date: missing %d revision%s.' % (
206
 
                len(remote_extra), plural(len(remote_extra)))
207
 
 
208
 
 
209
 
def _show_missing_revisions_working(working):
 
211
            outfile.write('\n')
 
212
            outfile.write(('Branch is out of date: missing %d '
 
213
                'revision%s.\n') % (len(remote_extra),
 
214
                plural(len(remote_extra))))
 
215
 
 
216
 
 
217
def _show_missing_revisions_working(working, outfile):
210
218
    """Show missing revisions in working tree."""
211
219
    branch = working.branch
212
220
    basis = working.basis_tree()
220
228
    if branch_revno and tree_last_id != branch_last_revision:
221
229
        tree_last_revno = branch.revision_id_to_revno(tree_last_id)
222
230
        missing_count = branch_revno - tree_last_revno
223
 
        print
224
 
        print 'Working tree is out of date: missing %d revision%s.' % (
225
 
            missing_count, plural(missing_count))
226
 
 
227
 
 
228
 
def _show_working_stats(working):
 
231
        outfile.write('\n')
 
232
        outfile.write(('Working tree is out of date: missing %d '
 
233
            'revision%s.\n') % (missing_count, plural(missing_count)))
 
234
 
 
235
 
 
236
def _show_working_stats(working, outfile):
229
237
    """Show statistics about a working tree."""
230
238
    basis = working.basis_tree()
231
239
    work_inv = working.inventory
232
240
    delta = working.changes_from(basis, want_unchanged=True)
233
241
 
234
 
    print
235
 
    print 'In the working tree:'
236
 
    print '  %8s unchanged' % len(delta.unchanged)
237
 
    print '  %8d modified' % len(delta.modified)
238
 
    print '  %8d added' % len(delta.added)
239
 
    print '  %8d removed' % len(delta.removed)
240
 
    print '  %8d renamed' % len(delta.renamed)
 
242
    outfile.write('\n')
 
243
    outfile.write('In the working tree:\n')
 
244
    outfile.write('  %8s unchanged\n' % len(delta.unchanged))
 
245
    outfile.write('  %8d modified\n' % len(delta.modified))
 
246
    outfile.write('  %8d added\n' % len(delta.added))
 
247
    outfile.write('  %8d removed\n' % len(delta.removed))
 
248
    outfile.write('  %8d renamed\n' % len(delta.renamed))
241
249
 
242
250
    ignore_cnt = unknown_cnt = 0
243
251
    for path in working.extras():
245
253
            ignore_cnt += 1
246
254
        else:
247
255
            unknown_cnt += 1
248
 
    print '  %8d unknown' % unknown_cnt
249
 
    print '  %8d ignored' % ignore_cnt
 
256
    outfile.write('  %8d unknown\n' % unknown_cnt)
 
257
    outfile.write('  %8d ignored\n' % ignore_cnt)
250
258
 
251
259
    dir_cnt = 0
252
260
    for file_id in work_inv:
253
261
        if (work_inv.get_file_kind(file_id) == 'directory' and 
254
262
            not work_inv.is_root(file_id)):
255
263
            dir_cnt += 1
256
 
    print '  %8d versioned %s' \
257
 
          % (dir_cnt,
258
 
             plural(dir_cnt, 'subdirectory', 'subdirectories'))
259
 
 
260
 
 
261
 
def _show_branch_stats(branch, verbose):
 
264
    outfile.write('  %8d versioned %s\n' % (dir_cnt,
 
265
        plural(dir_cnt, 'subdirectory', 'subdirectories')))
 
266
 
 
267
 
 
268
def _show_branch_stats(branch, verbose, outfile):
262
269
    """Show statistics about a branch."""
263
270
    revno, head = branch.last_revision_info()
264
 
    print
265
 
    print 'Branch history:'
266
 
    print '  %8d revision%s' % (revno, plural(revno))
 
271
    outfile.write('\n')
 
272
    outfile.write('Branch history:\n')
 
273
    outfile.write('  %8d revision%s\n' % (revno, plural(revno)))
267
274
    stats = branch.repository.gather_stats(head, committers=verbose)
268
275
    if verbose:
269
276
        committers = stats['committers']
270
 
        print '  %8d committer%s' % (committers, plural(committers))
 
277
        outfile.write('  %8d committer%s\n' % (committers,
 
278
            plural(committers)))
271
279
    if revno:
272
280
        timestamp, timezone = stats['firstrev']
273
281
        age = int((time.time() - timestamp) / 3600 / 24)
274
 
        print '  %8d day%s old' % (age, plural(age))
275
 
        print '   first revision: %s' % osutils.format_date(timestamp,
276
 
            timezone)
 
282
        outfile.write('  %8d day%s old\n' % (age, plural(age)))
 
283
        outfile.write('   first revision: %s\n' %
 
284
            osutils.format_date(timestamp, timezone))
277
285
        timestamp, timezone = stats['latestrev']
278
 
        print '  latest revision: %s' % osutils.format_date(timestamp,
279
 
            timezone)
 
286
        outfile.write('  latest revision: %s\n' %
 
287
            osutils.format_date(timestamp, timezone))
280
288
    return stats
281
289
 
282
290
 
283
 
def _show_repository_info(repository):
 
291
def _show_repository_info(repository, outfile):
284
292
    """Show settings of a repository."""
285
293
    if repository.make_working_trees():
286
 
        print
287
 
        print 'Create working tree for new branches inside the repository.'
288
 
 
289
 
 
290
 
def _show_repository_stats(stats):
 
294
        outfile.write('\n')
 
295
        outfile.write('Create working tree for new branches inside '
 
296
            'the repository.\n')
 
297
 
 
298
 
 
299
def _show_repository_stats(stats, outfile):
291
300
    """Show statistics about a repository."""
292
301
    if 'revisions' in stats or 'size' in stats:
293
 
        print
294
 
        print 'Repository:'
 
302
        outfile.write('\n')
 
303
        outfile.write('Repository:\n')
295
304
    if 'revisions' in stats:
296
305
        revisions = stats['revisions']
297
 
        print '  %8d revision%s' % (revisions, plural(revisions))
 
306
        outfile.write('  %8d revision%s\n' % (revisions, plural(revisions)))
298
307
    if 'size' in stats:
299
 
        print '  %8d KiB' % (stats['size']/1024)
300
 
 
301
 
def show_bzrdir_info(a_bzrdir, verbose=False):
 
308
        outfile.write('  %8d KiB\n' % (stats['size']/1024))
 
309
 
 
310
 
 
311
def show_bzrdir_info(a_bzrdir, verbose=False, outfile=None):
302
312
    """Output to stdout the 'info' for a_bzrdir."""
 
313
    if outfile is None:
 
314
        outfile = sys.stdout
303
315
    try:
304
316
        tree = a_bzrdir.open_workingtree(
305
317
            recommend_upgrade=False)
327
339
 
328
340
    lockable.lock_read()
329
341
    try:
330
 
        show_component_info(a_bzrdir, repository, branch, tree, verbose)
 
342
        show_component_info(a_bzrdir, repository, branch, tree, verbose,
 
343
                            outfile)
331
344
    finally:
332
345
        lockable.unlock()
333
346
 
334
347
 
335
348
def show_component_info(control, repository, branch=None, working=None,
336
 
    verbose=1):
 
349
    verbose=1, outfile=None):
337
350
    """Write info about all bzrdir components to stdout"""
 
351
    if outfile is None:
 
352
        outfile = sys.stdout
338
353
    if verbose is False:
339
354
        verbose = 1
340
355
    if verbose is True:
341
356
        verbose = 2
342
357
    layout = describe_layout(repository, branch, working)
343
358
    format = describe_format(control, repository, branch, working)
344
 
    print "%s (format: %s)" % (layout, format)
345
 
    _show_location_info(gather_location_info(repository, branch, working))
 
359
    outfile.write("%s (format: %s)\n" % (layout, format))
 
360
    _show_location_info(gather_location_info(repository, branch, working),
 
361
                        outfile)
346
362
    if branch is not None:
347
 
        _show_related_info(branch, sys.stdout)
 
363
        _show_related_info(branch, outfile)
348
364
    if verbose == 0:
349
365
        return
350
 
    _show_format_info(control, repository, branch, working)
351
 
    _show_locking_info(repository, branch, working)
 
366
    _show_format_info(control, repository, branch, working, outfile)
 
367
    _show_locking_info(repository, branch, working, outfile)
352
368
    if branch is not None:
353
 
        _show_missing_revisions_branch(branch)
 
369
        _show_missing_revisions_branch(branch, outfile)
354
370
    if working is not None:
355
 
        _show_missing_revisions_working(working)
356
 
        _show_working_stats(working)
 
371
        _show_missing_revisions_working(working, outfile)
 
372
        _show_working_stats(working, outfile)
357
373
    elif branch is not None:
358
 
        _show_missing_revisions_branch(branch)
 
374
        _show_missing_revisions_branch(branch, outfile)
359
375
    if branch is not None:
360
 
        stats = _show_branch_stats(branch, verbose==2)
 
376
        stats = _show_branch_stats(branch, verbose==2, outfile)
361
377
    else:
362
378
        stats = repository.gather_stats()
363
379
    if branch is None and working is None:
364
 
        _show_repository_info(repository)
365
 
    _show_repository_stats(stats)
 
380
        _show_repository_info(repository, outfile)
 
381
    _show_repository_stats(stats, outfile)
366
382
 
367
383
 
368
384
def describe_layout(repository=None, branch=None, tree=None):
449
465
    if len(new_candidates) > 0:
450
466
        candidates = new_candidates
451
467
    return ' or '.join(candidates)
452
 
 
453
 
 
454
 
@deprecated_function(zero_eighteen)
455
 
def show_tree_info(working, verbose):
456
 
    """Output to stdout the 'info' for working."""
457
 
    branch = working.branch
458
 
    repository = branch.repository
459
 
    control = working.bzrdir
460
 
    show_component_info(control, repository, branch, working, verbose)
461
 
 
462
 
 
463
 
@deprecated_function(zero_eighteen)
464
 
def show_branch_info(branch, verbose):
465
 
    """Output to stdout the 'info' for branch."""
466
 
    repository = branch.repository
467
 
    control = branch.bzrdir
468
 
    show_component_info(control, repository, branch, verbose=verbose)
469
 
 
470
 
 
471
 
@deprecated_function(zero_eighteen)
472
 
def show_repository_info(repository, verbose):
473
 
    """Output to stdout the 'info' for repository."""
474
 
    control = repository.bzrdir
475
 
    show_component_info(control, repository, verbose=verbose)