~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

Merge from bzr.ab

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
 
729
732
    @display_command
730
733
    def run(self, revision=None, file_list=None, diff_options=None):
731
734
        from bzrlib.diff import show_diff
732
 
        
733
 
        b, file_list = branch_files(file_list)
 
735
        try:
 
736
            b, file_list = inner_branch_files(file_list)
 
737
            b2 = None
 
738
        except NotBranchError:
 
739
            if len(file_list) != 2:
 
740
                raise BzrCommandError("Files are in different branches")
 
741
 
 
742
            b, file1 = Branch.open_containing(file_list[0])
 
743
            b2, file2 = Branch.open_containing(file_list[1])
 
744
            if file1 != "" or file2 != "":
 
745
                raise BzrCommandError("Files are in different branches")
 
746
            file_list = None
734
747
        if revision is not None:
 
748
            if b2 is not None:
 
749
                raise BzrCommandError("Can't specify -r with two branches")
735
750
            if len(revision) == 1:
736
751
                return show_diff(b, revision[0], specific_files=file_list,
737
752
                                 external_diff_options=diff_options)
743
758
                raise BzrCommandError('bzr diff --revision takes exactly one or two revision identifiers')
744
759
        else:
745
760
            return show_diff(b, None, specific_files=file_list,
746
 
                             external_diff_options=diff_options)
 
761
                             external_diff_options=diff_options, b2=b2)
747
762
 
748
763
 
749
764
class cmd_deleted(Command):