~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/memorytree.py

  • Committer: Matt Nordhoff
  • Date: 2009-04-04 02:50:01 UTC
  • mfrom: (4253 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4256.
  • Revision ID: mnordhoff@mattnordhoff.com-20090404025001-z1403k0tatmc8l91
Merge bzr.dev, fixing conflicts.

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 (
37
36
 
38
37
class MemoryTree(mutabletree.MutableTree):
39
38
    """A MemoryTree is a specialisation of MutableTree.
40
 
    
 
39
 
41
40
    It maintains nearly no state outside of read_lock and write_lock
42
41
    transactions. (it keeps a reference to the branch, and its last-revision
43
42
    only).
74
73
 
75
74
    def _gather_kinds(self, files, kinds):
76
75
        """See MutableTree._gather_kinds.
77
 
        
 
76
 
78
77
        This implementation does not care about the file kind of
79
78
        missing files, so is a no-op.
80
79
        """
212
211
 
213
212
    def _populate_from_branch(self):
214
213
        """Populate the in-tree state from the branch."""
215
 
        self._basis_tree = self.branch.repository.revision_tree(
216
 
            self._branch_revision_id)
 
214
        self._set_basis()
217
215
        if self._branch_revision_id == _mod_revision.NULL_REVISION:
218
216
            self._parent_ids = []
219
217
        else:
220
218
            self._parent_ids = [self._branch_revision_id]
221
 
        self._inventory = deepcopy(self._basis_tree._inventory)
 
219
        self._inventory = self._basis_tree._inventory._get_mutable_inventory()
222
220
        self._file_transport = MemoryTransport()
223
221
        # TODO copy the revision trees content, or do it lazy, or something.
224
222
        inventory_entries = self._inventory.iter_entries()
280
278
            _mod_revision.check_not_reserved_id(revision_id)
281
279
        if len(revision_ids) == 0:
282
280
            self._parent_ids = []
283
 
            self._basis_tree = self.branch.repository.revision_tree(
284
 
                                    _mod_revision.NULL_REVISION)
 
281
            self._branch_revision_id = _mod_revision.NULL_REVISION
285
282
        else:
286
283
            self._parent_ids = revision_ids
287
 
            self._basis_tree = self.branch.repository.revision_tree(
288
 
                                    revision_ids[0])
289
284
            self._branch_revision_id = revision_ids[0]
 
285
        self._allow_leftmost_as_ghost = allow_leftmost_as_ghost
 
286
        self._set_basis()
 
287
    
 
288
    def _set_basis(self):
 
289
        try:
 
290
            self._basis_tree = self.branch.repository.revision_tree(
 
291
                self._branch_revision_id)
 
292
        except errors.NoSuchRevision:
 
293
            if self._allow_leftmost_as_ghost:
 
294
                self._basis_tree = self.branch.repository.revision_tree(
 
295
                    _mod_revision.NULL_REVISION)
 
296
            else:
 
297
                raise
290
298
 
291
299
    def set_parent_trees(self, parents_list, allow_leftmost_as_ghost=False):
292
300
        """See MutableTree.set_parent_trees()."""