~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/weave.py

  • Committer: Martin Pool
  • Date: 2005-07-11 02:31:10 UTC
  • Revision ID: mbp@sourcefrog.net-20050711023110-ad5948d9d1d8057f
- add command for merge-based weave

Show diffs side-by-side

added added

removed removed

Lines of Context:
538
538
 
539
539
 
540
540
def usage():
541
 
    print """bzr weave tool:
 
541
    print """bzr weave tool
 
542
 
 
543
Experimental tool for weave algorithm.
 
544
 
542
545
usage:
543
546
    weave init WEAVEFILE
544
547
        Create an empty weave file
556
559
        Display composite of all selected versions.
557
560
    weave merge WEAVEFILE VERSION1 VERSION2 > OUT
558
561
        Auto-merge two versions and display conflicts.
 
562
 
 
563
example:
 
564
 
 
565
    % weave init foo.weave
 
566
    % vi foo.txt
 
567
    % weave add foo.weave < foo.txt
 
568
    added version 0
 
569
 
 
570
    (create updated version)
 
571
    % vi foo.txt
 
572
    % weave get foo.weave 0 | diff -u - foo.txt
 
573
    % weave add foo.weave 0 < foo.txt
 
574
    added version 1
 
575
 
 
576
    % weave get foo.weave 0 > foo.txt       (create forked version)
 
577
    % vi foo.txt
 
578
    % weave add foo.weave 0 < foo.txt
 
579
    added version 2
 
580
 
 
581
    % weave merge foo.weave 1 2 > foo.txt   (merge them)
 
582
    % vi foo.txt                            (resolve conflicts)
 
583
    % weave add foo.weave 1 2 < foo.txt     (commit merged version)     
 
584
    
559
585
"""
560
586
    
561
587
 
605
631
            else:
606
632
                print '%5d | %s' % (origin, text)
607
633
                lasto = origin
 
634
                
608
635
    elif cmd == 'info':
609
636
        weave_info(argv[2], sys.stdout)
 
637
        
610
638
    elif cmd == 'check':
611
639
        w = readit()
612
640
        w.check()
 
641
 
 
642
    elif cmd == 'merge':
 
643
        if len(argv) != 5:
 
644
            usage()
 
645
            return 1
 
646
 
 
647
        w = readit()
 
648
        v1, v2 = map(int, argv[3:5])
 
649
 
 
650
        basis = w.inclusions([v1]).intersection(w.inclusions([v2]))
 
651
 
 
652
        base_lines = list(w.mash_iter(basis))
 
653
        a_lines = list(w.get(v1))
 
654
        b_lines = list(w.get(v2))
 
655
 
 
656
        from bzrlib.merge3 import Merge3
 
657
        m3 = Merge3(base_lines, a_lines, b_lines)
 
658
 
 
659
        name_a = 'version %d' % v1
 
660
        name_b = 'version %d' % v2
 
661
        sys.stdout.writelines(m3.merge_lines(name_a=name_a, name_b=name_b))
613
662
    else:
614
663
        raise ValueError('unknown command %r' % cmd)
615
664