~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: mbp at sourcefrog
  • Date: 2005-04-08 22:14:09 UTC
  • Revision ID: mbp@sourcefrog.net-20050408221409-a99bd4796a56f42edbf3f13a
selected-file diff

Show diffs side-by-side

added added

removed removed

Lines of Context:
45
45
       Make files versioned.
46
46
  bzr log
47
47
       Show revision history.
48
 
  bzr diff
 
48
  bzr diff [FILE...]
49
49
       Show changes from last revision to working copy.
50
50
  bzr commit -m 'MESSAGE'
51
51
       Store current state as new revision.
325
325
    Branch('.', init=True)
326
326
 
327
327
 
328
 
def cmd_diff(revision=None):
 
328
def cmd_diff(revision=None, file_list=None):
329
329
    """bzr diff: Show differences in working tree.
330
330
    
331
 
usage: bzr diff [-r REV]
 
331
usage: bzr diff [-r REV] [FILE...]
332
332
 
333
333
--revision REV
334
334
    Show changes since REV, rather than predecessor.
335
335
 
 
336
If files are listed, only the changes in those files are listed.
 
337
Otherwise, all changes for the tree are listed.
 
338
 
336
339
TODO: Given two revision arguments, show the difference between them.
337
340
 
338
341
TODO: Allow diff across branches.
340
343
TODO: Option to use external diff command; could be GNU diff, wdiff,
341
344
or a graphical diff.
342
345
 
343
 
TODO: Diff selected files.
 
346
TODO: If a directory is given, diff everything under that.
 
347
 
 
348
TODO: Selected-file diff is inefficient and doesn't show you deleted files.
344
349
"""
345
350
 
346
351
    ## TODO: Shouldn't be in the cmd function.
367
372
    # be usefully made into a much faster special case.
368
373
 
369
374
    # TODO: Better to return them in sorted order I think.
 
375
 
 
376
    # FIXME: If given a file list, compare only those files rather
 
377
    # than comparing everything and then throwing stuff away.
370
378
    
371
379
    for file_state, fid, old_name, new_name, kind in bzrlib.diff_trees(old_tree, new_tree):
 
380
 
 
381
        if file_list and new_name not in file_list:
 
382
            continue
 
383
        
372
384
        # Don't show this by default; maybe do it if an option is passed
373
385
        # idlabel = '      {%s}' % fid
374
386
        idlabel = ''
758
770
    'add':                    ['file+'],
759
771
    'cat':                    ['filename'],
760
772
    'commit':                 [],
761
 
    'diff':                   [],
 
773
    'diff':                   ['file*'],
762
774
    'export':                 ['revno', 'dest'],
763
775
    'file-id':                ['filename'],
764
776
    'file-id-path':           ['filename'],
867
879
        if ap[-1] == '?':
868
880
            if args:
869
881
                argdict[argname] = args.pop(0)
870
 
        elif ap[-1] == '*':
871
 
            raise BzrError("arg form %r not implemented yet" % ap)
 
882
        elif ap[-1] == '*': # all remaining arguments
 
883
            if args:
 
884
                argdict[argname + '_list'] = args[:]
 
885
                args = []
 
886
            else:
 
887
                argdict[argname + '_list'] = None
872
888
        elif ap[-1] == '+':
873
889
            if not args:
874
890
                bailout("command %r needs one or more %s"