~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: John Arbash Meinel
  • Date: 2006-09-12 20:02:29 UTC
  • mto: This revision was merged to the branch mainline in revision 2071.
  • Revision ID: john@arbash-meinel.com-20060912200229-4a1c12aead0f0b30
Demandloading builtins.py drops our load time from 350ms to 291ms

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""builtin bzr commands"""
18
18
 
 
19
import os
19
20
 
 
21
from bzrlib.lazy_import import lazy_import
 
22
lazy_import(globals(), """
20
23
import codecs
21
24
import errno
22
 
import os
23
 
import os.path
24
25
import sys
25
26
 
26
27
import bzrlib
32
33
    errors,
33
34
    ignores,
34
35
    log,
 
36
    merge,
35
37
    osutils,
36
38
    repository,
37
39
    transport,
38
40
    ui,
39
41
    urlutils,
40
42
    )
41
 
from bzrlib.branch import Branch, BranchReferenceFormat
42
 
from bzrlib.bundle import read_bundle_from_url
 
43
from bzrlib.branch import Branch
43
44
from bzrlib.bundle.apply_bundle import install_bundle, merge_bundle
44
45
from bzrlib.conflicts import ConflictList
 
46
from bzrlib.revision import common_ancestor
 
47
from bzrlib.revisionspec import RevisionSpec
 
48
from bzrlib.workingtree import WorkingTree
 
49
""")
 
50
 
45
51
from bzrlib.commands import Command, display_command
46
 
from bzrlib.errors import (BzrError, BzrCheckError, BzrCommandError, 
 
52
from bzrlib.errors import (BzrError, BzrCheckError, BzrCommandError,
47
53
                           NotBranchError, DivergedBranches, NotConflicted,
48
54
                           NoSuchFile, NoWorkingTree, FileInWrongBranch,
49
55
                           NotVersionedError, NotABundle)
50
 
from bzrlib.merge import Merge3Merger
51
56
from bzrlib.option import Option
52
57
from bzrlib.progress import DummyProgress, ProgressPhase
53
 
from bzrlib.revision import common_ancestor
54
 
from bzrlib.revisionspec import RevisionSpec
55
58
from bzrlib.trace import mutter, note, log_error, warning, is_quiet, info
56
59
from bzrlib.transport.local import LocalTransport
57
 
from bzrlib.workingtree import WorkingTree
58
60
 
59
61
 
60
62
def tree_files(file_list, default_branch=u'.'):
294
296
                base_tree, base_path = WorkingTree.open_containing(
295
297
                                            file_ids_from)
296
298
            except errors.NoWorkingTree:
297
 
                base_branch, base_path = branch.Branch.open_containing(
 
299
                base_branch, base_path = Branch.open_containing(
298
300
                                            file_ids_from)
299
301
                base_tree = base_branch.basis_tree()
300
302
 
2040
2042
    
2041
2043
    @display_command
2042
2044
    def run(self, branch, other):
2043
 
        from bzrlib.revision import common_ancestor, MultipleRevisionSources
 
2045
        from bzrlib.revision import MultipleRevisionSources
2044
2046
        
2045
2047
        branch1 = Branch.open_containing(branch)[0]
2046
2048
        branch2 = Branch.open_containing(other)[0]
2108
2110
                            ' from a working copy, instead of branch changes')]
2109
2111
 
2110
2112
    def help(self):
2111
 
        from merge import merge_type_help
2112
2113
        from inspect import getdoc
2113
 
        return getdoc(self) + '\n' + merge_type_help() 
 
2114
        return getdoc(self) + '\n' + merge.merge_type_help()
2114
2115
 
2115
2116
    def run(self, branch=None, revision=None, force=False, merge_type=None,
2116
2117
            show_base=False, reprocess=False, remember=False, 
2117
2118
            uncommitted=False):
2118
2119
        if merge_type is None:
2119
 
            merge_type = Merge3Merger
 
2120
            merge_type = merge.Merge3Merger
2120
2121
 
2121
2122
        tree = WorkingTree.open_containing(u'.')[0]
2122
2123
 
2172
2173
        pb = ui.ui_factory.nested_progress_bar()
2173
2174
        try:
2174
2175
            try:
2175
 
                conflict_count = merge(other, base, check_clean=(not force),
2176
 
                                       merge_type=merge_type,
2177
 
                                       reprocess=reprocess,
2178
 
                                       show_base=show_base,
2179
 
                                       pb=pb, file_list=interesting_files)
 
2176
                conflict_count = _merge_helper(
 
2177
                    other, base, check_clean=(not force),
 
2178
                    merge_type=merge_type,
 
2179
                    reprocess=reprocess,
 
2180
                    show_base=show_base,
 
2181
                    pb=pb, file_list=interesting_files)
2180
2182
            finally:
2181
2183
                pb.finished()
2182
2184
            if conflict_count != 0:
2236
2238
                            "conflicts")]
2237
2239
 
2238
2240
    def help(self):
2239
 
        from merge import merge_type_help
2240
2241
        from inspect import getdoc
2241
 
        return getdoc(self) + '\n' + merge_type_help() 
 
2242
        return getdoc(self) + '\n' + merge.merge_type_help()
2242
2243
 
2243
2244
    def run(self, file_list=None, merge_type=None, show_base=False,
2244
2245
            reprocess=False):
2245
 
        from bzrlib.merge import merge_inner, transform_tree
2246
2246
        if merge_type is None:
2247
 
            merge_type = Merge3Merger
 
2247
            merge_type = merge.Merge3Merger
2248
2248
        tree, file_list = tree_files(file_list)
2249
2249
        tree.lock_write()
2250
2250
        try:
2274
2274
                    for name, ie in tree.inventory.iter_entries(file_id):
2275
2275
                        interesting_ids.add(ie.file_id)
2276
2276
                new_conflicts = conflicts.select_conflicts(tree, file_list)[0]
2277
 
            transform_tree(tree, tree.basis_tree(), interesting_ids)
 
2277
            merge.transform_tree(tree, tree.basis_tree(), interesting_ids)
2278
2278
            tree.set_conflicts(ConflictList(new_conflicts))
2279
2279
            if file_list is None:
2280
2280
                restore_files = list(tree.iter_conflicts())
2285
2285
                    restore(tree.abspath(filename))
2286
2286
                except NotConflicted:
2287
2287
                    pass
2288
 
            conflicts = merge_inner(tree.branch, other_tree, base_tree,
2289
 
                                    this_tree=tree,
2290
 
                                    interesting_ids=interesting_ids,
2291
 
                                    other_rev_id=parents[1],
2292
 
                                    merge_type=merge_type,
2293
 
                                    show_base=show_base,
2294
 
                                    reprocess=reprocess)
 
2288
            conflicts = merge.merge_inner(tree.branch, other_tree, base_tree,
 
2289
                                          this_tree=tree,
 
2290
                                          interesting_ids=interesting_ids,
 
2291
                                          other_rev_id=parents[1],
 
2292
                                          merge_type=merge_type,
 
2293
                                          show_base=show_base,
 
2294
                                          reprocess=reprocess)
2295
2295
        finally:
2296
2296
            tree.unlock()
2297
2297
        if conflicts > 0:
2744
2744
 
2745
2745
 
2746
2746
# command-line interpretation helper for merge-related commands
2747
 
def merge(other_revision, base_revision,
2748
 
          check_clean=True, ignore_zero=False,
2749
 
          this_dir=None, backup_files=False, merge_type=Merge3Merger,
2750
 
          file_list=None, show_base=False, reprocess=False,
2751
 
          pb=DummyProgress()):
 
2747
def _merge_helper(other_revision, base_revision,
 
2748
                  check_clean=True, ignore_zero=False,
 
2749
                  this_dir=None, backup_files=False,
 
2750
                  merge_type=merge.Merge3Merger,
 
2751
                  file_list=None, show_base=False, reprocess=False,
 
2752
                  pb=DummyProgress()):
2752
2753
    """Merge changes into a tree.
2753
2754
 
2754
2755
    base_revision
2776
2777
    clients might prefer to call merge.merge_inner(), which has less magic 
2777
2778
    behavior.
2778
2779
    """
2779
 
    from bzrlib.merge import Merger
2780
2780
    if this_dir is None:
2781
2781
        this_dir = u'.'
2782
2782
    this_tree = WorkingTree.open_containing(this_dir)[0]
2783
 
    if show_base and not merge_type is Merge3Merger:
 
2783
    if show_base and not merge_type is merge.Merge3Merger:
2784
2784
        raise BzrCommandError("Show-base is not supported for this merge"
2785
2785
                              " type. %s" % merge_type)
2786
2786
    if reprocess and not merge_type.supports_reprocess:
2789
2789
    if reprocess and show_base:
2790
2790
        raise BzrCommandError("Cannot do conflict reduction and show base.")
2791
2791
    try:
2792
 
        merger = Merger(this_tree.branch, this_tree=this_tree, pb=pb)
 
2792
        merger = merge.Merger(this_tree.branch, this_tree=this_tree, pb=pb)
2793
2793
        merger.pp = ProgressPhase("Merge phase", 5, pb)
2794
2794
        merger.pp.next_phase()
2795
2795
        merger.check_basis(check_clean)