/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/workingtree_4.py

  • Committer: Andrew Bennetts
  • Date: 2009-07-17 01:48:56 UTC
  • mfrom: (4543 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4545.
  • Revision ID: andrew.bennetts@canonical.com-20090717014856-c8igd2f9abbi3v30
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
 
29
29
from bzrlib.lazy_import import lazy_import
30
30
lazy_import(globals(), """
31
 
from bisect import bisect_left
32
 
import collections
33
 
from copy import deepcopy
34
31
import errno
35
 
import itertools
36
 
import operator
37
32
import stat
38
 
from time import time
39
 
import warnings
40
33
 
41
34
import bzrlib
42
35
from bzrlib import (
43
36
    bzrdir,
44
37
    cache_utf8,
45
 
    conflicts as _mod_conflicts,
46
38
    debug,
47
 
    delta,
48
39
    dirstate,
49
40
    errors,
50
41
    generate_ids,
51
 
    globbing,
52
 
    ignores,
53
 
    merge,
54
42
    osutils,
55
43
    revision as _mod_revision,
56
44
    revisiontree,
57
 
    textui,
58
45
    trace,
59
46
    transform,
60
 
    urlutils,
61
47
    views,
62
 
    xml5,
63
 
    xml6,
64
48
    )
65
49
import bzrlib.branch
66
 
from bzrlib.transport import get_transport
67
50
import bzrlib.ui
68
51
""")
69
52
 
70
 
from bzrlib import symbol_versioning
71
53
from bzrlib.decorators import needs_read_lock, needs_write_lock
72
54
from bzrlib.filters import filtered_input_file, internal_size_sha_file_byname
73
 
from bzrlib.inventory import InventoryEntry, Inventory, ROOT_ID, entry_factory
 
55
from bzrlib.inventory import Inventory, ROOT_ID, entry_factory
74
56
import bzrlib.mutabletree
75
57
from bzrlib.mutabletree import needs_tree_write_lock
76
58
from bzrlib.osutils import (
77
59
    file_kind,
78
60
    isdir,
79
 
    normpath,
80
61
    pathjoin,
81
 
    rand_chars,
82
62
    realpath,
83
63
    safe_unicode,
84
 
    splitpath,
85
64
    )
86
 
from bzrlib.trace import mutter, note
 
65
from bzrlib.trace import mutter
87
66
from bzrlib.transport.local import LocalTransport
88
67
from bzrlib.tree import InterTree
89
 
from bzrlib.progress import DummyProgress, ProgressPhase
90
 
from bzrlib.revision import NULL_REVISION, CURRENT_REVISION
91
 
from bzrlib.rio import RioReader, rio_file, Stanza
92
 
from bzrlib.symbol_versioning import (deprecated_passed,
93
 
        deprecated_method,
94
 
        deprecated_function,
95
 
        DEPRECATED_PARAMETER,
96
 
        )
97
68
from bzrlib.tree import Tree
98
69
from bzrlib.workingtree import WorkingTree, WorkingTree3, WorkingTreeFormat3
99
70
 
716
687
            from_entry = self._get_entry(path=from_rel)
717
688
            if from_entry == (None, None):
718
689
                raise errors.BzrMoveFailedError(from_rel,to_dir,
719
 
                    errors.NotVersionedError(path=str(from_rel)))
 
690
                    errors.NotVersionedError(path=from_rel))
720
691
 
721
692
            from_id = from_entry[0][2]
722
693
            to_rel = pathjoin(to_dir, from_tail)
1051
1022
    def set_last_revision(self, new_revision):
1052
1023
        """Change the last revision in the working tree."""
1053
1024
        parents = self.get_parent_ids()
1054
 
        if new_revision in (NULL_REVISION, None):
 
1025
        if new_revision in (_mod_revision.NULL_REVISION, None):
1055
1026
            if len(parents) >= 2:
1056
1027
                raise AssertionError(
1057
1028
                    "setting the last parent to none with a pending merge is "
1224
1195
                # just forget the whole block.
1225
1196
                entry_index = 0
1226
1197
                while entry_index < len(block[1]):
1227
 
                    # Mark this file id as having been removed
1228
1198
                    entry = block[1][entry_index]
1229
 
                    ids_to_unversion.discard(entry[0][2])
1230
 
                    if (entry[1][0][0] in 'ar' # don't remove absent or renamed
1231
 
                                               # entries
1232
 
                        or not state._make_absent(entry)):
 
1199
                    if entry[1][0][0] in 'ar':
 
1200
                        # don't remove absent or renamed entries
1233
1201
                        entry_index += 1
 
1202
                    else:
 
1203
                        # Mark this file id as having been removed
 
1204
                        ids_to_unversion.discard(entry[0][2])
 
1205
                        if not state._make_absent(entry):
 
1206
                            # The block has not shrunk.
 
1207
                            entry_index += 1
1234
1208
                # go to the next block. (At the moment we dont delete empty
1235
1209
                # dirblocks)
1236
1210
                block_index += 1
1403
1377
        wt.lock_tree_write()
1404
1378
        try:
1405
1379
            self._init_custom_control_files(wt)
1406
 
            if revision_id in (None, NULL_REVISION):
 
1380
            if revision_id in (None, _mod_revision.NULL_REVISION):
1407
1381
                if branch.repository.supports_rich_root():
1408
1382
                    wt._set_root_id(generate_ids.gen_root_id())
1409
1383
                else:
1420
1394
                    pass
1421
1395
            if basis is None:
1422
1396
                basis = branch.repository.revision_tree(revision_id)
1423
 
            if revision_id == NULL_REVISION:
 
1397
            if revision_id == _mod_revision.NULL_REVISION:
1424
1398
                parents_list = []
1425
1399
            else:
1426
1400
                parents_list = [(revision_id, basis)]
2016
1990
                require_versioned, want_unversioned=want_unversioned)
2017
1991
        parent_ids = self.target.get_parent_ids()
2018
1992
        if not (self.source._revision_id in parent_ids
2019
 
                or self.source._revision_id == NULL_REVISION):
 
1993
                or self.source._revision_id == _mod_revision.NULL_REVISION):
2020
1994
            raise AssertionError(
2021
1995
                "revision {%s} is not stored in {%s}, but %s "
2022
1996
                "can only be used for trees stored in the dirstate"
2023
1997
                % (self.source._revision_id, self.target, self.iter_changes))
2024
1998
        target_index = 0
2025
 
        if self.source._revision_id == NULL_REVISION:
 
1999
        if self.source._revision_id == _mod_revision.NULL_REVISION:
2026
2000
            source_index = None
2027
2001
            indices = (target_index,)
2028
2002
        else:
2049
2023
        state._read_dirblocks_if_needed()
2050
2024
        if require_versioned:
2051
2025
            # -- check all supplied paths are versioned in a search tree. --
2052
 
            all_versioned = True
 
2026
            not_versioned = []
2053
2027
            for path in specific_files:
2054
2028
                path_entries = state._entries_for_path(path)
2055
2029
                if not path_entries:
2056
2030
                    # this specified path is not present at all: error
2057
 
                    all_versioned = False
2058
 
                    break
 
2031
                    not_versioned.append(path)
 
2032
                    continue
2059
2033
                found_versioned = False
2060
2034
                # for each id at this path
2061
2035
                for entry in path_entries:
2068
2042
                if not found_versioned:
2069
2043
                    # none of the indexes was not 'absent' at all ids for this
2070
2044
                    # path.
2071
 
                    all_versioned = False
2072
 
                    break
2073
 
            if not all_versioned:
2074
 
                raise errors.PathsNotVersionedError(specific_files)
 
2045
                    not_versioned.append(path)
 
2046
            if len(not_versioned) > 0:
 
2047
                raise errors.PathsNotVersionedError(not_versioned)
2075
2048
        # -- remove redundancy in supplied specific_files to prevent over-scanning --
2076
2049
        search_specific_files = osutils.minimum_path_selection(specific_files)
2077
2050
 
2091
2064
            (revisiontree.RevisionTree, DirStateRevisionTree)):
2092
2065
            return False
2093
2066
        # the source revid must be in the target dirstate
2094
 
        if not (source._revision_id == NULL_REVISION or
 
2067
        if not (source._revision_id == _mod_revision.NULL_REVISION or
2095
2068
            source._revision_id in target.get_parent_ids()):
2096
2069
            # TODO: what about ghosts? it may well need to
2097
2070
            # check for them explicitly.