~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to weave.py

  • Committer: Martin Pool
  • Date: 2005-06-28 14:38:45 UTC
  • mto: This revision was merged to the branch mainline in revision 852.
  • Revision ID: mbp@sourcefrog.net-20050628143845-20121e2da56485d3
Lame command-line client for reading and writing weaves.

Doc.

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
# way if it's done in a different order?  That's a pretty desirable
28
28
# property.
29
29
 
 
30
# TODO: How to write these to disk?  One option is cPickle, which
 
31
# would be fast but less friendly to C, and perhaps not portable.  Another is
 
32
 
 
33
# TODO: Nothing here so far assumes the lines are really \n newlines,
 
34
# rather than being split up in some other way.  We could accomodate
 
35
# binaries, perhaps by naively splitting on \n or perhaps using
 
36
# something like a rolling checksum.
 
37
 
 
38
# TODO: Perhaps track SHA-1 in the header for protection?  This would
 
39
# be redundant with it being stored in the inventory, but perhaps
 
40
# usefully so?
 
41
 
 
42
# TODO: Track version names as well as indexes. 
 
43
 
 
44
# TODO: Probably do transitive expansion when specifying parents?
30
45
 
31
46
 
32
47
class VerInfo(object):
415
430
            yield real_i1, real_i2, lines[j1:j2]
416
431
 
417
432
 
 
433
 
 
434
 
 
435
def main(argv):
 
436
    import sys
 
437
    import os
 
438
    from cPickle import dump, load
 
439
    cmd = argv[1]
 
440
    if cmd == 'add':
 
441
        w = load(file(argv[2], 'rb'))
 
442
        # at the moment, based on everything in the file
 
443
        parents = set(range(len(w._v)))
 
444
        ver = w.add(parents, sys.stdin.readlines())
 
445
        dump(w, file(argv[2], 'wb'))
 
446
        print 'added %d' % ver
 
447
    elif cmd == 'init':
 
448
        fn = argv[2]
 
449
        if os.path.exists(fn):
 
450
            raise IOError("file exists")
 
451
        w = Weave()
 
452
        dump(w, file(fn, 'wb'))
 
453
    elif cmd == 'get':
 
454
        w = load(file(argv[2], 'rb'))
 
455
        sys.stdout.writelines(w.get(int(argv[3])))
 
456
    elif cmd == 'annotate':
 
457
        w = load(file(argv[2], 'rb'))
 
458
        # assumes lines are ended
 
459
        lasto = None
 
460
        for origin, text in w.annotate(int(argv[3])):
 
461
            if text[-1] == '\n':
 
462
                text = text[:-1]
 
463
            if origin == lasto:
 
464
                print '      | %s' % (text)
 
465
            else:
 
466
                print '%5d | %s' % (origin, text)
 
467
                lasto = origin
 
468
    else:
 
469
        raise ValueError('unknown command %r' % cmd)
 
470
    
 
471
 
 
472
if __name__ == '__main__':
 
473
    import sys
 
474
    sys.exit(main(sys.argv))