~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: Aaron Bentley
  • Date: 2005-11-11 17:26:22 UTC
  • mto: (1185.65.2 bzr.revision-storage)
  • mto: This revision was merged to the branch mainline in revision 1509.
  • Revision ID: aaron.bentley@utoronto.ca-20051111172622-bff7851191b357b9
Support diff with two branches as input.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
 
39
39
 
40
40
def branch_files(file_list, default_branch='.'):
 
41
    try:
 
42
        return inner_branch_files(file_list, default_branch)
 
43
    except NotBranchError:
 
44
        raise BzrCommandError("%s is not in the same branch as %s" %
 
45
                             (filename, file_list[0]))
 
46
 
 
47
def inner_branch_files(file_list, default_branch='.'):
41
48
    """\
42
49
    Return a branch and list of branch-relative paths.
43
50
    If supplied file_list is empty or None, the branch default will be used,
54
61
    tree = WorkingTree(b.base, b)
55
62
    new_list = []
56
63
    for filename in file_list:
57
 
        try:
58
 
            new_list.append(tree.relpath(filename))
59
 
        except NotBranchError:
60
 
            raise BzrCommandError("%s is not in the same branch as %s" % 
61
 
                                  (filename, file_list[0]))
 
64
        new_list.append(tree.relpath(filename))
62
65
    return b, new_list
63
66
 
64
67
 
726
729
    @display_command
727
730
    def run(self, revision=None, file_list=None, diff_options=None):
728
731
        from bzrlib.diff import show_diff
729
 
        
730
 
        b, file_list = branch_files(file_list)
 
732
        try:
 
733
            b, file_list = inner_branch_files(file_list)
 
734
            b2 = None
 
735
        except NotBranchError:
 
736
            if len(file_list) != 2:
 
737
                raise BzrCommandError("Files are in different branches")
 
738
 
 
739
            b, file1 = Branch.open_containing(file_list[0])
 
740
            b2, file2 = Branch.open_containing(file_list[1])
 
741
            if file1 != "" or file2 != "":
 
742
                raise BzrCommandError("Files are in different branches")
 
743
            file_list = None
731
744
        if revision is not None:
 
745
            if b2 is not None:
 
746
                raise BzrCommandError("Can't specify -r with two branches")
732
747
            if len(revision) == 1:
733
748
                return show_diff(b, revision[0], specific_files=file_list,
734
749
                                 external_diff_options=diff_options)
740
755
                raise BzrCommandError('bzr diff --revision takes exactly one or two revision identifiers')
741
756
        else:
742
757
            return show_diff(b, None, specific_files=file_list,
743
 
                             external_diff_options=diff_options)
 
758
                             external_diff_options=diff_options, b2=b2)
744
759
 
745
760
 
746
761
class cmd_deleted(Command):