Mercurial > public > mercurial-scm > hg
comparison mercurial/subrepo.py @ 24690:d1ddf1fe5d33
subrepo: use vfs.rmtree instead of shutil.rmtree
This patch also removes useless "shutil" import.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Sat, 11 Apr 2015 00:47:09 +0900 |
parents | 897a0715ee71 |
children | def1145cec2d |
comparison
equal
deleted
inserted
replaced
24689:ca3a90096c95 | 24690:d1ddf1fe5d33 |
---|---|
4 # | 4 # |
5 # This software may be used and distributed according to the terms of the | 5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. | 6 # GNU General Public License version 2 or any later version. |
7 | 7 |
8 import copy | 8 import copy |
9 import errno, os, re, shutil, posixpath, sys | 9 import errno, os, re, posixpath, sys |
10 import xml.dom.minidom | 10 import xml.dom.minidom |
11 import stat, subprocess, tarfile | 11 import stat, subprocess, tarfile |
12 from i18n import _ | 12 from i18n import _ |
13 import config, util, node, error, cmdutil, scmutil, match as matchmod | 13 import config, util, node, error, cmdutil, scmutil, match as matchmod |
14 import phases | 14 import phases |
777 other = hg.peer(self._repo, {}, srcurl) | 777 other = hg.peer(self._repo, {}, srcurl) |
778 if len(self._repo) == 0: | 778 if len(self._repo) == 0: |
779 self.ui.status(_('cloning subrepo %s from %s\n') | 779 self.ui.status(_('cloning subrepo %s from %s\n') |
780 % (subrelpath(self), srcurl)) | 780 % (subrelpath(self), srcurl)) |
781 parentrepo = self._repo._subparent | 781 parentrepo = self._repo._subparent |
782 shutil.rmtree(self._repo.path) | 782 # use self._repo.vfs instead of self.wvfs to remove .hg only |
783 self._repo.vfs.rmtree() | |
783 other, cloned = hg.clone(self._repo._subparent.baseui, {}, | 784 other, cloned = hg.clone(self._repo._subparent.baseui, {}, |
784 other, self._repo.root, | 785 other, self._repo.root, |
785 update=False) | 786 update=False) |
786 self._repo = cloned.local() | 787 self._repo = cloned.local() |
787 self._initrepo(parentrepo, source, create=True) | 788 self._initrepo(parentrepo, source, create=True) |
1112 self.ui.warn(_('not removing repo %s because ' | 1113 self.ui.warn(_('not removing repo %s because ' |
1113 'it has changes.\n') % self._path) | 1114 'it has changes.\n') % self._path) |
1114 return | 1115 return |
1115 self.ui.note(_('removing subrepo %s\n') % self._path) | 1116 self.ui.note(_('removing subrepo %s\n') % self._path) |
1116 | 1117 |
1117 def onerror(function, path, excinfo): | |
1118 if function is not os.remove: | |
1119 raise | |
1120 # read-only files cannot be unlinked under Windows | |
1121 s = os.stat(path) | |
1122 if (s.st_mode & stat.S_IWRITE) != 0: | |
1123 raise | |
1124 os.chmod(path, stat.S_IMODE(s.st_mode) | stat.S_IWRITE) | |
1125 os.remove(path) | |
1126 | |
1127 path = self._ctx.repo().wjoin(self._path) | 1118 path = self._ctx.repo().wjoin(self._path) |
1128 shutil.rmtree(path, onerror=onerror) | 1119 self.wvfs.rmtree(forcibly=True) |
1129 try: | 1120 try: |
1130 os.removedirs(os.path.dirname(path)) | 1121 os.removedirs(os.path.dirname(path)) |
1131 except OSError: | 1122 except OSError: |
1132 pass | 1123 pass |
1133 | 1124 |
1635 for f, kind in self.wvfs.readdir(): | 1626 for f, kind in self.wvfs.readdir(): |
1636 if f == '.git': | 1627 if f == '.git': |
1637 continue | 1628 continue |
1638 path = os.path.join(self._abspath, f) | 1629 path = os.path.join(self._abspath, f) |
1639 if kind == stat.S_IFDIR: | 1630 if kind == stat.S_IFDIR: |
1640 shutil.rmtree(path) | 1631 self.wvfs.rmtree(f) |
1641 else: | 1632 else: |
1642 os.remove(path) | 1633 os.remove(path) |
1643 | 1634 |
1644 def archive(self, archiver, prefix, match=None): | 1635 def archive(self, archiver, prefix, match=None): |
1645 total = 0 | 1636 total = 0 |