~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/inventory.py

  • Committer: mbp at sourcefrog
  • Date: 2005-04-05 09:05:32 UTC
  • Revision ID: mbp@sourcefrog.net-20050405090532-af541f6893fd6b75
- clearer check against attempts to introduce directory loops in   the inventory

Show diffs side-by-side

added added

removed removed

Lines of Context:
499
499
        return 0
500
500
 
501
501
 
 
502
    def get_idpath(self, file_id):
 
503
        """Return a list of file_ids for the path to an entry.
 
504
 
 
505
        The list contains one element for each directory followed by
 
506
        the id of the file itself.  So the length of the returned list
 
507
        is equal to the depth of the file in the tree, counting the
 
508
        root directory as depth 0.
 
509
        """
 
510
        p = []
 
511
        while file_id != None:
 
512
            ie = self._byid[file_id]
 
513
            p.insert(0, ie.file_id)
 
514
            file_id = ie.parent_id
 
515
        return p
 
516
 
 
517
 
502
518
    def id2path(self, file_id):
503
519
        """Return as a list the path to file_id."""
504
520
        p = []
556
572
        if new_name in new_parent.children:
557
573
            bailout("%r already exists in %r" % (new_name, self.id2path(new_parent_id)))
558
574
 
 
575
        new_parent_idpath = self.get_idpath(new_parent_id)
 
576
        if file_id in new_parent_idpath:
 
577
            bailout("cannot move directory %r into a subdirectory of itself, %r"
 
578
                    % (self.id2path(file_id), self.id2path(new_parent_id)))
 
579
 
559
580
        file_ie = self._byid[file_id]
560
581
        old_parent = self._byid[file_ie.parent_id]
561
582