1
 
*** modified file 'bzrlib/merge.py'
 
5
 
     location, revno = treespec
 
6
 
     branch = find_branch(location)
 
10
 
+        rev_id = branch.last_patch()
 
12
 
+        rev_id = branch.lookup_revision(revno)
 
13
 
+    return branch, get_revid_tree(branch, rev_id, temp_root, label)
 
15
 
+def get_revid_tree(branch, rev_id, temp_root, label):
 
17
 
         base_tree = branch.working_tree()
 
19
 
-        base_tree = branch.basis_tree()
 
21
 
-        base_tree = branch.revision_tree(branch.lookup_revision(revno))
 
22
 
+        base_tree = branch.revision_tree(rev_id)
 
23
 
     temp_path = os.path.join(temp_root, label)
 
25
 
-    return branch, MergeTree(base_tree, temp_path)
 
26
 
+    return MergeTree(base_tree, temp_path)
 
29
 
 def abspath(tree, file_id):
 
31
 
         If true, this_dir must have no uncommitted changes before the
 
34
 
+    from bzrlib.revision import common_ancestor, MultipleRevisionSources
 
35
 
+    from bzrlib.branch import NoSuchRevision
 
36
 
     tempdir = tempfile.mkdtemp(prefix="bzr-")
 
40
 
         this_branch = find_branch(this_dir)
 
41
 
+        this_rev_id = this_branch.last_patch()
 
42
 
+        if this_rev_id is None:
 
43
 
+            raise BzrCommandError("This branch has no commits")
 
45
 
             changes = compare_trees(this_branch.working_tree(), 
 
46
 
                                     this_branch.basis_tree(), False)
 
47
 
             if changes.has_changed():
 
48
 
                 raise BzrCommandError("Working tree has uncommitted changes.")
 
49
 
         other_branch, other_tree = get_tree(other_revision, tempdir, "other")
 
50
 
+        if other_revision[1] == -1:
 
51
 
+            other_rev_id = other_branch.last_patch()
 
52
 
+            other_basis = other_rev_id
 
53
 
+        elif other_revision[1] is not None:
 
54
 
+            other_rev_id = other_branch.lookup_revision(other_revision[1])
 
55
 
+            other_basis = other_rev_id
 
58
 
+            other_basis = other_branch.last_patch()
 
59
 
         if base_revision == [None, None]:
 
60
 
             if other_revision[1] == -1:
 
63
 
                 o_revno = other_revision[1]
 
64
 
-            base_revno = this_branch.common_ancestor(other_branch, 
 
65
 
-                                                     other_revno=o_revno)[0]
 
66
 
-            if base_revno is None:
 
67
 
+            base_rev_id = common_ancestor(this_rev_id, other_basis,
 
68
 
+                                          MultipleRevisionSources(this_branch, 
 
70
 
+            if base_rev_id is None:
 
71
 
                 raise UnrelatedBranches()
 
72
 
-            base_revision = ['.', base_revno]
 
73
 
-        base_branch, base_tree = get_tree(base_revision, tempdir, "base")
 
75
 
+                base_revision = this_branch.get_revision(base_rev_id)
 
76
 
+                base_branch = this_branch
 
77
 
+            except NoSuchRevision:
 
78
 
+                base_branch = other_branch
 
79
 
+            base_tree = get_revid_tree(base_branch, base_rev_id, tempdir, 
 
81
 
+            base_is_ancestor = True
 
83
 
+            base_branch, base_tree = get_tree(base_revision, tempdir, "base")
 
84
 
+            if base_revision[1] == -1:
 
85
 
+                base_rev_id = base_branch.last_patch()
 
86
 
+            elif base_revision[1] is None:
 
89
 
+                base_rev_id = base_branch.lookup_revision(base_revision[1])
 
90
 
+            if base_rev_id is not None:
 
91
 
+                base_is_ancestor = is_ancestor(this_rev_id, base_rev_id, 
 
92
 
+                                               MultipleRevisionSources(
 
96
 
+                base_is_ancestor = False
 
97
 
         merge_inner(this_branch, other_tree, base_tree, tempdir, 
 
98
 
                     ignore_zero=ignore_zero)
 
99
 
+        if base_is_ancestor and other_rev_id is not None:
 
100
 
+            this_branch.add_pending_merge(other_rev_id)
 
102
 
         shutil.rmtree(tempdir)