/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/memorytree.py

  • Committer: Robert Collins
  • Date: 2008-09-24 07:33:56 UTC
  • mto: This revision was merged to the branch mainline in revision 3734.
  • Revision ID: robertc@robertcollins.net-20080924073356-dfg5qqbd7f74mwmt
Work around ReST FAIL.

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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""MemoryTree object.
18
18
 
20
20
"""
21
21
 
22
22
 
23
 
import os
 
23
from copy import deepcopy
24
24
 
25
25
from bzrlib import (
26
26
    errors,
27
27
    mutabletree,
28
28
    revision as _mod_revision,
29
29
    )
30
 
from bzrlib.decorators import needs_read_lock
 
30
from bzrlib.decorators import needs_read_lock, needs_write_lock
31
31
from bzrlib.osutils import sha_file
32
32
from bzrlib.mutabletree import needs_tree_write_lock
33
33
from bzrlib.transport.memory import MemoryTransport
35
35
 
36
36
class MemoryTree(mutabletree.MutableTree):
37
37
    """A MemoryTree is a specialisation of MutableTree.
38
 
 
 
38
    
39
39
    It maintains nearly no state outside of read_lock and write_lock
40
40
    transactions. (it keeps a reference to the branch, and its last-revision
41
41
    only).
72
72
 
73
73
    def _gather_kinds(self, files, kinds):
74
74
        """See MutableTree._gather_kinds.
75
 
 
 
75
        
76
76
        This implementation does not care about the file kind of
77
77
        missing files, so is a no-op.
78
78
        """
99
99
            return None, False, None
100
100
        return entry.kind, entry.executable, None
101
101
 
102
 
    @needs_tree_write_lock
103
 
    def rename_one(self, from_rel, to_rel):
104
 
        file_id = self.path2id(from_rel)
105
 
        to_dir, to_tail = os.path.split(to_rel)
106
 
        to_parent_id = self.path2id(to_dir)
107
 
        self._file_transport.move(from_rel, to_rel)
108
 
        self._inventory.rename(file_id, to_parent_id, to_tail)
109
 
 
110
102
    def path_content_summary(self, path):
111
103
        """See Tree.path_content_summary."""
112
104
        id = self.path2id(path)
210
202
 
211
203
    def _populate_from_branch(self):
212
204
        """Populate the in-tree state from the branch."""
213
 
        self._set_basis()
 
205
        self._basis_tree = self.branch.repository.revision_tree(
 
206
            self._branch_revision_id)
214
207
        if self._branch_revision_id == _mod_revision.NULL_REVISION:
215
208
            self._parent_ids = []
216
209
        else:
217
210
            self._parent_ids = [self._branch_revision_id]
218
 
        self._inventory = self._basis_tree._inventory._get_mutable_inventory()
 
211
        self._inventory = deepcopy(self._basis_tree._inventory)
219
212
        self._file_transport = MemoryTransport()
220
213
        # TODO copy the revision trees content, or do it lazy, or something.
221
214
        inventory_entries = self._inventory.iter_entries()
277
270
            _mod_revision.check_not_reserved_id(revision_id)
278
271
        if len(revision_ids) == 0:
279
272
            self._parent_ids = []
280
 
            self._branch_revision_id = _mod_revision.NULL_REVISION
 
273
            self._basis_tree = self.branch.repository.revision_tree(
 
274
                                    _mod_revision.NULL_REVISION)
281
275
        else:
282
276
            self._parent_ids = revision_ids
 
277
            self._basis_tree = self.branch.repository.revision_tree(
 
278
                                    revision_ids[0])
283
279
            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
297
280
 
298
281
    def set_parent_trees(self, parents_list, allow_leftmost_as_ghost=False):
299
282
        """See MutableTree.set_parent_trees()."""