~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/memorytree.py

  • Committer: Andrew Bennetts
  • Date: 2010-06-25 06:47:40 UTC
  • mto: (5050.3.16 2.2)
  • mto: This revision was merged to the branch mainline in revision 5365.
  • Revision ID: andrew.bennetts@canonical.com-20100625064740-k93ngat248kdcqdm
Remove merge_into_helper for now, as it currently has no callers.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""MemoryTree object.
18
18
 
20
20
"""
21
21
 
22
22
 
23
 
from copy import deepcopy
24
23
import os
25
24
 
26
25
from bzrlib import (
27
26
    errors,
28
27
    mutabletree,
29
 
    osutils,
30
28
    revision as _mod_revision,
31
29
    )
32
 
from bzrlib.decorators import needs_read_lock, needs_write_lock
 
30
from bzrlib.decorators import needs_read_lock
33
31
from bzrlib.osutils import sha_file
34
32
from bzrlib.mutabletree import needs_tree_write_lock
35
33
from bzrlib.transport.memory import MemoryTransport
37
35
 
38
36
class MemoryTree(mutabletree.MutableTree):
39
37
    """A MemoryTree is a specialisation of MutableTree.
40
 
    
 
38
 
41
39
    It maintains nearly no state outside of read_lock and write_lock
42
40
    transactions. (it keeps a reference to the branch, and its last-revision
43
41
    only).
74
72
 
75
73
    def _gather_kinds(self, files, kinds):
76
74
        """See MutableTree._gather_kinds.
77
 
        
 
75
 
78
76
        This implementation does not care about the file kind of
79
77
        missing files, so is a no-op.
80
78
        """
212
210
 
213
211
    def _populate_from_branch(self):
214
212
        """Populate the in-tree state from the branch."""
215
 
        self._basis_tree = self.branch.repository.revision_tree(
216
 
            self._branch_revision_id)
 
213
        self._set_basis()
217
214
        if self._branch_revision_id == _mod_revision.NULL_REVISION:
218
215
            self._parent_ids = []
219
216
        else:
220
217
            self._parent_ids = [self._branch_revision_id]
221
 
        self._inventory = deepcopy(self._basis_tree._inventory)
 
218
        self._inventory = self._basis_tree._inventory._get_mutable_inventory()
222
219
        self._file_transport = MemoryTransport()
223
220
        # TODO copy the revision trees content, or do it lazy, or something.
224
221
        inventory_entries = self._inventory.iter_entries()
280
277
            _mod_revision.check_not_reserved_id(revision_id)
281
278
        if len(revision_ids) == 0:
282
279
            self._parent_ids = []
283
 
            self._basis_tree = self.branch.repository.revision_tree(
284
 
                                    _mod_revision.NULL_REVISION)
 
280
            self._branch_revision_id = _mod_revision.NULL_REVISION
285
281
        else:
286
282
            self._parent_ids = revision_ids
287
 
            self._basis_tree = self.branch.repository.revision_tree(
288
 
                                    revision_ids[0])
289
283
            self._branch_revision_id = revision_ids[0]
 
284
        self._allow_leftmost_as_ghost = allow_leftmost_as_ghost
 
285
        self._set_basis()
 
286
    
 
287
    def _set_basis(self):
 
288
        try:
 
289
            self._basis_tree = self.branch.repository.revision_tree(
 
290
                self._branch_revision_id)
 
291
        except errors.NoSuchRevision:
 
292
            if self._allow_leftmost_as_ghost:
 
293
                self._basis_tree = self.branch.repository.revision_tree(
 
294
                    _mod_revision.NULL_REVISION)
 
295
            else:
 
296
                raise
290
297
 
291
298
    def set_parent_trees(self, parents_list, allow_leftmost_as_ghost=False):
292
299
        """See MutableTree.set_parent_trees()."""