~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Martin Pool
  • Date: 2005-04-15 09:33:28 UTC
  • Revision ID: mbp@sourcefrog.net-20050415093328-94d142b1130b3d2c
- Better workaround for trailing newlines in diffs

Show diffs side-by-side

added added

removed removed

Lines of Context:
374
374
 
375
375
    TODO: Selected-file diff is inefficient and doesn't show you
376
376
          deleted files.
 
377
 
 
378
    TODO: This probably handles non-Unix newlines poorly.
377
379
"""
378
380
 
379
381
    ## TODO: Shouldn't be in the cmd function.
420
422
        # with newly-added files.
421
423
 
422
424
        def diffit(oldlines, newlines, **kw):
 
425
            
423
426
            # FIXME: difflib is wrong if there is no trailing newline.
 
427
            # The syntax used by patch seems to be "\ No newline at
 
428
            # end of file" following the last diff line from that
 
429
            # file.  This is not trivial to insert into the
 
430
            # unified_diff output and it might be better to just fix
 
431
            # or replace that function.
 
432
 
 
433
            # In the meantime we at least make sure the patch isn't
 
434
            # mangled.
 
435
            
424
436
 
425
437
            # Special workaround for Python2.3, where difflib fails if
426
438
            # both sequences are empty.
427
 
            if oldlines or newlines:
428
 
                sys.stdout.writelines(difflib.unified_diff(oldlines, newlines, **kw))
429
 
            print
 
439
            if not oldlines and not newlines:
 
440
                return
 
441
 
 
442
            nonl = False
 
443
 
 
444
            if oldlines and (oldlines[-1][-1] != '\n'):
 
445
                oldlines[-1] += '\n'
 
446
                nonl = True
 
447
            if newlines and (newlines[-1][-1] != '\n'):
 
448
                newlines[-1] += '\n'
 
449
                nonl = True
 
450
 
 
451
            ud = difflib.unified_diff(oldlines, newlines, **kw)
 
452
            sys.stdout.writelines(ud)
 
453
            if nonl:
 
454
                print "\\ No newline at end of file"
 
455
            sys.stdout.write('\n')
430
456
        
431
457
        if file_state in ['.', '?', 'I']:
432
458
            continue