context: use "vfs.lstat()" to examine target path instead of "os.path.*"

This patch gets stat object of target path by "vfs.lstat()", and
examines stat object to know the type of it. This follows the way in
"workingctx.add()".

This should be cheaper than original implementation invoking
"lexists()", "isfile()" and "islink()".
This commit is contained in:
FUJIWARA Katsunori 2013-10-15 00:51:05 +09:00
parent 269961e114
commit 52c2363e13

View File

@ -1173,10 +1173,14 @@ class workingctx(committablectx):
wlock.release()
def copy(self, source, dest):
p = self._repo.wjoin(dest)
if not os.path.lexists(p):
try:
st = self._repo.wvfs.lstat(dest)
except OSError, err:
if err.errno != errno.ENOENT:
raise
self._repo.ui.warn(_("%s does not exist!\n") % dest)
elif not (os.path.isfile(p) or os.path.islink(p)):
return
if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)):
self._repo.ui.warn(_("copy failed: %s is not a file or a "
"symbolic link\n") % dest)
else: