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

  • Committer: Jelmer Vernooij
  • Date: 2018-03-14 03:46:07 UTC
  • mto: (0.200.1859 work)
  • mto: This revision was merged to the branch mainline in revision 6960.
  • Revision ID: jelmer@jelmer.uk-20180314034607-i2ws1fxaen311iu9
Implement MemoryTree.rename_one, MemoryTree.mkdir.

Show diffs side-by-side

added added

removed removed

Lines of Context:
261
261
        file_id = self._fileid_map.lookup_file_id(path)
262
262
        ie = inventory.InventoryDirectory(file_id,
263
263
            posixpath.basename(path).decode("utf-8"), parent_id)
264
 
        ie.revision = self.get_file_revision(path)
 
264
        ie.revision = self.get_file_revision(path.decode('utf-8'))
265
265
        return ie
266
266
 
267
267
    def iter_children(self, file_id):
781
781
                self._index_add_entry(new_path, ie.kind)
782
782
        self.flush()
783
783
        self._set_merges_from_parent_ids([])
 
784
 
 
785
    def move(self, from_paths, to_dir=None, after=None):
 
786
        rename_tuples = []
 
787
        with self.lock_tree_write():
 
788
            to_abs = self.abspath(to_dir)
 
789
            if not os.path.isdir(to_abs):
 
790
                raise errors.BzrMoveFailedError('', to_dir,
 
791
                    errors.NotADirectory(to_abs))
 
792
 
 
793
            for from_rel in from_paths:
 
794
                from_tail = os.path.split(from_rel)[-1]
 
795
                to_rel = os.path.join(to_dir, from_tail)
 
796
                self.rename_one(from_rel, to_rel, after=after)
 
797
                rename_tuples.append((from_rel, to_rel))
 
798
            self.flush()
 
799
            return rename_tuples
 
800
 
 
801
    def rename_one(self, from_rel, to_rel, after=None):
 
802
        from_path = from_rel.encode("utf-8")
 
803
        to_rel, can_access = osutils.normalized_filename(to_rel)
 
804
        if not can_access:
 
805
            raise errors.InvalidNormalization(to_rel)
 
806
        to_path = to_rel.encode("utf-8")
 
807
        with self.lock_tree_write():
 
808
            if not after:
 
809
                # Perhaps it's already moved?
 
810
                after = (
 
811
                    not self.has_filename(from_rel) and
 
812
                    self.has_filename(to_rel) and
 
813
                    not self.is_versioned(to_rel))
 
814
            if after:
 
815
                if not self.has_filename(to_rel):
 
816
                    raise errors.BzrMoveFailedError(from_rel, to_rel,
 
817
                        errors.NoSuchFile(to_rel))
 
818
                if self.basis_tree().is_versioned(to_rel):
 
819
                    raise errors.BzrMoveFailedError(from_rel, to_rel,
 
820
                        errors.AlreadyVersionedError(to_rel))
 
821
 
 
822
                kind = self.kind(to_rel)
 
823
            else:
 
824
                try:
 
825
                    to_kind = self.kind(to_rel)
 
826
                except errors.NoSuchFile:
 
827
                    exc_type = errors.BzrRenameFailedError
 
828
                    to_kind = None
 
829
                else:
 
830
                    exc_type = errors.BzrMoveFailedError
 
831
                if self.is_versioned(to_rel):
 
832
                    raise exc_type(from_rel, to_rel,
 
833
                        errors.AlreadyVersionedError(to_rel))
 
834
                if not self.has_filename(from_rel):
 
835
                    raise errors.BzrMoveFailedError(from_rel, to_rel,
 
836
                        errors.NoSuchFile(from_rel))
 
837
                if not self.is_versioned(from_rel):
 
838
                    raise exc_type(from_rel, to_rel,
 
839
                        errors.NotVersionedError(from_rel))
 
840
                if self.has_filename(to_rel):
 
841
                    raise errors.RenameFailedFilesExist(
 
842
                        from_rel, to_rel, errors.FileExists(to_rel))
 
843
 
 
844
                kind = self.kind(from_rel)
 
845
 
 
846
            if not after and not from_path in self.index and kind != 'directory':
 
847
                # It's not a file
 
848
                raise errors.BzrMoveFailedError(from_rel, to_rel,
 
849
                    errors.NotVersionedError(path=from_rel))
 
850
 
 
851
            if not after:
 
852
                try:
 
853
                    self._rename_one(from_rel, to_rel)
 
854
                except OSError as e:
 
855
                    if e.errno == errno.ENOENT:
 
856
                        raise errors.BzrMoveFailedError(from_rel, to_rel,
 
857
                            errors.NoSuchFile(to_rel))
 
858
                    raise
 
859
            if kind != 'directory':
 
860
                try:
 
861
                    del self.index[from_path]
 
862
                except KeyError:
 
863
                    pass
 
864
                self._index_add_entry(to_rel, kind)
 
865
            else:
 
866
                todo = [p for p in self.index if p.startswith(from_path+'/')]
 
867
                for p in todo:
 
868
                    self.index[posixpath.join(to_path, posixpath.relpath(p, from_path))] = self.index[p]
 
869
                    del self.index[p]
 
870
 
 
871
            self._versioned_dirs = None
 
872
            self.flush()