~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-01 08:22:11 UTC
  • Revision ID: mbp@sourcefrog.net-20050401082211-da0a0e8911740407
- basic support for moving files to different directories - have not done support for renaming them yet, but should be straightforward - some tests, but many cases are not handled yet i think

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
__copyright__ = "Copyright (C) 2005 Canonical Ltd."
22
22
__author__ = "Martin Pool <mbp@canonical.com>"
23
23
 
24
 
import sys, os.path, types
 
24
import sys, os.path, types, re
25
25
from sets import Set
26
26
 
27
27
try:
543
543
        return self._byid.has_key(file_id)
544
544
 
545
545
 
 
546
    def rename(self, file_id, new_parent_id, new_name):
 
547
        """Move a file within the inventory.
 
548
 
 
549
        This can change either the name, or the parent, or both.
 
550
 
 
551
        This does not move the working file."""
 
552
        if not is_valid_name(new_name):
 
553
            bailout("not an acceptable filename: %r" % new_name)
 
554
 
 
555
        new_parent = self._byid[new_parent_id]
 
556
        if new_name in new_parent.children:
 
557
            bailout("%r already exists in %r" % (new_name, self.id2path(new_parent_id)))
 
558
 
 
559
        file_ie = self._byid[file_id]
 
560
        old_parent = self._byid[file_ie.parent_id]
 
561
 
 
562
        # TODO: Don't leave things messed up if this fails
 
563
 
 
564
        del old_parent.children[file_ie.name]
 
565
        new_parent.children[new_name] = file_ie
 
566
        
 
567
        file_ie.name = new_name
 
568
        file_ie.parent_id = new_parent_id
 
569
 
 
570
 
 
571
 
 
572
 
 
573
_NAME_RE = re.compile(r'^[^/\\]+$')
 
574
 
 
575
def is_valid_name(name):
 
576
    return bool(_NAME_RE.match(name))
546
577
 
547
578
 
548
579