~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to weave.py

  • Committer: Martin Pool
  • Date: 2005-06-30 06:54:45 UTC
  • mto: This revision was merged to the branch mainline in revision 852.
  • Revision ID: mbp@sourcefrog.net-20050630065445-0b45ffaa34801941
Go back to weave lines normally having newlines at the end. 

Lines without final newlines are now serialized as ',' lines rather
than '.'.

Show diffs side-by-side

added added

removed removed

Lines of Context:
87
87
class Weave(object):
88
88
    """weave - versioned text file storage.
89
89
    
90
 
    A Weave manages versions of line-based text files, keeping track of the
91
 
    originating version for each line.
 
90
    A Weave manages versions of line-based text files, keeping track
 
91
    of the originating version for each line.
 
92
 
 
93
    To clients the "lines" of the file are represented as a list of strings.
 
94
    These strings  will typically have terminal newline characters, but
 
95
    this is not required.  In particular files commonly do not have a newline
 
96
    at the end of the file.
92
97
 
93
98
    Texts can be identified in either of two ways:
94
99
 
469
474
        w = read_weave_v1(file(argv[2], 'rb'))
470
475
        # at the moment, based on everything in the file
471
476
        parents = set(range(len(w._v)))
472
 
        lines = [x.rstrip('\n') for x in sys.stdin.xreadlines()]
 
477
        lines = sys.stdin.readlines()
473
478
        ver = w.add(parents, lines)
474
479
        write_weave_v1(w, file(argv[2], 'wb'))
475
480
        print 'added %d' % ver
481
486
        write_weave_v1(w, file(fn, 'wb'))
482
487
    elif cmd == 'get':
483
488
        w = read_weave_v1(file(argv[2], 'rb'))
484
 
        sys.stdout.writelines(w.get(int(argv[3])))
 
489
        sys.stdout.writelines(w.getiter(int(argv[3])))
485
490
    elif cmd == 'annotate':
486
491
        w = read_weave_v1(file(argv[2], 'rb'))
487
 
        # assumes lines are ended
 
492
        # newline is added to all lines regardless; too hard to get
 
493
        # reasonable formatting otherwise
488
494
        lasto = None
489
495
        for origin, text in w.annotate(int(argv[3])):
490
 
            assert '\n' not in text
 
496
            text = text.rstrip('\r\n')
491
497
            if origin == lasto:
492
498
                print '      | %s' % (text)
493
499
            else: