~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to weave.py

  • Committer: Martin Pool
  • Date: 2005-06-29 13:58:16 UTC
  • mto: This revision was merged to the branch mainline in revision 852.
  • Revision ID: mbp@sourcefrog.net-20050629135816-6bccb37447ef72e2
Simple text-based format for storing weaves, cleaner than 
Python pickles.

Show diffs side-by-side

added added

removed removed

Lines of Context:
45
45
 
46
46
# TODO: Separate out some code to read and write weaves.
47
47
 
 
48
# TODO: End marker for each version?
 
49
 
 
50
# TODO: Check that no insertion occurs inside a deletion that was
 
51
# active in the version of the insertion.
 
52
 
48
53
 
49
54
try:
50
55
    set
458
463
def main(argv):
459
464
    import sys
460
465
    import os
461
 
    from cPickle import dump, load
 
466
    from weavefile import write_weave_v1, read_weave_v1
462
467
    cmd = argv[1]
463
468
    if cmd == 'add':
464
 
        w = load(file(argv[2], 'rb'))
 
469
        w = read_weave_v1(file(argv[2], 'rb'))
465
470
        # at the moment, based on everything in the file
466
471
        parents = set(range(len(w._v)))
467
 
        ver = w.add(parents, sys.stdin.readlines())
468
 
        dump(w, file(argv[2], 'wb'))
 
472
        lines = [x.rstrip('\n') for x in sys.stdin.xreadlines()]
 
473
        ver = w.add(parents, lines)
 
474
        write_weave_v1(w, file(argv[2], 'wb'))
469
475
        print 'added %d' % ver
470
476
    elif cmd == 'init':
471
477
        fn = argv[2]
472
478
        if os.path.exists(fn):
473
479
            raise IOError("file exists")
474
480
        w = Weave()
475
 
        dump(w, file(fn, 'wb'))
 
481
        write_weave_v1(w, file(fn, 'wb'))
476
482
    elif cmd == 'get':
477
 
        w = load(file(argv[2], 'rb'))
 
483
        w = read_weave_v1(file(argv[2], 'rb'))
478
484
        sys.stdout.writelines(w.get(int(argv[3])))
479
485
    elif cmd == 'annotate':
480
 
        w = load(file(argv[2], 'rb'))
 
486
        w = read_weave_v1(file(argv[2], 'rb'))
481
487
        # assumes lines are ended
482
488
        lasto = None
483
489
        for origin, text in w.annotate(int(argv[3])):
484
 
            if text[-1] == '\n':
485
 
                text = text[:-1]
 
490
            assert '\n' not in text
486
491
            if origin == lasto:
487
492
                print '      | %s' % (text)
488
493
            else: