[Pkg-bazaar-commits] ./bzr/unstable r871: - add command for merge-based weave

Martin Pool mbp at sourcefrog.net
Fri Apr 10 08:21:18 UTC 2009


------------------------------------------------------------
revno: 871
committer: Martin Pool <mbp at sourcefrog.net>
timestamp: Mon 2005-07-11 12:31:10 +1000
message:
  - add command for merge-based weave
modified:
  bzrlib/weave.py
-------------- next part --------------
=== modified file 'bzrlib/weave.py'
--- a/bzrlib/weave.py	2005-07-11 02:06:42 +0000
+++ b/bzrlib/weave.py	2005-07-11 02:31:10 +0000
@@ -538,7 +538,10 @@
 
 
 def usage():
-    print """bzr weave tool:
+    print """bzr weave tool
+
+Experimental tool for weave algorithm.
+
 usage:
     weave init WEAVEFILE
         Create an empty weave file
@@ -556,6 +559,29 @@
         Display composite of all selected versions.
     weave merge WEAVEFILE VERSION1 VERSION2 > OUT
         Auto-merge two versions and display conflicts.
+
+example:
+
+    % weave init foo.weave
+    % vi foo.txt
+    % weave add foo.weave < foo.txt
+    added version 0
+
+    (create updated version)
+    % vi foo.txt
+    % weave get foo.weave 0 | diff -u - foo.txt
+    % weave add foo.weave 0 < foo.txt
+    added version 1
+
+    % weave get foo.weave 0 > foo.txt       (create forked version)
+    % vi foo.txt
+    % weave add foo.weave 0 < foo.txt
+    added version 2
+
+    % weave merge foo.weave 1 2 > foo.txt   (merge them)
+    % vi foo.txt                            (resolve conflicts)
+    % weave add foo.weave 1 2 < foo.txt     (commit merged version)     
+    
 """
     
 
@@ -605,11 +631,34 @@
             else:
                 print '%5d | %s' % (origin, text)
                 lasto = origin
+                
     elif cmd == 'info':
         weave_info(argv[2], sys.stdout)
+        
     elif cmd == 'check':
         w = readit()
         w.check()
+
+    elif cmd == 'merge':
+        if len(argv) != 5:
+            usage()
+            return 1
+
+        w = readit()
+        v1, v2 = map(int, argv[3:5])
+
+        basis = w.inclusions([v1]).intersection(w.inclusions([v2]))
+
+        base_lines = list(w.mash_iter(basis))
+        a_lines = list(w.get(v1))
+        b_lines = list(w.get(v2))
+
+        from bzrlib.merge3 import Merge3
+        m3 = Merge3(base_lines, a_lines, b_lines)
+
+        name_a = 'version %d' % v1
+        name_b = 'version %d' % v2
+        sys.stdout.writelines(m3.merge_lines(name_a=name_a, name_b=name_b))
     else:
         raise ValueError('unknown command %r' % cmd)
     



More information about the Pkg-bazaar-commits mailing list